Ulis a écrit:Tu as essayé avec une boucle plutôt qu'avec des étiquettes ?
En fait les étiquettes sont utilisées comme une forme de
continue, dès qu'un déplacement est fait on retourne au début de la boucle. La boucle est donc faite non pas avec des étiquettes mais avec l'event en entier (vu que c'est du processus parallèle).
Pour ce qui est de l'event en fait il est composé de deux modules : un premier pour détecter si l'event peut faire un pas en avant et un second pour vérifier s'il peut aller dans chaque direction qui n'est pas derrière-lui (pour ne pas qu'il fasse demi-tour).
Le but du premier module est en fait pour gérer les croisements : Si jamais sa route est croisée par une autre il va toujours prendre en face de lui. Je sais pas si je suis clair ><
Pour ce qui est du bloc avec les SV[] au début il s'agit justement d'un code pour trouver la case qui se trouve devant le héros quelle que soit sa direction.
Donc pour faire ligne par ligne :
- Code:
SV[2] = me
SV[0] = event_x(SV[2])
SV[1] = event_y(SV[2])
On récupère son id dans SV[2] puis on s'en sert pour mettre sa position en x et y dans SV[0] et SV[1].
- Code:
SV[3] = event_direction(SV[2])
On récupère la direction dans laquelle il regarde (qui peut être 2, 4, 6, 8 s'il regarde en bas, gauche, droite, haut)
- Code:
SV[4] = [[0, 1], [-1, 0], [1, 0], [0, -1]]
Ici on crée un tableau de tableaux, chaque tableau représentant [un décalage en x, un décalage en y] chaque sous-tableau peut alors, en étant ajouté aux SV[0] et SV[1] représenté une case.
Et comment savoir quel sous tableau prendre ? L'astuce est d'utiliser la direction du héros
(qui peut être 2, 4, 6 ou 8) et l'utilser comme indice dans SV[4] pour pointer vers le bon décalage.
- Code:
SV[5] = (SV[3] / 2) - 1
Avec cette formule je change la direction du héros en indice utilisable
- Code:
SV[6] = SV[0] + SV[4][SV[5]][0]
SV[7] = SV[1] + SV[4][SV[5]][1]
Maintenant que j'ai mon indice il ne me reste plus qu'à l'utiliser dans le tableau et l'ajouter au X de l'event.
Par exemple :
Si l'event regarde en bas, la commande
- Code:
SV[3] = event_direction(SV[2])
Stockera 2 dans SV[3] puis
- Code:
SV[5] = (SV[3] / 2) - 1
Prend cette valeur et stocke "0" dans SV[5] (2/2-1 = 0)
SV[4][SV[5]]va donc retourner le sous-tableau à l'index 0 et [0] en sélectionnera la première valeur(0), de même que [1] en prendra la seconde (1)
Du coup pour SV[6], j'ai la position en X de l'event + 0 = sa position X, et pour SV[7], j'ai la position en Y de l'event + 1 = la case en dessous.
Donc avec ces deux données je pointe la case en j'ai la case juste en dessous de l'event quand il regarde en bas, plutôt cool ^^