AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 [Résolu] [IA] Action celon comportement

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
kujaff
Très bonne participation
avatar

Messages : 127
Localisation : Dans mon Atelier
Projet Actuel : Puzzle/Reflexion

MessageSujet: [Résolu] [IA] Action celon comportement   Ven 22 Nov 2013 - 21:06

Salut,

J'ai commencer a faire mon IA qui fonctionnait niquel, mais j'ai voulu pousser le truc encore plus loin en lui initalisant un comportement (normal, agressif, très agressif).

Pour cela, dans mon create de l'obj_enemi_1 j'ai crée une variable comportement = random(2)+1  (soit 1, soit 2, soit 3)

mon ennemi est composé de 5 parties, la tête, le corps, les bras, l'arme.

J'ai voulue faire en sorte que si le comportement == 1 alors il tire ça, etc.

Vue que les membres suivent la position du héro, et que selon le comportement il tire a la tête ou pas, j'ai aussi mit des conditions pour les sprites (les tires a la tête se font a l'aide d'une variable aléatoire qui s’initialise avant de tiré.)


Le soucis, c'est qu'une fois que je suis repérer, il est censé me pointer et me tirer dessus (celons le comportement qui a été initialisé) mais rien ne se passe...

Voici mon code, et désolé s'il est "crade" et surement incompréhensible, mais j'aimerai bien savoir pourquoi ça bug ^^'

Code:
if obj_enemi_1.aggro == 1
{
permission_tir +=1
}

if permission_tir > 20
{
persmission_tir = 20
}

if (magasin_ak47 <= 0 && recharge == 0)
{
sound_play(sd_reload)
recharge = 1
alarm[1] = 45;
obj_enemi_1.marche = 0
obj_enemi_1.speed = 0
}


if (obj_enemi_1.comportement == 3)
{
if (obj_enemi_1.aggro == 1 && tir == 0 && permission_tir >= 20 && magasin_ak47 > 0 && obj_enemi_1.poursuite == 0)
{
sound_play(sd_rafalex3_ak47)
tir = 1
obj_enemi_1.marche = 0
alarm[2] = 25;
alarm[0]=25;
magasin_ak47 -=3;

if direction == 0
{
instance_create(x+lengthdir_x(50,image_angle),y+lengthdir_y(50,image_angle),obj_balle_AK47_enemi);
instance_create(x+lengthdir_x(40,image_angle),y+lengthdir_y(40,image_angle),obj_balle_AK47_enemi);
instance_create(x+lengthdir_x(30,image_angle),y+lengthdir_y(30,image_angle),obj_balle_AK47_enemi);
}
if direction == 180
{
instance_create(x+lengthdir_x(50,image_angle),y+lengthdir_y(50,image_angle),obj_balle_AK47_enemi_bis);
instance_create(x+lengthdir_x(40,image_angle),y+lengthdir_y(40,image_angle),obj_balle_AK47_enemi_bis);
instance_create(x+lengthdir_x(30,image_angle),y+lengthdir_y(30,image_angle),obj_balle_AK47_enemi_bis);
}
}

if (obj_enemi_1.aggro == 1 && tir == 0 && permission_tir >= 20 && magasin_ak47 > 0 && obj_enemi_1.poursuite == 1)
{
sound_play(sd_ak47)
tir = 1
alarm[2] = 50;
alarm[0]=50;
magasin_ak47 -=3;

if direction == 0
{
if direction == 0
{
instance_create(x+lengthdir_x(50,image_angle),y+lengthdir_y(50,image_angle),obj_balle_AK47_enemi);
instance_create(x+lengthdir_x(40,image_angle),y+lengthdir_y(40,image_angle),obj_balle_AK47_enemi);
instance_create(x+lengthdir_x(30,image_angle),y+lengthdir_y(30,image_angle),obj_balle_AK47_enemi);
}
if direction == 180
{
instance_create(x+lengthdir_x(50,image_angle),y+lengthdir_y(50,image_angle),obj_balle_AK47_enemi_bis);
instance_create(x+lengthdir_x(40,image_angle),y+lengthdir_y(40,image_angle),obj_balle_AK47_enemi_bis);
instance_create(x+lengthdir_x(30,image_angle),y+lengthdir_y(30,image_angle),obj_balle_AK47_enemi_bis);
}
}
}
}


if (obj_enemi_1.comportement == 2)
{
if (obj_enemi_1.aggro == 1 && tir == 0 && permission_tir >= 20 && magasin_ak47 > 0 && obj_enemi_1.poursuite == 0)
{
sound_play(sd_rafalex3_ak47)
tir = 1
obj_enemi_1.marche = 0
alarm[2] = 25;
alarm[0]=25;
magasin_ak47 -=3;

if direction == 0
{
instance_create(x+lengthdir_x(50,image_angle),y+lengthdir_y(50,image_angle),obj_balle_AK47_enemi);
instance_create(x+lengthdir_x(40,image_angle),y+lengthdir_y(40,image_angle),obj_balle_AK47_enemi);
instance_create(x+lengthdir_x(30,image_angle),y+lengthdir_y(30,image_angle),obj_balle_AK47_enemi);
}
if direction == 180
{
instance_create(x+lengthdir_x(50,image_angle),y+lengthdir_y(50,image_angle),obj_balle_AK47_enemi_bis);
instance_create(x+lengthdir_x(40,image_angle),y+lengthdir_y(40,image_angle),obj_balle_AK47_enemi_bis);
instance_create(x+lengthdir_x(30,image_angle),y+lengthdir_y(30,image_angle),obj_balle_AK47_enemi_bis);
}
}

if (obj_enemi_1.aggro == 1 && tir == 0 && permission_tir >= 20 && magasin_ak47 > 0 && obj_enemi_1.poursuite == 1)
{
sound_play(sd_ak47)
tir = 1
alarm[2] = 50;
alarm[0]=50;
magasin_ak47 -=1;

if direction == 0
{
instance_create(x+lengthdir_x(50,image_angle),y+lengthdir_y(50,image_angle),obj_balle_AK47_enemi);
}
if direction == 180
{
instance_create(x+lengthdir_x(50,image_angle),y+lengthdir_y(50,image_angle),obj_balle_AK47_enemi_bis);
}
}
}


if (obj_enemi_1.comportement == 1)
{
if (obj_enemi_1.aggro == 1 && tir == 0 && permission_tir >= 20 && magasin_ak47 > 0 && obj_enemi_1.poursuite == 0)
{
sound_play(sd_ak47)
tir = 1
alarm[2] = 50;
alarm[0]=50;
magasin_ak47 -=1;

if direction == 0
{
instance_create(x+lengthdir_x(50,image_angle),y+lengthdir_y(50,image_angle),obj_balle_AK47_enemi);
}
if direction == 180
{
instance_create(x+lengthdir_x(50,image_angle),y+lengthdir_y(50,image_angle),obj_balle_AK47_enemi_bis);
}
}

if (obj_enemi_1.aggro == 1 && tir == 0 && permission_tir >= 20 && magasin_ak47 > 0 && obj_enemi_1.poursuite == 1)
{
sound_play(sd_ak47)
tir = 1
alarm[2] = 50;
alarm[0]=50;
magasin_ak47 -=1;

if direction == 0
{
instance_create(x+lengthdir_x(50,image_angle),y+lengthdir_y(50,image_angle),obj_balle_AK47_enemi);
}
if direction == 180
{
instance_create(x+lengthdir_x(50,image_angle),y+lengthdir_y(50,image_angle),obj_balle_AK47_enemi_bis);
}
}
}











if global.pause == 0
{
if (obj_enemi_1.marche == 1 && obj_enemi_1.aggro == 0 && obj_enemi_1.recherche == 0)
{
if obj_enemi_1.direction == 0
{
image_angle = 290
sprite_index = spr_AK47_droite
}
if obj_enemi_1.direction == 180
{
image_angle = 240
sprite_index = spr_AK47_gauche
}
}
if (obj_enemi_1.marche == 1 && obj_enemi_1.recherche == 1 && obj_enemi_1.aggro == 0)
{
if obj_enemi_1.direction == 0
{
image_angle = 290
sprite_index = spr_AK47_droite
}

if obj_enemi_1.direction == 180
{
image_angle = 240
sprite_index = spr_AK47_gauche
}
}



if (obj_enemi_1.marche == 0 && obj_enemi_1.aggro == 1)
{
if obj_enemi_1.comportement == 1
{
if obj_hero.x < obj_enemi_1.x
{
if obj_ak47_enemi.vise >= 0 && obj_ak47_enemi.vise < 89
{
image_angle = point_direction(x,y,obj_hitbox_corps_hero.x,obj_hitbox_corps_hero.y)
}
if obj_ak47_enemi.vise >= 89 && obj_ak47_enemi.vise < 100
{
image_angle = point_direction(x,y,obj_hitbox_tete_hero.x,obj_hitbox_tete_hero.y)
}
sprite_index = spr_bras_avant_gauche_enemi1
}

if obj_hero.x > obj_enemi_1.x
{
if obj_ak47_enemi.vise >= 0 && obj_ak47_enemi.vise < 89
{
image_angle = point_direction(x,y,obj_hitbox_corps_hero.x,obj_hitbox_corps_hero.y)
}
if obj_ak47_enemi.vise >= 89 && obj_ak47_enemi.vise < 100
{
image_angle = point_direction(x,y,obj_hitbox_tete_hero.x,obj_hitbox_tete_hero.y)
}
sprite_index = spr_bras_avant_droit_enemi1
}
}




else if obj_enemi_1.comportement == 2
{
if obj_hero.x < obj_enemi_1.x
{
if obj_ak47_enemi.vise >= 0 && obj_ak47_enemi.vise < 84
{
image_angle = point_direction(x,y,obj_hitbox_corps_hero.x,obj_hitbox_corps_hero.y)
}
if obj_ak47_enemi.vise >= 84 && obj_ak47_enemi.vise < 100
{
image_angle = point_direction(x,y,obj_hitbox_tete_hero.x,obj_hitbox_tete_hero.y)
}
sprite_index = spr_bras_avant_gauche_enemi1
}

if obj_hero.x > obj_enemi_1.x
{
if obj_ak47_enemi.vise >= 0 && obj_ak47_enemi.vise < 84
{
image_angle = point_direction(x,y,obj_hitbox_corps_hero.x,obj_hitbox_corps_hero.y)
}
if obj_ak47_enemi.vise >= 84 && obj_ak47_enemi.vise < 100
{
image_angle = point_direction(x,y,obj_hitbox_tete_hero.x,obj_hitbox_tete_hero.y)
}
sprite_index = spr_bras_avant_droit_enemi1
}
}


else if obj_enemi_1.comportement == 3
{
if obj_hero.x < obj_enemi_1.x
{
if obj_ak47_enemi.vise >= 0 && obj_ak47_enemi.vise < 79
{
image_angle = point_direction(x,y,obj_hitbox_corps_hero.x,obj_hitbox_corps_hero.y)
}
if obj_ak47_enemi.vise >= 79 && obj_ak47_enemi.vise < 100
{
image_angle = point_direction(x,y,obj_hitbox_tete_hero.x,obj_hitbox_tete_hero.y)
}
sprite_index = spr_bras_avant_gauche_enemi1
}


if obj_hero.x > obj_enemi_1.x
{
if obj_ak47_enemi.vise >= 0 && obj_ak47_enemi.vise < 79
{
image_angle = point_direction(x,y,obj_hitbox_corps_hero.x,obj_hitbox_corps_hero.y)
}
if obj_ak47_enemi.vise >= 79 && obj_ak47_enemi.vise < 100
{
image_angle = point_direction(x,y,obj_hitbox_tete_hero.x,obj_hitbox_tete_hero.y)
}
sprite_index = spr_bras_avant_droit_enemi1
}
}
}

if (obj_enemi_1.marche == 1 && obj_enemi_1.aggro == 1)
{
if obj_enemi_1.comportement == 1
{
if obj_hero.x < obj_enemi_1.x
{
if obj_ak47_enemi.vise >= 0 && obj_ak47_enemi.vise < 89
{
image_angle = point_direction(x,y,obj_hitbox_corps_hero.x,obj_hitbox_corps_hero.y)
}
if obj_ak47_enemi.vise >= 89 && obj_ak47_enemi.vise < 100
{
image_angle = point_direction(x,y,obj_hitbox_tete_hero.x,obj_hitbox_tete_hero.y)
}
sprite_index = spr_bras_avant_gauche_enemi1
}

if obj_hero.x > obj_enemi_1.x
{
if obj_ak47_enemi.vise >= 0 && obj_ak47_enemi.vise < 89
{
image_angle = point_direction(x,y,obj_hitbox_corps_hero.x,obj_hitbox_corps_hero.y)
}
if obj_ak47_enemi.vise >= 89 && obj_ak47_enemi.vise < 100
{
image_angle = point_direction(x,y,obj_hitbox_tete_hero.x,obj_hitbox_tete_hero.y)
}
sprite_index = spr_bras_avant_droit_enemi1
}
}




if obj_enemi_1.comportement == 2
{
if obj_hero.x < obj_enemi_1.x
{
if obj_ak47_enemi.vise >= 0 && obj_ak47_enemi.vise < 84
{
image_angle = point_direction(x,y,obj_hitbox_corps_hero.x,obj_hitbox_corps_hero.y)
}
if obj_ak47_enemi.vise >= 84 && obj_ak47_enemi.vise < 100
{
image_angle = point_direction(x,y,obj_hitbox_tete_hero.x,obj_hitbox_tete_hero.y)
}
sprite_index = spr_bras_avant_gauche_enemi1
}

if obj_hero.x > obj_enemi_1.x
{
if obj_ak47_enemi.vise >= 0 && obj_ak47_enemi.vise < 84
{
image_angle = point_direction(x,y,obj_hitbox_corps_hero.x,obj_hitbox_corps_hero.y)
}
if obj_ak47_enemi.vise >= 84 && obj_ak47_enemi.vise < 100
{
image_angle = point_direction(x,y,obj_hitbox_tete_hero.x,obj_hitbox_tete_hero.y)
}
sprite_index = spr_bras_avant_droit_enemi1
}
}


if obj_enemi_1.comportement == 3
{
if obj_hero.x < obj_enemi_1.x
{
if obj_ak47_enemi.vise >= 0 && obj_ak47_enemi.vise < 79
{
image_angle = point_direction(x,y,obj_hitbox_corps_hero.x,obj_hitbox_corps_hero.y)
}
if obj_ak47_enemi.vise >= 79 && obj_ak47_enemi.vise < 100
{
image_angle = point_direction(x,y,obj_hitbox_tete_hero.x,obj_hitbox_tete_hero.y)
}
sprite_index = spr_bras_avant_gauche_enemi1
}


if obj_hero.x > obj_enemi_1.x
{
if obj_ak47_enemi.vise >= 0 && obj_ak47_enemi.vise < 79
{
image_angle = point_direction(x,y,obj_hitbox_corps_hero.x,obj_hitbox_corps_hero.y)
}
if obj_ak47_enemi.vise >= 79 && obj_ak47_enemi.vise < 100
{
image_angle = point_direction(x,y,obj_hitbox_tete_hero.x,obj_hitbox_tete_hero.y)
}
sprite_index = spr_bras_avant_droit_enemi1
}
}
}  

}
Cordialement.


Dernière édition par kujaff le Sam 23 Nov 2013 - 9:03, édité 1 fois
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: [Résolu] [IA] Action celon comportement   Sam 23 Nov 2013 - 7:44

Nan mais t'as vu la taille de ton code ? Yum! 
Déjà, dans les premières lignes, ia ecrit persmission_tir, donc ca peut pas marcher... Et a mon avis ton problème se situe au niveau de l'initialisation de l'agressivité, avec le calcul que tu nous a donné, ia de grandes chances que le nombre soit un nombre a virgule... Essaie d'arrondir les valeurs ou fait un choose(1,2,3).

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
kujaff
Très bonne participation
avatar

Messages : 127
Localisation : Dans mon Atelier
Projet Actuel : Puzzle/Reflexion

MessageSujet: Re: [Résolu] [IA] Action celon comportement   Sam 23 Nov 2013 - 9:02

Ouai !!! Terrence t'a raison ^^'

Sataner nombre a virgule ! Ce matin, je me lève et je me dit ma variable se dessine "1 20"... Zut que suis-je bête ! Bien sur ! Comment la condition peut être égale a 1 si le nombre est décimal...

Par contre, je n'ai pas mit "choose()" j'ai garder mon random avec un arondi

Code:
round(random(2)+1)
Car par la suite je vais l'augmenter "round(random(99)+1)" pour équilibre un peu car une chance sur 3 de tomber sur l'ia agressif c'est cheat, sachant qu'elle ne fait pas vraiment de cadeau !


La permission_tir marche, en faite, c'est pour lui laisser le temps de lever l'arme et de tirer sur le hero, car sinon il tire en levant sont canon et tir vers les pieds du hero Wink


Donc merci Terence d'avoir confirmer mes doutes ^^'

Et désolé d'avoir ouvert un poste avec un problème aussi bête (oublier d'arrondir) Néanmoins ça pourra servir a certain ^^

Cordialement
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: [Résolu] [IA] Action celon comportement   

Revenir en haut Aller en bas
 
[Résolu] [IA] Action celon comportement
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Agoraphobie, phobie sociale: Maladie ou trouble du comportement?
» Pacific Action (WWII)
» Action Normande - Opération autocollant
» Vigile et action du 31 mai???
» Les "produits" Action Normande.

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