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 ^^