Pierrec Adepte de la Grande Tasse Bleue
Nombre de messages : 99
Date d'inscription : 16/06/2011
| Sujet: [Résolu <3] Action sur Tous/N'importe quel/Certains personnages Dim 16 Mar 2014 - 12:17 | |
| Bonjour, je reviens avec une autre question peut-être délicate (j'espère que non).
Je dois gérer dans mon jeu un grand nombre de personnages (24) qui, disons, accompagnent ou non le joueur. Je suis donc souvent amené à les changer de room en groupe, à checker leurs status etc...Cela donne à chaque fois des paquets de 24 commandes (ou plus)
Je souhaites donc savoir s'il existait une astuce pour effectuer des commandes sur tout ou partie des personnages
exemple de choses que j'aimerais faire :
- Si le x de n'importe quel perso est égal à 30, faire ceci - Tous les personnages en Room 1 vont en Room2 - Combien ai-je de personnages en Room3
Je peux evidement mettre mes gros paquets de commandes dans des fonctions individuelles, mais j'ai tellement de type de requêtes différentes que ça ne simplifierait pas tant les choses.
Dernière édition par Pierrec le Dim 16 Mar 2014 - 13:17, édité 1 fois |
|
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: [Résolu <3] Action sur Tous/N'importe quel/Certains personnages Dim 16 Mar 2014 - 12:56 | |
| - Pierrec a écrit:
- Je souhaites donc savoir s'il existait une astuce pour effectuer des commandes sur tout ou partie des personnages
Un des problèmes du langage d'AGS, c'est qu'on ne peut pas passer de pointeurs vers des fonctions, et donc on ne peut pas créer des commandes qui prendraient n'importe quelle fonction comme argument pour l'appliquer, par exemple, à l'ensemble des personnages. Au contraire ce serait quelque chose de très facile à faire en javascript (bien que la logique y soit un peu différente). Cela-dit je peux répondre à tes trois exemples. - Pierrec a écrit:
- - Tous les personnages en Room 1 vont en Room2
- Code:
-
// On va parcourir tous les personnages du jeu int i = 0; while (i < Game.CharacterCount) { character[i].ChangeRoom(3); // On transporte le i-ème perso en pièce 3 i++; } - Pierrec a écrit:
- - Combien ai-je de personnages en Room3
- Code:
-
// On va parcourir tous les personnages du jeu int i = 0, n = 0; while (i < Game.CharacterCount) { // Si le i-ème personnage est en pièce 3, on augmente n if (character[i].Room == 3) n++; i++; } // Maintenant, n est égal au nombre de personnages en pièce 3 - Pierrec a écrit:
- - Si le x de n'importe quel perso est égal à 30, faire ceci
- Code:
-
// On part de la supposition qu'aucun n'est à 30 ("false") bool unegala30 = false; // On parcourt tous les personnages du jeu int i = 0; while (i < Game.CharacterCount) { // Si le i-ème personnage est à 30, on révise notre supposition > "true" if (character[i].x == 30) unegala30 = true; i++; } // Si unegala30 vaut "true", c'est qu'on a révisé notre supposition, // ie. au moins un personnage est à 30 if (unegala30) { // faire ceci } Je te mets aussi "si le x de TOUS LES perso est égal à 30" : - Code:
-
// On part de la supposition que tous les personnages sont à 30 ("true") bool tousegauxa30 = true; // On parcourt tous les personnages du jeu int i = 0; while (i < Game.CharacterCount) { // Si le i-ème personnage n'est pas à 30, on révise notre supposition > "false" if (character[i].x != 30) tousegauxa30 = false; i++; } // Si tousegauxa30 vaut "true", c'est qu'on n'a pas révisé notre supposition, // ie. tous les personnages sont à 30 if (tousegauxa30) { // faire ceci } J'imagine que tu comprends l'idée de la boucle pour parcourir tous les personnages. Après quand tu fais des vérifications, il faut bien se figurer la logique des quantifieurs : "tous" ou "au moins un". Notre boucle va vérifier les personnages individuellement successivement, et donc il faut que tu réfléchisses comme ça "il suffit qu'au moins un personnage remplisse telle condition pour que la supposition soit vérifiée/invalidée". À partir de là, tu sais si tu dois commencer à "true" ou à "false". _________________ 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 ! |
|
Pierrec Adepte de la Grande Tasse Bleue
Nombre de messages : 99
Date d'inscription : 16/06/2011
| Sujet: Re: [Résolu <3] Action sur Tous/N'importe quel/Certains personnages Dim 16 Mar 2014 - 13:16 | |
| Tu commences ta réponse en me disant qu'on ne peut pas, puis tu me donnes exactement ce que je recherchais! Merci pour tes explications très claires : j'ai tout compris! Et tu m'ouvres de nouveaux horizons sur AGS. -Je ne savais même pas qu'on pouvait faire des "character[i]" ! Rien qu'avec cette simple information, j'aurais pu commencer à creuser! C'est presque ce que je demandais en fait! -Je n'avais jamais compris comment While s'utilisait, et maintenant c'est très clair. -Et je ne savais pas non plus qu'on pouvait augmenter une variable avec ++, jusqu'à présent je faisais un laborieux i=i+1; ça marche avec i-- aussi ? et on peut faire i+++ pour +2? Merci mille fois! C'est parfait! Je suis paré maintenant! |
|
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: [Résolu <3] Action sur Tous/N'importe quel/Certains personnages Dim 16 Mar 2014 - 13:28 | |
| - Pierrec a écrit:
- Tu commences ta réponse en me disant qu'on ne peut pas, puis tu me donnes exactement ce que je recherchais!
En fait je voulais dire qu'on ne peut pas créer de commande du genre Character.AreAll(this.Room == 3);, Character.IsOne(this.x == 30) ou encore Character.DoForAll(this.ChangeRoom(3)); - Pierrec a écrit:
- ça marche avec i-- aussi ? et on peut faire i+++ pour +2?
Oui, ça marche avec i--, mais pas avec i+++ (ni i--- évidemment). Tu peux faire i += 2; en revanche. _________________ 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 ! |
|
Pierrec Adepte de la Grande Tasse Bleue
Nombre de messages : 99
Date d'inscription : 16/06/2011
| Sujet: Re: [Résolu <3] Action sur Tous/N'importe quel/Certains personnages Dim 16 Mar 2014 - 13:31 | |
| - Citation :
- En fait je voulais dire qu'on ne peut pas créer de commande du genre Character.AreAll(this.Room == 3);, Character.IsOne(this.x == 30) ou encore Character.DoForAll(this.ChangeRoom(3));
Peu importe ! Tu as déjà résolu tous mes problèmes bien au delà de mes espérances. Je suis en train de réécrire tout mon code avec ces whiles, il va fondre comme neige au soleil! |
|
Billbis Disciple de la Grande Tasse Bleue
Nombre de messages : 1346
Date d'inscription : 10/05/2012
| Sujet: Re: [Résolu <3] Action sur Tous/N'importe quel/Certains personnages Dim 16 Mar 2014 - 13:58 | |
| |
|
Pierrec Adepte de la Grande Tasse Bleue
Nombre de messages : 99
Date d'inscription : 16/06/2011
| Sujet: Re: [Résolu <3] Action sur Tous/N'importe quel/Certains personnages Dim 16 Mar 2014 - 16:42 | |
| rho la honte En fait j'avais du un peu tout copier-coller vos extraits de code sans trop comprendre ce que je faisais. Maintenant j'ai compris Faut juste m'expliquer longtemps et à plusieurs reprises (Bon là dernière fois aussi j'ai dit que j'avais compris mais j'avais un peu menti, là non ) |
|
Contenu sponsorisé
| Sujet: Re: [Résolu <3] Action sur Tous/N'importe quel/Certains personnages | |
| |
|