Page 1 of 3

Code snake

Unread postPosted: 17 Sep 2009, 12:17
by mp35
Bonjour a tous,

Jvais vous parler de mon problème: le Snake (et oui encore) :D:
Enfaite voila je vous monte la parti du code qui va vous servir:

Code: Select all
:repeat K=105
:Pxl-on(Y,X
:X-(K=24)+(K=26)-X
:Y-(K=25)+(K=34)-Y
:end


Donc voila mon snake bouge bien mais le seul problème c'est que je n'ai strictement aucune idée de comment le faire avancé tout seul.
J'ai pas mal cherché , j'ai pas trouvé.
J'ai aussi analiser le code d'autre snake or il utilise des matrice et malheuresement je ne comprend pas leur fonctionement ni comment s'en servir pour un snake.

Donc je voudrais savoir si il a moyen de le faire avancé tout seul sans matrice.

Re: Code snake

Unread postPosted: 17 Sep 2009, 12:31
by tama
le faire avancer tout seul dans la même direction ?
en fait il faut pas faire comme ça, le mieux c'est de faire 2 variables, E et F par exemple (ou U et V ou ce que tu veux, mais évite X et Y parce qu'elle sont souvent utilisées pour autre chose et donc ça va tout mettre en l'air)
enfin bref, voici le bout de code qui pourrait aider, après les "//" c'est les commentaires :


//E = déplacement horizontal à chaque itération
//F = déplacement vertical à chaque itération
//K = dernière touche appuyée
//A = position X de la tête du serpent
//B = position Y de la tête du serpent

0-E
0-F //serpent immobile au départ
0-K //aucune touche pressée
1-A
1-B //ou ce que tu veux, c'est la position initiale du serpent

Repeat K=105
A+E-A
B+F-B //déplacement du serpent
Pxl-On A,B
getKey-K //raaaah c'est cette ligne que j'ai oublié

If K=24
Then
//déplacement à gauche
-1-E
0-F
End

If K=25
Then
//déplacement en haut
0-E
-1-F
End

If K=26
Then
//déplacement à droite
1-E
0-F
End

If K=34
Then
//déplacement en bas
0-E
1-F
End

//c'est sûrement possible d'optimiser ça, à toi de voir, je le donne en clair pour que tu comprennes le principe

//gestion des collisions (obstacles, bords ...)
End //fin de la boucle


Et voilà, à toi de faire ce que tu veux avec ensuite
Si y a quelque chose que tu comprends pas = post :)

Re: Code snake

Unread postPosted: 17 Sep 2009, 12:47
by mp35
J'ai compris ton code.
Je l'ai mis sur la TI mais mon point ne bouge pas quand j'appuie sur les touches.
(la calculette ne me signale pas non plus d'erreur).

Et merci d'avoir repondu rapidement, je reviens vers 17h10.

Re: Code snake

Unread postPosted: 17 Sep 2009, 12:59
by tama
hum... c'est normal, j'ai oublié une ligne --"
code corrigé.

Re: Code snake

Unread postPosted: 17 Sep 2009, 15:58
by mp35
Ok nikel sa marche !! Mci :D:
Mnt mon problème c'est que j'ai essayer d'optimiser en gardant l'idée des deux variables comme cela
Code: Select all
:effdessin
:0-E
:0-F
:0-K
:40-A
:30-B
:repeat K=105
:A+E-A
:B+F-B
:Pxl-on(B,A                // J'ai inverser A et B il y avait un problème de direction
:codetouche-K         //J'ai la stats.fr
:E-(K=24)+(K=26)-E
:F-(K=25)+(K=34)-F
:end


Les direction sont bonnes mais le problème c'est que:
-si je fais gauche sa va allais a gauche (normale) et si après j'appuie sur haut sa avance en biais vers le haut(en diagonale quoi).
C'est comme si les direction s'ajoutait.

J'ai trouver cmt dire, sa fais exactement comme des vecteurs.

Autre exemple:
J'appuis haut (la tout va bien) puis j'appuie bas et le pixel au lieu de partir vers le bas il s'arète.


Donc je sais pas si mon optimisation est possible, peut-etre mis suis-je mal prix.
Merci :):

Re: Code snake

Unread postPosted: 17 Sep 2009, 16:43
by Marco
Salut, tu peux garder le code de Tama avec EDIT pour le -
Code: Select all
:If K différent de 0
:Then
:-(K=24)+(K=26)-E
:-(K=25)+(K=34)-F
:End

à la place de la série de condition.
Car si K=0, on n'a appuyé sur aucune touche, donc le serpent continue dans la même direction.

Re: Code snake

Unread postPosted: 17 Sep 2009, 19:30
by mp35
Je comprend pas trop :S.
Si je garde le code de tama pourquoi faut-il rajouter cela
Code: Select all
:If K différent de 0
:Then
:(K=24)+(K=26)-E
:(K=25)+(K=34)-F
:End

Ou bien alors doit-il remplacer d'autre ligne de code si oui lequels ?

Re: Code snake

Unread postPosted: 17 Sep 2009, 19:44
by Marco
mp35 wrote:Je comprend pas trop :S.
Si je garde le code de tama pourquoi faut-il rajouter cela EDIT pour le -
Code: Select all
:If K différent de 0
:Then
:-(K=24)+(K=26)-E
:-(K=25)+(K=34)-F
:End


Les valeurs dans E et F indiquent le déplacement horizontal et vertical. Si E vaut 1 ou -1, F vaut 0 car on ne se déplace qu'horizontalement ou verticalement, pas les deux en même temps. De même si F vaut 1 ou -1.
Si on appuie sur aucune touche, K=0, et le serpent doit continuer dans la direction précédente, d'où le If.
Le code remplace les If de Tama :
Code: Select all
If K=24
Then
//déplacement à gauche
-1-E
0-F
End

If K=25
Then
//déplacement en haut
0-E
-1-F
End

If K=26
Then
//déplacement à droite
1-E
0-F
End

If K=34
Then
//déplacement en bas
0-E
1-F
End

Re: Code snake

Unread postPosted: 17 Sep 2009, 19:49
by Bisam
Euh, le code qui marche c'est plutôt :
Code: Select all
:If K différent de 0
:Then
:(K=26)-(K=24)-E
:(K=34)-(K=25)-F
:End

Re: Code snake

Unread postPosted: 17 Sep 2009, 19:58
by Marco
Ah oui, pardon ^^