
Simplification I : Vérifier des variables avec un interrupteur Ecrit par hellper
Note : Ce tutoriel fonctionne à la fois avec 2k, 2K3, XP et VX. Mais il vous sera surement plus utile avec 2K et 2k3 qui utilisent plus de programmation évènementielle.
Notebis : Ce tutoriel nécessite un minimum de connaissance en programmation évènementielle ou vous risquez de ne pas le comprendre.
Imaginons que vous fassiez un rpg pouvant accepter jusqu'à six héros dans l'équipe. Pour cela, vous êtes obligé de passer outre le système d'équipe de base puisque limité à 4 héros. Vous décidez alors d'utiliser un système de variable utilisant l'identifiant du héros de cette manière :
1 2 3 4 5 6
| Vhéros1 = Idhéros Vhéros2 = Idhéros Vhéros3 = Idhéros Vhéros4 = Idhéros Vhéros5 = Idhéros Vhéros6 = Idhéros |
Note : Idhéros correspond à chaque fois à l'identifiant d'un héros différent.Maintenant, si vous voulez vérifier la présence d'un héros, vous devrez faire un code ressemblant à peu près à ceci :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Si Vhéros1 = IdX (pour un Id donné) Faire action1 (ce que vous faîtes s'il est là) Sinon Si Vhéros2 = IdX Faire action1 Sinon Si Vhéros3 = IdX Faire action1 Sinon Si Vhéros4 = IdX Faire action1 Sinon Si Vhéros5 = IdX Faire action1 Sinon Si Vhéros6 = IdX Faire action1 Sinon Faire action2 (ce que vous faîtes s'il n'est pas là) |
Vous avez là un code de 19 lignes. Si vous le faîtes pour 3 héros et en admettant que le code Faire action1 et faire action2 prenne 5 ligne, ce qui est peu, ce la vous fait donc un total de 153 lignes. Et si dans Faire action1, vous vérifiez la présence d'un autre héros, c'est de l'ordre de900 à 1000 lignes, voire plus.
Le problème de ce code de vérification est qu'il n'est pas universel et doit être géré au cas par cas. Maintenant, je vais vous montrer comment simplifier efficacement ce code en utilisant le vérification par interrupteur. Je m'explique. Dans ce cas là, nous devons vérifier si un héros est dans une situation parmi les deux possible, c'est-à-dire :
- Soit il est présent.
- Soit il est absent.
Il est donc intéressant d'utiliser un interrupteur en faisant l'association désactivé/absent et activé/présent.
Maintenant, passons au code :
Tout d'abord, "créez" une variable, un interrupteur et un event commun activé par appel que vous nommez comme vous voulez. Ici, je les nommerai Vid, Intverif et Eventcom. L'event commun contiendra la partie principale du code. Mais avant, voici le code à placer pour vérifier :
1 2 3 4 5 6
| Vid =IdX (toujours pour un Id donné.) Appeller un event commun : Eventcom Si Intverif est activé Faire action1 Sinon Faire action2 |
Vous noterez que l'utilisation de la variable pour l'Id sert à la fois à garder la donnée pour Eventcom mais aussi à le rendre plus souple.
Voici ensuite le code à mettre dans Eventcom :
1 2 3 4 5 6 7 8 9 10 11 12 13
| Désactiver Intverif Si Vhéros1 = Vid Activer Intverif Si Vhéros2 = Vid Activer Intverif Si Vhéros3 = Vid Activer Intverif Si Vhéros4 = Vid Activer Intverif Si Vhéros5 = Vid Activer Intverif Si Vhéros6 = Vid Activer Intverif |
Vous noterez que l'interrupteur doit être désactivé pour mettre le cas absent par défaut, c'est-à-dire qu'il est absent si aucune des condition qui suit ne marche c'est-à-dire s'il n'est pas présent.
Ce qui nous fait donc un total de 6 lignes de base, soit en reprenant les 3 vérifications et les 5 lignes pour Faire action1 et Faire action2 un total de 42 lignes, soit un 111 lignes économisées.
Et vous pouvez enregistrer le position du héros dans un variable Vplace en rajoutant 6 lignes de code pour obtenir :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Désactiver Intverif Si Vhéros1 = Vid Activer Intverif Vplace=1 Si Vhéros2 = Vid Activer Intverif Vplace=2 Si Vhéros3 = Vid Activer Intverif Vplace=3 Si Vhéros4 = Vid Activer Intverif Vplace=4 Si Vhéros5 = Vid Activer Intverif Vplace=5 Si Vhéros6 = Vid Activer Intverif Vplace=6 |
Et voilà, c'est fini. N'hésitez pas à poser des question.
|
|
mtarzaim - posté le 08/01/2011 à 12:18:28. (2012 messages postés)
|

makeur escargot critiqueur hyperspacial | C'est quoi la valeur de IdX exactement ?
Parce que, si c'est un nombre de 1 à 6, il suffit de faire dans EventCom
Desactiver intverif
Si Vid != 0
Activer intverif
Vplace = Vid
fin si
Il me semble aussi que ce serait plus simple de gérer tout ça à travers un tableau.
Ca permettrait de faire des traitements incrémentifs de quelques lignes.
ex :
Pour i de 0 à 5
faire TableauHeros(i).action1
Fin pour |
Livres à lire : Making of Prince Of Persia, La saga des Jeux Video, Theory for Fun, l'Art du Game Design 100 objectifs, les Chroniques de Player One, les Grands Noms du Jeu Video |
|
hellper - posté le 08/01/2011 à 17:43:16. (728 messages postés)
|

Lalala... | mtarzaim a dit:
C'est quoi la valeur de IdX exactement ?
|
C'est l'ID du héros concerné par la vérification. Ça peut être n'importe quelle valeur.
Parce que, si c'est un nombre de 1 à 6, il suffit de faire dans EventCom
mtarzaim a dit:
Desactiver intverif
Si Vid != 0
Activer intverif
Vplace = Vid
fin si
|
Ce code ne signifie rien, puisque Vid ne sert qu'a enregistrer l'id du héros. Donc dès que tu chage sa valeur, puisqu'elle n'est pas remise a 0, la condition n'a plus d'intérêt.
mtarzaim a dit:
Il me semble aussi que ce serait plus simple de gérer tout ça à travers un tableau.
Ca permettrait de faire des traitements incrémentifs de quelques lignes.
|
Sauf qu'on ne peux pas faire de tableau en programmation évènementielle. Mais en désignant les variables Vhéros, on devrait pouvoir raccourcir encore un peu l'évènement commun. |
|
AristA - posté le 11/01/2011 à 17:07:27. (4363 messages postés)
|

CACA dans les RAVIOLIS. | Pour ce genre d'opération, il est encore plus recommandé d'utiliser des pointeurs, débutant. Tu ne fais ici que découvrir les fonctions.

10 lignes qu'importe le nombre de variable à traiter, échec et mat et as de pique.
On peut encore plus simplifier ça en mettant ça dans un commom event, et rendre ça encore plus flexible pour vérifier d'après une variable quelle variable on vérifiera. Ensuite modification en plus d'une variable qui pointe une autre variable qui est celle qu'on cherche.
C'est très peu concret, n'est ce pas ? |
Mob blog super, mes musiques, une carte ! | Tutos : Écran titre Custom, Anim de Marche fluide, Manuel du Power Mode 2003, Faire un bouton cliquable avec ce dernier, Éditer tout en jouant... Et d'autres trucs qui viendront. |
|
hellper - posté le 16/01/2011 à 18:07:01. (728 messages postés)
|

Lalala... | Et si la valeur de la variable n'est nulle part, on se retrouve dans une boucle infinie.
Bel echec et mat... |
|
AristA - posté le 24/01/2011 à 19:08:54. (4363 messages postés)
|

CACA dans les RAVIOLIS. | hellper a dit:
Et si la valeur de la variable n'est nulle part, on se retrouve dans une boucle infinie.
Bel echec et mat...
|
Et alors ?
Les boucles sont infinies. |
Mob blog super, mes musiques, une carte ! | Tutos : Écran titre Custom, Anim de Marche fluide, Manuel du Power Mode 2003, Faire un bouton cliquable avec ce dernier, Éditer tout en jouant... Et d'autres trucs qui viendront. | 
|