Poster un nouveau sujet Poster une réponse Page: 1, , ,      >>
Snake, by Polymorph
Auteur Message
Polymorph



Autorisation : Membre
Nb de messages : 121
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Dim 13 Nov 2011, 14:37   Citer 

J'ai pas vraiment trouvé de règlement sur ce forum, mais s'il est comme la plupart, il semblerait que mon code étant incomplet, je doive ouvrir un nouveau post pour les diverses questions... crazy.gif

Bonjour bonjour!

J'ai récemment commencé à coder mon propre snake, et je retrouve une erreur dans mon Pixel-test, me permettant de savoir si notre ami le serpent percute un obstacle. Donc, je viens vous montrer mon code, en espérant que quelqu'un sache d'ou ça vient, merci !

Pour le moment, j'ai un snake qui ne s'efface pas (je ferais ça avec les listes, dès que mes problèmes de collision seront réglé, n'ajoutons pas des emmerdes aux emmerdes!)


Code

Fonctoff
Effdessin
AxesNAFF //on enlève toutes les fioritures qui pourraient nous embêter sur l'écran
-47=>Xmin:47=>Xmax //j'ai du mal avec 0,94, et quand j'ai commencé le code, j'ignorais que Pxl-test prenait en compte les coordonées texte
-31=>Ymin:31=>Ymax //pareil
2=>L //L=lives, soit le nombre de vie
Lbl A //L'emplacement où on revient lorsqu'on perd
0=>A:0=>D //A le getkey, D la direction
0=>X:0=>Y //les coordonnés du Snake
3entAléat(-15,15)=>U
3entAléat(-10,10)=>V //Les coordonnées du point à manger. Ils sont de la forme 3q parce que mon snake avance de trois case, donc je veux qu'ils restent mangeables
RappelImage 1 //Flemme de faire le premier niveau à la main (y'a qu'un niveau pour le moment)

While A =/= 105
codeTouche => A //105 pour pouvoir l'arrêter facilement pendant les test, je le remplacerait par while 1 après
If A=24:1=>D
If A=25:2=>D
If A=26:3=>D
If A=34:4=>D //je donne juste un numéro à la direction

If D=1:X-3=>X
If D=2:Y+3=>Y
If D=3:X+3=>X
If D=4:Y-3=>Y //Je déplace le snake, je ferais probablement ça avec des boléens plus tard, mais c'est plus clair comme ça

If X=U et Y=V //Si je mange le point
Then
Pt-off(U,V
3entAléat(-15,15)=>U
3entAléat(-10,10)=>V //C'est reparti pour un point
End

*/Attention, ici ça bloque /*
-Y+31=>S
X+47=>T //Je transforme les coordonnées de X et de Y en coordonnées Texte
S -(D=1)+ 2(D=2)+(D=3)- 2(D=4)=>S
T - 2(D=1)-(D=2)+ 2(D=3)+(D=4)=>T //Le principe est de Tester le coin du carré pour qu'il soit négatif sur la croix à manger, mais positif sur toute autre surface (voir image après le code)

If Pxl-test(S,T //Si y'a quelque chose devant Snaky
Then
Ombre (-31,31) //Fais un semblant de Game over
EffDessin
If L=0 // Si tu n'as plus de vies
Then:Stop //Je mets le Then pour avoir le Else
Else
L-1=>L
Goto A //C'est reparti pour un tour
End
End

Pt-on(X,Y,2
Pt-on(U,V,3 //J'ai mis les points On à la fin pour qu'ils soient après le test.
End



Chaque case de mon snake ressemble à ça et je teste la case rouge en fonction de la direction


Et le point à manger ressemble à ça


Le résultat est qu'en horizontal ça marche très bien, mais dès que je me déplace en vertical, Badaboum, Game Over.

Si vous pouvez m'aider, vous rendrez un grand service à la nation! minied.gif

----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
Snake!
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 13 Nov 2011, 14:51   Citer 

J'ai encore du mal à trouver l'erreur.
Mais je te propose une méthode à employer à l'avenir. C'est ma préférée mais choisit la tienne (de préférée).


Code
0->Xmin
94->Xmax
0->Ymax
-62->Ymin
30->Y
50->X
40->A
40->B
pxl-Test(Y,X
pxl-On(Y,X
Texte(Y,X,"SCORE"
pt-On(X,-Y,2
Ligne(X,-Y,A,-B
  // Ces fonctions sont plutôt bien compatibles ainsi
  // Il s'agit seulement d'un exemple pour les coordonnées



----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Polymorph



Autorisation : Membre
Nb de messages : 121
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Dim 13 Nov 2011, 14:59   Citer 

J'y avais réfléchis, et ça demandais pas mal de changements, et j'avais des bugs.
Je vais réessayer, ce sera déja plus lisible ^^
J'édite mon post, dès que j'ai fini.

Par contre, j'ai pas compris le principe du Pxl-on + Pt-on...

EDIT : ça m'envoie un game over dès le début, à la deuxième vie, snake bouge horizontalement, mais toujours game over quand je bouge verticalement.

----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
Snake!
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 13 Nov 2011, 15:03   Citer 

pxl-on utilise les coordonnées des pixels (comme les textes).
pt-on utilise les coordonnées du graphique.

Mon post met en valeur les conversions qui permettent d'utiliser ces fonctions dans un même programme et avec le moins de tracas possibles.

Je soupçonne les coordonnées du graphique pour ton problème. Je cherche encore...

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Polymorph



Autorisation : Membre
Nb de messages : 121
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Dim 13 Nov 2011, 15:08   Citer 

Okay, pas de soucis, mais dans le cas présent, je comprends pas l'utilité du texte et de la ligne... qui ne forme qu'un seul point o.o

----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
Snake!
 Adresse email Haut de page Bas de page 
 
The K



Autorisation : Membre
Nb de messages : 878
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Dim 13 Nov 2011, 15:26   Citer 

C'est juste un petite conseil pour le programme : avant de commencer, glisse un SauveBDG 0 et a la fin un RappelBDG 0, c'est plus pratique.
Après, quand t'as besoin de ton grpah t'es pas obligé de refaire FonctOn AxesAff Zoom6 et autres bref crazy.gif

----------------------
La la la ...

Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL
Un problème de programmation ? Allez consulter ce tutoriel crée pour cela : TUTORIEL PROGRAMMATION
Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO

Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind

Mes nouveaux programmes de calcul formel : FCarré FPrime

Projet base de données : ici mais abandonné. Trop de travail ...
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 13 Nov 2011, 15:29   Citer 

Place Pt-Off(0,0) juste après EffDessin pour voir...
Il y a peut-être un rapport avec CECI.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Polymorph



Autorisation : Membre
Nb de messages : 121
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Dim 13 Nov 2011, 15:29   Citer 

Okay, merci, mais je pense fignoler les détails plus tard ^^

Apparamment après test, le jeu reconnais les coordonnées de Snaky comme étant tout en haut de l'écran, soit Y=0...

Quelqu'un a une idée de... pourquoi? >.<

EDIT : Trop lent. Apparemment c'est ça. Je vais essayer d'initialiser X et Y après avoir effacé l'écran.

EDIT 2 : J'initialise déja après avoir effacé l'écran. RappelImage peut-être? Je vais l'enlever pour tester...

EDIT 3 : Nan, ça marche toujours pas, et en enlevant la collision, il veut même plus manger le point.

EDIT 4 : D'après ce que j'ai lu, je vais remplacer X et Y par W et Z, on va voir si ça marche °°.

EDIT 5 : Rien de nouveau à signaler, c'est toujours aussi bloqué °°.

----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
Snake!
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 13 Nov 2011, 15:46   Citer 

Puisque le problème semble cerné, il suffit d'ajoûter Pt-Off(0,0) juste après EffDessin.
La seconde étape peut alors être une amélioration des coordonnées.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
Polymorph



Autorisation : Membre
Nb de messages : 121
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Dim 13 Nov 2011, 15:50   Citer 

Ben, non justement le problème n'est pas réglé

Comment tu peux améliorer les coordonnées après? (sachant que j'ai fait le change pour 0,94/-62,0)

EDIT : apparemment c'est mon boléen qui fait tout foirer, je vais le remplacer par des conditions.

EDIT 2 : Rien de nouveau, ça ne marche toujours pas. Snaky se déplace HORIZONTALEMENT, mais pas VERTICALEMENT. C'est complètement incompréhensible.

----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
Snake!
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 13 Nov 2011, 16:18   Citer 

Donc reprendre ton ancien code et ajoûter Pt-Off(0,0) ne marche pas.
Je vais chercher ce qui cloche dans le code déjà posté.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Polymorph



Autorisation : Membre
Nb de messages : 121
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Dim 13 Nov 2011, 16:28   Citer 

nop'

De même, après test, il semblerait que le pixel testé lorsque je vais à gauche ait une ordonnée de 90...

Etrange oô

EDIT : fausse manip, l'ordonnée à 90 est fixée, mais on est pas avancé...

----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
Snake!
 Adresse email Haut de page Bas de page 
 
Polymorph



Autorisation : Membre
Nb de messages : 121
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Dim 20 Nov 2011, 13:47   Citer 

Pwêt.
Ma version actuelle. Plutôt rapide et fluide, malheureusement, je n'ai pas réussi à fixer le problème du Pxl-Test.

Pour le moment c'est expérimental, y'a qu'un seul niveau, mais j'aimerai votre avis pour l'optimiser ^^


Code
//Snake
0=>Xmin:94=>Xmax
-62=>Ymin:0=>Ymax
FonctOff
AxeNAFF
PrgmSELECTOR
EffDessin
RappelImage 1 //Flemme de faire le premier niveau à la main (y'a qu'un niveau pour le moment)
Lbl A
0=>A:0=>D:1=>B:5=>N //A le getkey, D la direction, B l'avant du snake, N l'écart entre l'avant et l'arrière
48=>W:-30=>Z //les coordonnés de début du Snake, J'ai utilisé W et Z, puisqu'apparemment, X et Y risquent de bugger...
EffaceListe L1, L2
3entAléat(1,29=>U
3entAléat(-18,-1=>V //Les coordonnées du point à manger. Ils sont de la forme 3q parce que mon snake avance de trois case, donc je veux qu'ils restent mangeables
Pt-on(U,V,3
While 1
codeTouche => A //105 pour pouvoir l'arrêter facilement pendant les test, je le remplacerait par while 1 après
W=>L1(B
Z=>L2(B
Pt-on(L1(B), L2(B), 2
B+1=>B
If B>5
Pt-off(L1(B-N), L2(B-N), 2
If A>=24 et A=<26
A-23=>D          //je donne juste un numéro à la direction
If A=34:4=>D
W-3(D=1)+3(D=3=>W
Z-3(D=4)+3(D=2=>Z
If W=U et Z=V //Si je mange le point
Then
Pt-off(U,V
3entAléat(1,18=>U
3entAléat(-17,-1)=>V //C'est reparti pour un point
N+1=>N //On agrandit le Snake
Pt-on(U,V,3
End
If Pxl-Test(-Z,W
Goto 0
End

Lbl 0
Ombre(-62,0
EffDessin:EffEcran
Output(3,4,"GAME  OVER
Output(6,5,"SCORE
Output(6,12,N-5




Code
//SELECTOR
EffDessin
Texte(30,17,"JOUER
Texte(30,46,"QUITTER
Texte(40,35,"V 1.1
Texte(50,22,"BY POLYMORPH
12=>C
Repeat K=105
Ligne(C,-28,C+30,-28
Ligne(C+30,-28,C+30,-37
Ligne(C+30,-37,C,-37
Ligne(C,-37,C+30,-28
Codetouche=>K
If (C<32 et K=26) ou (C>12 et K=24)
Then
Ligne(C,-28,C+30,-28,0
Ligne(C+30,-28,C+30,-37,0
Ligne(C+30,-37,C,-37,0
Ligne(C,-37,C+30,-28,0
C+32(K=26)-32(K=24)=>C
End
End
If C=12:Return
If C=44
Then
EffDessin
EffEcran
Output(1,1,"
Stop:End



Qu'on soit clair, Je ne CHERCHE PAS à optimiser le Selecteur, je ferais ça plus tard, quand j'en aurai la foi, pour le moment, il marche comme il est et ça suffit.

----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
Snake!
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 20 Nov 2011, 17:14   Citer 

La direction vers le bas (touche 34) n'est pas prise en compte par :
Code
If A>=24 et A=<26
A-23=>D

Essaie un de ces codes
Code
A-23-5(A=34=>E
If max(E={1,2,3,4
E->D


Code
max({1,2,3,4}(A={24,25,26,34->E
If E
E->D



----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Polymorph



Autorisation : Membre
Nb de messages : 121
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Dim 20 Nov 2011, 17:55   Citer 

J'avais loupé une ligne dans le recopiage de mon code, sorry, c'est édité.

Je comprends pas bien comment marche le max dans ce code ...

Code
max({1,2,3,4}(A={24,25,26,34->D


tu peux m'éxpliquer?

----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
Snake!
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 20 Nov 2011, 19:37   Citer 

Je peux t'envoyer dans mon article sur les tests mais une explication directe demeure plus claire.

J'effectue un produit de listes. En détails :

A={24,25,26,34
donne {0,1,0,0} si A=25
donne {0,0,1,0} si A=26
donne {0,0,0,0} si A ne vaut aucune des valeurs indiquées.

{1,2,3,4}(A={24,25,26,34
donne {0,2,0,0} si A=25
donne {0,0,3,0} si A=26
donne {0,0,0,0} si A ne vaut aucune des valeurs indiquées.

max({1,2,3,4}(A={24,25,26,34
donne 2 si A=25
donne 3 si A=26
donne 0 si A ne vaut aucune des valeurs indiquées.

max revient ici à effectuer une somme
D'ailleurs je viens de me rendre compte qu'il faudrait un test pour ne pas annuler D.
J'édite mon code pour ce détail.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Dim 20 Nov 2011, 19:38   Citer 

{1,2,3,4}(A={24,25,26,34 est le prouit de 2 listes (on pourrait aussi écrire : {1(A=24),2(A=25),3(A=26),4(A=36} en sachant que (A=X) revoie 1 si vrai et 0 si faux
Comme A ne peut prendre qu'une seule valeur, il y aura soit que des 0 (si A prend aucune des 4 valeurs) ou un chiffre de 1 à 4 et le reste des 0.

Le max permet donc de récupérer 0 si A ne vaut aucune des 4 valeurs, et sinon de récupérer 1 ou 2 ou 3 ou 4.

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Polymorph



Autorisation : Membre
Nb de messages : 121
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Lun 21 Nov 2011, 18:52   Citer 

Away d'ac, tu multiplie une liste, par une liste de boléen, d'après ce que j'ai compris, mais par contre, faudrait annuler pour 0.
ça marche ça?


Code
If max ({1,2,3,4}(A={24,25,26,34
Rep->D



----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
Snake!
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
sandro



Autorisation : Membre
Nb de messages : 1387
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Lun 21 Nov 2011, 19:06   Citer 

oui, je crois que tu as raison, sinon quand on apuye sur une touche non fléchée, ça risque de buguer (enfin sauf si on inclue une commande quand ça vaud 0 ou alors que ça n'execute plus rien (donc équivalent de pause))

Sandro

----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Polymorph



Autorisation : Membre
Nb de messages : 121
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Lun 21 Nov 2011, 19:10   Citer 

Bon, ce que j'ai écris au-dessus ne marche pas, mais j'ai trouvé autre chose, sauf que ça ralenti le code ! Pourtant je zappe l'utilisation de 2 conditions, savez vous pourquoi?


Code
max ({1,2,3,4}(A={24,25,26,34
D-(Rep!=0)D+Rep=>D



----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
Snake!
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse Page: 1, , ,      >>





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2024 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink