ActionScript 3 : Créer un damier dans un jeu.

Fermé
■▀▄ - 18 janv. 2009 à 18:35
 AJL38 - 22 mars 2009 à 22:08
Bonjour,

Je suis débutant en programmation et j'ai besoin d'aide pour résoudre un problème :
Je tente de créer un jeu avec Flash, dans le style Fire Emblem, c'est à dire un jeu de stratégie type échecs.
Il y a donc un damier (une grille), une zone de déplacement (des carrés bleus) et une distance d'attaque maximale (des carrés rouges).
Ces deux zones sont relatives à une capacité de mouvement.
Par exemple, pour une capacité de mouvement de '3' et une distance d'attaque de '1' on obtient :
http://img413.imageshack.us/img413/9004/m3a1ih1.png
Le joueur (positionné à la case verte) peut donc ce déplacer de 3 cases maximum et son attaque ne peut pas dépasser les carrés rouges.

J'arrive actuellement, avec une méthode probablement barbare, à afficher les cases bleus horizontales et verticales ainsi que les diagonales, c'est à dire :
http://img382.imageshack.us/img382/4899/m3a1actuelxk8.png
Je ne vois pas comment faire pour afficher les autres carrés bleu en fonction de la capacité de mouvement.

Sauriez vous comment faire ?
Auriez vous une méthode plus simple pour afficher les carrés déjà présents?

Le '.swf' est consultable ici :
http://www.luxobscura.org/betamode.html (cliquez sur le carré bleu vers le centre pour faire apparaitre le personnage)

Le '.fla' est téléchargeable ici :
http://www.luxobscura.org/damier.fla (Pour Flash Professional CS4)

Le script est visible ici:
http://www.luxobscura.org/script.txt
A voir également:

1 réponse

Bonjour,
j'ai une solution pour ton probléme, mais que j'ai du mal a l'expliquer en texte, enfin je vais essayer.

je considere donc une grille qui fait 2*(3+1) par coter (3:capacité mouvement, 1:distance d'ataque) soit 8*8
j'indice cette grille avec i pour les colonnes, j pour les lignes.

Si je consider a l'interieur de cette grille 4 zones carré :
zone 1 : pour i de 1 à 4; j de 0 à 3
zone 2 : pour i de 5 à 8; j de 1 à 4
zone 3 : pour i de 0 à 3; j de 4 à 7
zone 4 : pour i de 4 à 7; j de 5 à 8

Claire pour le moment ?
bon, alors on continu...

je m'appercoit que pour la zone 1 et la zone 4 tes cases rouges correspondent aux diagonales
et pour les zones 2 et 3 se sont les antediagonales (ou quelque chose comme ca !)

il sufit donc de se rappeler que, dans un carré, la somme des indices est constant dans une diagonale !
Donc, dans la zone 1, les carrés rouge sont dans les cases dont i+j = 4 !
donc, en pseudo code :
pour ( i = 1 à 4 )
pour ( j = 0 à 3 )
si (i+j) = 4 alors case rouge;
sinon si ( i+j ) > 4 alors cases bleu !
fin pour
fin pour

Dans la zone 4, les carrés rouge sont dans les cases dont i+j = 12 !
donc, en pseudo code :
pour ( i = 4 à 7 )
pour ( j = 5 à 8 )
si (i+j) = 12 alors case rouge;
sinon si ( i+j ) < 12 alors cases bleu !
fin pour
fin pour

Toujours ok ?

Pour les antediagonales c'est la difference des indices qui est constant !
Pour la zone 2, les carrés rouge sont dans les cases dont i-j = 4 !
donc, en pseudo code :
pour ( i = 5 à 8 )
pour ( j = 1 à 4 )
si (i-j) = 4 alors case rouge;
sinon si ( i-j ) < 4 alors cases bleu !
fin pour
fin pour

Et pour la zone 3, les carrés rouge sont dans les cases dont j-i = 4 !
donc, en pseudo code :
pour ( i = 0 à 3 )
pour ( j = 4 à 7 )
si ( j-i ) = 4 alors case rouge;
sinon si ( j-i ) < 4 alors cases bleu !
fin pour
fin pour

Voila, il ne reste plus qu'a mettre la case [4;4] en vert et c'est fini !

Je te laisse trouver les astuces pour simplifier le code...

Se serait simpas de m'envoyer ton flash quand il marchera...

Bon courage !
sinon mail moi : jean.luc.andre@free.fr
1