AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment :
ETB Pokémon Fable Nébuleuse : où ...
Voir le deal

 

 [Résolu] [IA] Action celon comportement

Aller en bas 
2 participants
AuteurMessage
kujaff
Très bonne participation
kujaff


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

[Résolu] [IA] Action celon comportement Empty
MessageSujet: [Résolu] [IA] Action celon comportement   [Résolu] [IA] Action celon comportement EmptyVen 22 Nov 2013 - 22: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 - 10:03, édité 1 fois
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

[Résolu] [IA] Action celon comportement Empty
MessageSujet: Re: [Résolu] [IA] Action celon comportement   [Résolu] [IA] Action celon comportement EmptySam 23 Nov 2013 - 8: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
kujaff


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

[Résolu] [IA] Action celon comportement Empty
MessageSujet: Re: [Résolu] [IA] Action celon comportement   [Résolu] [IA] Action celon comportement EmptySam 23 Nov 2013 - 10: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é





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

Revenir en haut Aller en bas
 
[Résolu] [IA] Action celon comportement
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [resolu] texte + action
» [Résolu] action control
» Résolu Problème avec l'action saut
» [Résolu] Attribuer une action différente à la même instance
» Boucle infinie, comportement illogique, bref, pétage de plomb.

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: