Caly Utilisateur confirmé: Rang ****
Messages : 1285 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.
| Sujet: Mes ennemies et moi (recueil de l'intelligence artificielle). Jeu 25 Juil 2013 - 14: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. |
|
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Mes ennemies et moi (recueil de l'intelligence artificielle). Jeu 25 Juil 2013 - 16: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 _________________ Je suis partie sur les ailes du vent et la tempête m'a ramenée.
|
|
samylebonois Bavard
Messages : 99 Projet Actuel : Aucun projet.
| Sujet: Re: Mes ennemies et moi (recueil de l'intelligence artificielle). Sam 5 Avr 2014 - 23:09 | |
| génial ce topic ! Sa aidera quelque uns ! _________________ Projet - Aucun ! |
|
Contenu sponsorisé
| Sujet: Re: Mes ennemies et moi (recueil de l'intelligence artificielle). | |
| |
|