Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilFAQRechercherS'enregistrerMembresConnexion

Partagez | 
 

 Shi-Fu-Mi et intelligence artificielle

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: Shi-Fu-Mi et intelligence artificielle    Ven 30 Mar 2012 - 14:10

Bonjour bonjour. Après avoir une fois de plus écumé les tutoriaux de la grande tasse bleue (qui ont répondu à pas mal de mes questions) j'ouvre une fois encore un topic de question (désolé).

J'ai une nouvelle idée de jeu, mi-vrai projet, mi-exercice pour explorer le potentiel d'AGS, du coup je viens vous embêter pour demander quelques conseils. (Attention, je vais être un peu long)

Voilà, je souhaiterais faire un jeu en partie basé sur le principe du shi-fu-mi (pierre feuille ciseaux). en réalité c'est un peu plus complexe puisqu'il s'agit moins du principe du shi-fu-mi que de celui d'un autre jeu de mains (jeu de vilain) chinois dont je ne connais pas le nom. Dans ce jeu, il y a pareillement trois signes :
-Charger (qui permet de recharger un point d'énergie)
-Tirer (qui fait perdre un point de vie à l'adversaire et coûte un point d'énergie)
-Bloquer (qui contre un tir)
(Je compte en rajouter quelques autres pour enrichir le truc, mais là n'est pas la question. )
Les deux joueurs doivent donc afficher leur signe simultanément et le but est de parvenir à tirer sur l'adversaire au moment où il recharge pour le tuer (car deux tirs s'annulent).

Je compte donc utiliser ce principe de jeu pour des écrans de combat qui seront inclus dans le projet. Contrairement au pierre feuille ciseau, ce jeu comporte une part de stratégie (même si l'aléatoire prend toujours une grande place), il me faut donc parvenir à créer une intelligence artificielle à opposer au joueur. Rassurez-vous, je ne viens pas demander comment créer une IA sur AGS, ni comment mettre en place un tel jeu, c'est justement le défi que je me lance et je pense être tout à fait capable de programmer ça moi-même avec une série de variables une fois les bases posées.

Mon problème se trouve au niveau de la structure, et je recherche moins une solution que des conseils. J'ai déjà en tête à quoi le code doit ressembler (avec des if, des else etc...), je me demande simplement : où écrire ce code ? Je n'ai jamais cherché à aller plus loin que les fonctions existantes dans AGS, du coup, je ne sais pas par où commencer.

Tel que j'imagine le truc Il me faudrait donc :
- Un morceau de code qui définit le choix de l'intelligence artificielle (en fonction des différentes variables)
- Un morceau de code décrivant le comportement de chaque action (attaque/recharge/bloquer...)
- Un morceau de code définissant l'issue et les conséquences de la confrontation (Joueur perd 1 vie, IA gagne 1 energie...)

J'arrive à concevoir ce que je veux mettre dans ces morceaux de code, mais je ne sais pas comment les écrire de manière à pouvoir les appeler facilement. Faudrait-il mieux utiliser les "structs" ? des fonctions customs ? (et si oui, attachées à quoi ?) Faudrait-il écrire ceci dans le global script ? le script de la room ? Faudrait-il carrément créer un module ? Bref: comment démarrer ?
De nombreuses possibilité semblent s'offrir à moi, mais j'ai du mal à voir laquelle et la plus efficace, et je n'ai pas envie de tout avoir à refaire pour avoir initialement choisi une mauvaise solution perplexe

Mince, j'ai l'impression d'avoir été incompréhensible...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
-a-timburton-a-
Cliqueur Emérite
Cliqueur Emérite


Nombre de messages : 588

Date d'inscription : 17/05/2010


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Ven 30 Mar 2012 - 14:50

Même si je ne peux t'aider, l'idée est très bonne langue

_________________
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
samielatriyahoofr
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 114

Age : 17

Localisation : au coeur d'un jeu de l age d or

Date d'inscription : 21/03/2012


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Ven 30 Mar 2012 - 18:16

j aime bien l idée mais desolé je ne peux pas t aider...Dis nous quand ton jeu sera achevé merci




















_________________
sourire
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Ven 30 Mar 2012 - 22:12

Bon, alors j'ai un peu avancé, et tout (sauf l'IA) se trouve finalement dans le script de la room. Ca semble fonctionner, il ne me reste plus qu'à faire l'IA.
Toujours le même problème, je ne sais pas où inscrire son code pour l'"appeler". Il semble que struct ne fonctionne pas soit parce qu'il ne supporte pas les if soit parce qu'il ne supporte pas les variables (Syntax error at "if"; expected varibale type). Je ne sais pas ce qu'il veut dire.
Je continue mes recherches
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
samielatriyahoofr
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 114

Age : 17

Localisation : au coeur d'un jeu de l age d or

Date d'inscription : 21/03/2012


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Sam 31 Mar 2012 - 1:34

bonne chance
sourire

_________________
sourire
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Sam 31 Mar 2012 - 11:06

Bon....j'avance, j'avance, j'avance, j'ai fini de coder tout le fonctionnement de base des combats, et j'ai même codé une IA très basique. Mon problème est toujours le même : je ne sais toujours pas comment activer cette IA dans une fonction.
Je m'explique, j'aimerais que quand le joueur clique sur le bouton "Contrer" par exemple, une ligne me permettre de lancer le code de l'IA, définisse sa décision, afin que le reste du code contenu dans l'objet (défini si oui ou non, ça touche, qui perd de la vie etc...) puisse s'appliquer.
J'ai essayé avec struct, mais cela ne marche pas car il ne semble pas supporter les if, else etc
J'ai essayé avec une fonction custom, mais je ne peux alors pas la lancer au sein d'une autre fonction ce qui est pourtant mon objectif (nested fonctions not supported). Donc vraiment, je ne vois pas comment l'"appeler".
Une solution consiste évidemment à entrer le code de l'IA dans chacune des quatre fonctions "actions" (Load/Block/Blast/MegaBlast), mais ca fait d'une part un code interminable, et d'autre part, ça m'empêche de créer plusieurs IA, si je veux intégrer des comportements différents selon les adversaires.

Pour les curieux, voici à quoi ressemble mon IA,
EA et EB sont respectivement l'énergie du joueur et de l'adversaire (de 0 à 5)
IAchoice définit le choix de l'IA (1 : load, 2: block, 3: blast, 4: megablast)
A noter que c'est vraiment le squelette de l'IA, et que celle-ci se contente pour l'instant de choisir aléatoirement parmi les actions possibles. L'idée est de l'enrichir par la suite en prenant en compte la vie des deux joueurs, ainsi que de créer des IA aux différents comportements (bourrin, prudent, idiot, imprévisible...celle-ci serait plutôt l'imprevisible du coup ^^)


Code:
function IAAmy(){
  if(EA==0){
    if(EB==0){
      IAchoice=1;
    }
    if(EB==1){
      int ran=Random(2);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=3;
    }
    if(EB==2){
      int ran=Random(2);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=3;
    }   
    if(EB==3){
      int ran=Random(3);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=3;
      if (ran==3) IAchoice=4;
    }
    if(EB==4){
      int ran=Random(3);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=3;
      if (ran==3) IAchoice=4;
    }
    if(EB==5){
      int ran=Random(3);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=3;
      if (ran==3) IAchoice=4;
    }   
    }
  if(EA==1){
    if(EB==0){
      int ran=Random(2);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
    }
    if(EB==1){
      int ran=Random(3);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
    }
    if(EB==2){
      int ran=Random(3);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
    }   
    if(EB==3){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
    }
    if(EB==4){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
    }
    if(EB==5){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
    }   
  }
  if(EA==2){
      if(EB==0){
      int ran=Random(2);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
    }
    if(EB==1){
      int ran=Random(3);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
    }
    if(EB==2){
      int ran=Random(3);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
    }   
    if(EB==3){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
    }
    if(EB==4){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
    }
    if(EB==5){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
  }
  }
  if(EA==3){
        if(EB==0){
      int ran=Random(2);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
    }
    if(EB==1){
      int ran=Random(3);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
    }
    if(EB==2){
      int ran=Random(3);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
    }   
    if(EB==3){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
    }
    if(EB==4){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
    }
    if(EB==5){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
  }
  }
  if(EA==4){
        if(EB==0){
      int ran=Random(2);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
    }
    if(EB==1){
      int ran=Random(3);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
    }
    if(EB==2){
      int ran=Random(3);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
    }   
    if(EB==3){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
    }
    if(EB==4){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
    }
    if(EB==5){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
    }
  }
  if(EA==5){
        if(EB==0){
      int ran=Random(2);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
    }
    if(EB==1){
      int ran=Random(3);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
    }
    if(EB==2){
      int ran=Random(3);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
    }   
    if(EB==3){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
    }
    if(EB==4){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
    }
    if(EB==5){
      int ran=Random(4);
      if (ran==1) IAchoice=1;
      if (ran==2) IAchoice=2;
      if (ran==3) IAchoice=3;
      if (ran==4) IAchoice=4;
    }
}
}

Et un exemple d'une fonction d'action (en l'occurence : Blast) avec la ligne dans laquelle il me faudrait appeler l'IA, VA et VB sont respectivement la vie du joueur et de l'adversaire :

Code:
function Blast_AnyClick()
{
  LA LIGNE OU JE VOUDRAIS APPELER L'IA
if(IAchoice==1){
  SetGlobalInt(EA, GetGlobalInt(EA)-1);
  SetGlobalInt(VB, GetGlobalInt(VB)-1);
  }
if(IAchoice==2){
  SetGlobalInt(EA, GetGlobalInt(EA)-1);
}
if(IAchoice==3){
  SetGlobalInt(EA, GetGlobalInt(EA)-1);
  SetGlobalInt(EB, GetGlobalInt(EB)-1);
}
if(IAchoice==4){
  SetGlobalInt(EA, GetGlobalInt(EA)-1);
  SetGlobalInt(VA, GetGlobalInt(VA)-1);
  SetGlobalInt(EB, GetGlobalInt(EB)-3);
}
IAchoice=0;
}


Quelqu'un aurait-il une solution ? J'ai écumé l'aide d'AGS ainsi que ce forum et je n'ai rien trouvé
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Sam 31 Mar 2012 - 15:46

EUREKA! J'ai trouvé!
Il suffisait en fait de placer la fonction de l'IA AVANT celle dans laquelle elle est appelée. C'était tout simple! Je suis trop bête.

Sinon, les SetGlobalInt(VB, GetGlobalInt(VB)-1); ne marchent pas. J'ai du les remplacer par des tout simples VB=VB-1, si j'avais su ^^
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Dim 1 Avr 2012 - 19:48

Eh bien, heureux de voir que tu t'en sors tres bien tout seul !

J'aurais bien voulu t'aider mais en ce moment j'ai des problemes avec Internet ou je viens d'arriver pour 2 mois, bref.

Je n'ai pas tout lu en details car justement je ne dispose pas de tout le temps que je voudrais, mais je ne sais pas si tu as bien saisi l'utilisation des structs.
Tu ne peux pas mettre de if dedans car tu ne peux pas y mettre de code a executer directement. Une struct c'est en quelque sorte un repertoire de fonctions et de variables qui forment un ensemble coherent.
Les if seront donc plutot dans les fonctions repertoriees dans la structure.

Je pense que tu pourrais refaire ton code en utilisant les structures ce qui t'eviterait au passage de recourrir aux variables globales. Et ca serait plus coherent je pense pour une future extension a plusieurs niveaux. Bref, fais comme tu es le plus a l'aise et bravo a toi !

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php En ligne
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Lun 2 Avr 2012 - 12:31

Je ne sais pas à quoi tu penses quand tu parles de "Structures" et j'ai du mal à m'imaginer comment je pourrais me passer de variables globales vu que pour l'instant, la totalité du jeu est basée dessus perplexe Il y avait donc plus simple ? J'ai un peu la flemme de tout refaire.

Sinon, j'en profite pour poser d'autres questions ici pour ne pas avoir à créer de nouveaux sujets. J'ai un loop de deux sprites que j'aimerais que les personnages effectuent continuellement. Une sorte de standing position mouvante.
Je sais bien que je peux utiliser l'Idle view et la fixer le temps d'attente à 0 ou 1, mais pour des raisons assez compliquées, je ne veux pas utiliser l'Idle view.

J'ai donc pensé à de simples
cEgo.Animate(0, 12, eRepeat, eNoBlock);
cAmy.Animate(0, 12, eRepeat, eNoBlock);
(les loops concernés étant bien le 0 des views attribuées aux persos)
placés dans roomfirstload ou roomrepeat executly, mais étrangement, cela ne fonctionne pas.
Le premier sprite du loop s'affiche bien, mais pas d'animation.
Ce qui est étrange, c'est que si je remplace eNoBlock, par eBlock, ça marche (mais ça bloque ^^) Quelqu'un sait d'où peut venir le problème ?

Par ailleurs, j'ai un problème avec le mode du curseur que je voudrais en "Interact" dès le début, au lieu de "Look", mais ça je pense que je peux trouver tout seul en farfouillant dans l'aide.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Lun 2 Avr 2012 - 16:40

Pierrec a écrit:
Je ne sais pas à quoi tu penses quand tu parles de "Structures" et j'ai du mal à m'imaginer comment je pourrais me passer de variables globales vu que pour l'instant, la totalité du jeu est basée dessus perplexe Il y avait donc plus simple ? J'ai un peu la flemme de tout refaire.
En fait je voulais parler de struct. Mais c'est vrai que si tout ton jeu est basé sur ça, c'est peut-être pas nécessaire de refondre à ce point-là. Malgré tout je ne saurais que trop te conseiller de t'intéresser aux structs, ça peut être assez efficace.

Sinon j'ai remarqué que tu faisais quelque chose comme Random(2) et que tu vérifiais si ça retournait 1 ou 2 : attention, Random inclut 0 dans ses retours. Le plus simple serait donc de faire un truc du style : IAChoice = 1 + Random(1);, ce qui aurait pour effet de donner aléatoirement la valeur 1 ou 2 à IAChoice (1 +0 ou 1 + 1).

En ce qui concerne l'animation, tu ne devrais pas mettre eNoBlock dans repeatedly_execute car ça bloque le script "en permanence" (ou presque).
Si tu le mets dans room_load (plutôt que first_load, je crois, mais je peux me tromper), je ne vois pas pourquoi ça ne marcherait pas, même avec eNoBlock

Pour le curseur il suffit de changer la propriété mouse.Mode ^^

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php En ligne
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Mar 3 Avr 2012 - 19:23

Pour le curseur, merci, je crois que c'est réglé.
Pour l'animation, ça ne marche toujours pas, mais je vais laisser ça de côté pour le moment pour me concentrer sur des trucs un peu plus importants.
Pour le random : HAAAAAAAAAAAAAAAAAAAAAAAAAAAAA tu viens de résoudre un problème insoluble. Je me demandais pourquoi dès fois ça marchait et des fois non, et j'en venais à me dire que c'était un problème de ma souris tellement le code me semblait trop propre. Merci mille fois, je vais corriger ça immédiatement!

Sinon, quitte à continuer dans l'esprit "J'adore AGS, j'ai envie de faire tout sauf un point and click avec AGS", je me disais que je m'amuserais bien à rendre le jeu keyboard only. Pas de problème pour les commandes au sein du jeu, mais je me demandais s'il était possible de choisir les dialogues avec les flèches puis en cliquant sur Entrée. Si vous pensez que c'est impossible, j'abandonne tout de suite cette idée (parce qu'alterner entre le clavier et la souris, c'est peu pratique)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Mar 3 Avr 2012 - 19:52

Pierrec a écrit:
Pour l'animation, ça ne marche toujours pas, mais je vais laisser ça de côté pour le moment pour me concentrer sur des trucs un peu plus importants.
Ouais j'ai pas beaucoup l'habitude de m'amuser avec les animations donc je pense que le problème est vraiment tout con. Normalement le eNoBlock sert surtout pour faire des animations en arrière-plan alors je trouve ça bizarrre... Mais ce qui est sûr c'est qu'il ne faut pas lancer Animate dans repeatedly_execute sinon ça relancera l'animation depuis la première image à chaque cycle de jeu, résultant en une simple absence d'animation. Aussi pense à la commande LockView que tu dois peut-être utiliser avant de lancer l'animation.

Pierrec a écrit:
Sinon, quitte à continuer dans l'esprit "J'adore AGS, j'ai envie de faire tout sauf un point and click avec AGS", je me disais que je m'amuserais bien à rendre le jeu keyboard only. Pas de problème pour les commandes au sein du jeu, mais je me demandais s'il était possible de choisir les dialoguesavec les flèches puis en cliquant sur Entrée. Si vous pensez que c'est impossible, j'abandonne tout de suite cette idée (parce qu'alterner entre le clavier et la souris, c'est peu pratique)
Je ne vois pas de problème particulier pour ça, mais je ne suis pas certain que la fonction on_key_press réagisse lorsqu'un dialogue est en cours, comme on a vu avec votre problème (toi et Creamy) pour quitter le jeu pendant les dialogues.
Donc l'idée serait peut-être d'utiliser IsKeyDown dans repeatedly_execute(_always) et de t'amuser avec les propriétés des dialogues. La page d'aide sur les dialogues personnalisés évoque même cette fonction de parcourir les options avec les flèches, c'est donc bien que c'est possible ! Et du coup peut-être que c'est une orientation totalement différente de celle que je viens d'évoquer qu'il faut prendre...
Bref, je te laisse t'amuser tout seul pour programmer ça ^^

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php En ligne
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Mar 3 Avr 2012 - 19:59

Sweet!
Comment est-ce que tu trouves tous ces trucs ?!

Je vais consulter ça.
Pour ce qui est du on_key_press inactif pendant les dialogues, je m'en doutais et ça m'arrange. Je vais tenter le coup et je reviendrais me vanter si ça marche. Sinon je vais comme si de rien n'était et garder le curseur ^^

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Mar 3 Avr 2012 - 20:04

Pierrec a écrit:
Comment est-ce que tu trouves tous ces trucs ?!
Ben j'ai traduit (quasi) toutes les pages d'aide que je vous linke, donc forcément j'ai retenu quelques petits trucs ^^
Et puis la fonction "Rechercher" du wiki est vraiment efficace, j'ai juste tapé "dialogue" dedans, j'ai ouvert les deux-trois premiers résultats et : tada ! Je t'ai filé le lien de la page clin d\\\\'oeil

*Fait de la pub pour la traduction de l'aide*

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php En ligne
samielatriyahoofr
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 114

Age : 17

Localisation : au coeur d'un jeu de l age d or

Date d'inscription : 21/03/2012


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Ven 6 Avr 2012 - 21:31

on va bientot grace a vous deux voir et jouer ce magnifique jeu!!!!!!!!!!!!!!!!!!

_________________
sourire
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Ven 6 Avr 2012 - 22:04

oula ne nous enflamons pas. Le "bientôt" étant aussi incertain que le "magnifique".
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Lun 16 Avr 2012 - 13:52

Bon, le jeu (qui s'appelle pour l'instant "Split Fighters") avance bien, je suis surpris et heureux d'être parvenu à bidouiller un pseudo jeu de combat comme je le souhaitais. Coté script, presque tout est réglé, il ne me reste surtout à bosser sur les graphismes et les dialogues. Je fairais sans doute une présentation dans Les jeux en préparation d'ici peu (et j'espère bien dans les jeux terminés dans pas trop longtemps non plus).

J'ai totalement abandonné l'idée d'un jeu keyboard only, mais grâce à tes conseils Kitai j'ai pu me bidouiller la boîte de dialogue que je voulais, donc merci.

Il demeure cependant quelques détails qui me chagrinent (deux en fait).
Le premier, qui doit avoir une réponse assez simple, c'est la création d'une sorte de compte à rebours. J'ai créé un écran de continue (avec le décompte, 9, 8, 7...) qui permet quand on clique n'importe ou sur l'écran avant la fin du décompte, de revenir au jeu. Seulement, j'aimerais que le jeu quitte quand arrive zéro, or je n'y parviens pas : si je rajoute la commande quitter à la suite de l'animation du chrono, j'ai deux choix : soit le jeu quitte comme il faut à la fin si l'anim est en eBlock (ce qui ne va pas, puisqu'on ne peut pas continuer) soit il quitte instantannée si l'anim est en eNoBlock. Je me demandais donc s'il existait pas un petit truc pour créer un compte à rebours en parallèle qui permettrait de quitter après 10 secondes, sans bloquer le jeu.


Le deuxième problème, c'est celui qui me suit depuis le début : JE N ARRIVE PAS A ANIMER LES PERSONNAGES! Je voudrais qu'ils aient une animation en continu quand il ne se passe rien (mais pas Idle, un truc vraiment en continu) et il me faut donc utiliser la commande cEgo.Animate(0,15, eRepeat, eNoBlock);, seulement, ça ne fonctionne pas, je ne sais pas où placer cette commande. Si je le met dans Room Load/Room after fading, cela ne fonctionne que sur la durée du room load/room after fading, et si je le met dans Room repeatedly execute, cela ne fonctionne juste pas (ce qui apparemment est normal).
Du coup je ne vois pas comment faire pour dire à AGS : "Lance-moi cette animation en continu à partir du moment où rien ne vient le contredire (autre animation par ex)"

Après, c'est peut-être justement qu'une autre ligne de code vient faire conflit, mais je ne vois pas ce que cela peut-être, rien dans repeatedly execute notamment ne concerne l'animation des personnages.

Si vous avez des idées, je suis preneur, sinon, c'est pas grave, je vais devoir ruser d'une manière ou d'une autre
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Lun 16 Avr 2012 - 21:09

Pierrec a écrit:
Je me demandais donc s'il existait pas un petit truc pour créer un compte à rebours en parallèle qui permettrait de quitter après 10 secondes, sans bloquer le jeu.
Oui ce n'est pas très compliqué en fait.
Les timers, les animations et autres dans AGS se basent sur l'idée qu'un cycle de jeu équivaut à un quarantième de secondes. Il te suffit donc, pour calculer 10 secondes à partir d'un certain point, de calculer 10 * 40 = 400 cycles de jeu, après lesquels tu vas déclencher ton action (quitter en l'occurrence).
Une façon assez simple de le faire est la suivante.
Code:
// Première ligne du fichier script de la pièce où se passe ton décompte
int decompte = -1;

// La fonction repeatedly_execute correspondant à la pièce
function room_RepExec() {

  if (decompte == 0) {
    decompte = -1;
    QuitGame(0); // Par exemple
  }

  else if (decompte > 0) decompte--;

}

// Suite de ton code...

// A l'intérieur de la fonction où tu lances le décompte (peut-être room load)
  decompte = 400;
A mon avis ça devrait marcher comme un charme.

Pierrec a écrit:
Si je le met dans Room Load/Room after fading, cela ne fonctionne que sur la durée du room load/room after fading
Bizarre ce comportement, je ne le comprends pas...
Pierrec a écrit:
Du coup je ne vois pas comment faire pour dire à AGS : "Lance-moi cette animation en continu à partir du moment où rien ne vient le contredire (autre animation par ex)"
Il suffit justement de lui dire exactement ça clin d\\\\'oeil
Tu ne peux pas mettre Animate dans le repeatedly_execute parce que si tu relances l'animation à chaque cycle de jeu, alors c'est constamment la première image de la séquence d'animation qui sera affichée. Mais si justement tu fais comme tu l'as formulé, c'est-à-dire si tu demandes à animer seulement s'il n'y a pas d'autre animation, eh bien aucun soucis !
Tu peux donc faire comme ça dans ton repeatedy_execute (ou room_RepExec s'entend) :
Code:
  if (!cEgo.Animating) cEgo.Animate(0,15,eRepeat,eNoBlock);
Évidemment tu rajouteras des conditions au besoin, mais ça devrait avoir l'effet escompté. Si après ça ça ne marche toujours pas, alors il y a quelque chose qui m'a sérieusement échappé.

Sinon content d'apprendre que l'avancement va bon train ! Peut-être aura-t-on bientôt ce shifumi-like sous la main clin d\\\\'oeil

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php En ligne
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Mar 17 Avr 2012 - 18:28

Je n'ai pas encore eu le temps de me pencher sur le Countdown, mais j'ai pu tenté, tout excité ce fameux if (!cEgo.Animating) cEgo.Animate(0,15,eRepeat,eNoBlock);
et...ça ne marche toujours pas.
MAIS!
Je te remercie car cette ligne de code, couplée à tes explications m'a permis de localiser le problème : j'ai en effet dans mon repeat_executedly des commandes ChangeView qui me permettent de choisir l'apparence des personnages en fonction de leurs points de vie restant, genre :

Code:
if(VA==1){ 
LifeA.Animate(1,1, eRepeat, eNoBlock);
cEgo.ChangeView(9);
}
if(VA==2){ 
LifeA.Animate(2,1, eRepeat, eNoBlock);
cEgo.ChangeView(8);
}
if(VA==3){ 
LifeA.Animate(3,1, eRepeat, eNoBlock);
cEgo.ChangeView(7);
}

Et c'est bien de là d'où vient le problème (j'ai testé sans). J'imagine que la nouvelle view étant chargée en continu, aucune animation ne peut s’exécuter.
Il ne me reste donc plus qu'à trouver un autre système pour que ces changement de view s'opèrent. J'ai du mal à l'envisager pour le moment, mais je n'ai pas eu trop le temps de m'y pencher, je suis sûr que je vais trouver quelque chose.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Mar 17 Avr 2012 - 19:23

Pierrec a écrit:
j'ai en effet dans mon repeat_executedly des commandes ChangeView qui me permettent de choisir l'apparence des personnages en fonction de leurs points de vie restant
Aha ! Je me doutais bien qu'il y avait quelque chose qui tournait pas rond (ou trop rond pour le coup) langue

Pierrec a écrit:
Et c'est bien de là d'où vient le problème (j'ai testé sans). J'imagine que la nouvelle view étant chargée en continu, aucune animation ne peut s’exécuter.
Effectivement, la façon dont tu as écrit le code fait que la vue est "changée" en permanence, à chaque cycle de jeu, et donc l'image du personnage est chaque fois réinitialisée à la première de la séquence correspondant à la "nouvelle" vue.

Pierrec a écrit:
Il ne me reste donc plus qu'à trouver un autre système pour que ces changement de view s'opèrent. J'ai du mal à l'envisager pour le moment, mais je n'ai pas eu trop le temps de m'y pencher, je suis sûr que je vais trouver quelque chose.
Il suffit de ne demander à changer de vue que si celle du personnage n'est pas encore celle désirée :
Code:
if ((VA==1) && (cEgo.NormalView != 9)) { 
  LifeA.Animate(1,1, eRepeat, eNoBlock);
  cEgo.ChangeView(9);
}
else if ((VA==2) && (cEgo.NormalView != 8)) { 
  LifeA.Animate(2,1, eRepeat, eNoBlock);
  cEgo.ChangeView(8);
}
else if ((VA==3) && (cEgo.NormalView != 7)) { 
  LifeA.Animate(3,1, eRepeat, eNoBlock);
  cEgo.ChangeView(7);
}
Et voilà le problème résolu ! ^^

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php En ligne
Pierrec
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 99

Date d'inscription : 16/06/2011


MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Mar 17 Avr 2012 - 21:51

ha trop tard, finalement j'ai fait autrement :
une variable activée à chaque dégât pris puis
if (variable==1){
Patati changeview patata
variable=0
}
Mais merci encore pour ton aide
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Shi-Fu-Mi et intelligence artificielle    Aujourd'hui à 17:23

Revenir en haut Aller en bas
 
Shi-Fu-Mi et intelligence artificielle
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Eau artificielle
» TECHNIQUES POUR L'EAU ARTIFICIELLE
» Bêta test IA 1.25
» Napoleonic: Total War III (Beta)
» Créer un jeu de gestion ?

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: