AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Mes ennemies et moi (recueil de l'intelligence artificielle).

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Caly
Utilisateur confirmé: Rang ****
avatar

Messages : 1279
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

MessageSujet: Mes ennemies et moi (recueil de l'intelligence artificielle).   Jeu 25 Juil 2013 - 12:25

Bonjour, je créer ce post pour qu'on puisse partager nos connaissances sur "Intelligence artificiel" dans nos jeux.
Je met "intelligence artificielle" entre guillemets car dans certains cas il s'agit plus d'un comportements de mouvement que d'une intelligence (les ennemies dans Mario par exemple).

Je propose donc ici de mettre des codes de comportement de bestioles en tout genre histoire d'avoir des exemples pour créer nos propres ennemies.

A noter que ce qu'il faut mettre ici ce ne sont pas des scripts prêt à être copier collé, mais belle et bien des exemples pour nous inspirer/aiguiller dans nos projets.

J'ai crée ce topique car on a vraiment du mal à trouver ce genre d'exemple sur le web.

 




Voici le premier exemple :

Ennemie qui se déplace dans la pièce totalement au hasard et attaque le joueur s'il est à une certaine distance:
Code:
//Si l'instance est à l'arrêt on stop ici.
    if( stopped ) exit;

//Si l'instance n'est pas dans la Camera
//ou que que la Camera est en mouvement : on stop ici.
    if( isInView(x,y) == false or Camera.speed!=0 ) exit;

//Si l'instance n'est pas à sa vitesse maximum on accélére sa vitesse.
//Si l'instance à dépasser sa vitesse maximum on la fixe à sa limite.    
    if( speed < max_speed ) speed+=0.1;
    else if( speed > max_speed ) speed=max_speed;
    
//Si l'instance est à ses points de destination
    if( x==target_x and y==target_y ){
    
        //On à 20% de chance que l'instance s'arette.
            if( random(101) <=20 ){
                
                stopped=true; //On active l'arrêt.
                speed=0;      //On met la vitesse de déplacement à zéro.  
                
                //Alarme qui désactive l'arrêt de l'instance.
                //On l'appelle entre 2 et 5 secondes.
                alarm[0]=irandom_range(
                                room_speed*2,
                                room_speed*5
                                );
                
                //On stop le code ici.
                exit;
            }
    
        //Si on est pas dans les 20% de chance d'arrêt :
            
            //On redéfini une paire de point de destination.
                target_x= irandom_range( Camera.x+(NODE_WIDTH*2), Camera.x+VIEW_WIDTH-(NODE_WIDTH*3) );
                target_y= irandom_range( Camera.y+(NODE_HEIGHT*2), Camera.y+VIEW_HEIGHT-(NODE_HEIGHT*3) );
    
            //On aligne ses points avec une valeur de rupture.
                target_x = (target_x div SNAP_X)*SNAP_X;
                target_y = (target_y div SNAP_Y)*SNAP_Y;
    

//Si l'instance n'est pas au oint de destination:
//Que l'instance n'est pas en état "attaque" et que
//la distance du centre de l'instance et le joueur
//est inférieur à deux noeuds.
    }else if( attack==false and point_distance( x+(NODE_WIDTH/2),y+(NODE_HEIGHT/2),Player.x,Player.y )<=NODE_WIDTH*2 ){
    
        attack=true; //On active l'état "attaque".
        
        //On définie la position du joueur comme destination.
            target_x=Player.x;
            target_y=Player.y;
        
        //Alarme qui desactive l'état "attaque".
        //Appel dans 3 seconde.
            alarm[1]=room_speed*3;
    }

//On déplace l'instance vers la destination défini.
    moveTowardsPoint(target_x,target_y,speed);

NB: pour les fans du copié collé oubliez vos habitudes ça ne donneras rien.
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Mes ennemies et moi (recueil de l'intelligence artificielle).   Jeu 25 Juil 2013 - 14:06

Bonne idée !
Un script pour qu'un ennemi suive une cible, mais sans voir à travers les murs et derrière soi :
Code:

if(!collision_line(x,y,cible.x,cible.y,mur)  /* on voit la cible */
    &&diffAngle(image_angle,point_direction(x,y,cible.x,cible.y))<90){ // et elle est a peu près en face de nous
  gotoX=cible.x;
  gotoY=cible.y;
}
if(x==gotoX&&y==gotoY){
  // on a perdu la cible
  // vous pouvez choisir une position aléatoire pour gotoX et gotoY, le faire revenir sur ses pas ou simplement l'arreter
}
move_towards_point(gotoX,gotoY,vitesse);
Pour la fonction diffAngle vous pouvez faire un truc du genre (code de sachem) :
return ((((angle1 - angle2) % 360) + 540) % 360) - 180;

Bref, donc là j'ai pas tester, mais j'avais déjà fait cet algo ; donc le principe et là.
C'est bien pratique pour un jeu d'infiltration ; pour des gardes par exemple, s'ils te voient (et donc pas à travers un mur ou si t'es derrière eux), ils te suivent ; et s'ils te perdent de vue à un tournant, ils continuent dans cette direction, ce qui leur permettra peut etre de te voir à nouveau Smile

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
samylebonois
Bavard


Messages : 99
Projet Actuel : Aucun projet.

MessageSujet: Re: Mes ennemies et moi (recueil de l'intelligence artificielle).   Sam 5 Avr 2014 - 21:09

génial ce topic ! Sa aidera quelque uns !

_________________
Projet - Aucun !
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Mes ennemies et moi (recueil de l'intelligence artificielle).   

Revenir en haut Aller en bas
 
Mes ennemies et moi (recueil de l'intelligence artificielle).
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» (f) - YVONNE STRAHOVSKI — Amies... ennemies au fil de la mélodie
» Vie artificielle
» Musette - Recueil de 110 succès N°3
» Fenêtre Artificiel
» norvig, cours en ligne d'IA

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Programmation-
Sauter vers: