Posté le 20/01/2007 à 12:19 Membre depuis le 12/09/2006, 34 messages
bonjour, voila j'ai créer une sorte de serpent il part en haut a gauche et s'allonge a l'infini chaque pixel parcourut apporte 7pts et il y a un labyrinthe.
Moi j'aimerais faire que arrivé a un endroit donné (par exemple au coin en bas a droite) l'écran séfface le serpetn se remet a sa place d'origine et l'image change ou mememe le serpent reste a sa place, ça c'est pas trop grave je lui donne un déplacement pour éviter k'il se mange le mur voila.
et aussi j'aimerais faire en sorte k'il y est a la fin de chaque partie aprés le score les 3meillieurs score qui s'affiche et que automatiquement le programme les intègre quand le score est suppèrieure a l'un au moin des score enregistré.

voila merci de me répondre smile
Posté le 20/01/2007 à 18:39 Membre depuis le 15/03/2005, 3470 messages
Poste ton code déjà, qu'on voient ce qu'il y a à ajouter/modifier...
Posté le 20/01/2007 à 20:21 Membre depuis le 12/09/2006, 34 messages
[toute les commandes pour effacer ce qu'il y a a l'écrant]
ZInteger
Horizontal -31
Horizontal 31
Vertical -47
Vertical 47
recalpic 4 [mon labyrinthe]
0>B
1>C[vitesse]
1>X
0>Y[position de départ]
0>E[score]
3>F[nombre de vie]

Lbl 0
E+7>E
X+B>X
Y+C>Y
pxl-Test(Y,X)>D
if D=1
goto2
pxl-On(y,X
getKey>a
if A=24
Then
-1>B
0>C
goto 0
[idem pour les 3autre direction]
End
goto 0

lbl 2
F-1>F
if "différent de"0
then
Disp " VIE:",F
pause
clrDraw
[redéfinition des coordonnées de base et du labyrinthe]
else
goto 1
lbl 1
Clrhome
Output(4,4,"perdu"
pause
clrhome
disp " score:",E
[apres tout les comande pour effacer et enlever de la mémoire vive les variable]
Posté le 20/01/2007 à 23:44 Membre depuis le 15/03/2005, 3470 messages
Je le re-écrit avec zTXT, histoire que ce soit plus lisible :
[toute les commandes pour effacer ce qu'il y a a l'écrant]
ZInteger
Horizontal -31
Horizontal 31
Vertical -47
Vertical 47
RecallPic 4 [mon labyrinthe]
0→B
1→C [vitesse]
1→X
0→Y [position de départ]
0→E [score]
3→F [nombre de vie]

Lbl 0
E+7→E
X+B→X
Y+C→Y
Pxl-test(Y,X)→D
If D=1
Goto 2
Pxl-On(Y,X
getKey→a
If A=24
Then
-1→B
0→C
Goto 0
[idem pour les 3 autres directions]
End
Goto 0

Lbl 2
F-1→F
If F≠0
Then
Disp " Vies : ",F
Pause
ClrDraw
[redéfinition des coordonnées de base et du labyrinthe]
Else
Goto 1
Lbl 1
ClrHome
Output(4,4,"Perdu"
Pause
ClrHome
Disp " score:",E [apres tout les comande pour effacer et enlever de la mémoire vive les variable]


Déjà y'a plein de boucle If:Then:End qui n'ont pas de 'End' :
If A=24
Then
-1→B
0→C Goto 0


Il faut rajouter un 'End' à la fin comme ça :
If A=24:Then:-1→B:0→C:Goto 0:End


Il manque un autre 'End' à la ligne :
If F≠0
Then
Disp " Vies : ",F
Pause
ClrDraw
[redéfinition des coordonnées de base et du labyrinthe]
Else Goto 1


Donc ça donne ça :
If F≠0
Then
Disp " Vies : ",F
Pause
ClrDraw
[redéfinition des coordonnées de base et du labyrinthe]
Else
Goto 1 End


Donc le code en 'corriger', ça donne ça :

ZInteger:Horizontal -31:Horizontal 31:Vertical -47:Vertical 47
RecallPic 4
0→B:1→C:1→X:0→Y:0→E:3→F

Lbl 0
E+7→E:X+B→X:Y+C→Y
Pxl-test(Y,X)→D
If D=1:Goto 2
Pxl-On(Y,X
getKey→A
If A=24:Then:-1→B:0→C:Goto 0:End
[idem pour les 3 autres directions]
Goto 0

Lbl 2
F-1→F
If F≠0:Then
Disp " Vies : ",F:Pause :ClrDraw
[redéfinition des coordonnées de base et du labyrinthe]
Else:Goto 1:End
Lbl 1
ClrHome
Output(4,4,"Perdu"
Pause
ClrHome
Disp " score:",E [apres tout les comande pour effacer et enlever de la mémoire vive les variable]


Autre chose, les boucle avec des labels c'est pas terrible, évite les 'Goto' pour gagner de la vitesse et fait des boucle genre 'While 1:End' ou 'Repeat A:getKey→A:End'...
Posté le 21/01/2007 à 10:37 Membre depuis le 12/09/2006, 34 messages
Merc beaucoup! smile, mais ça ne réponds pas a ma question tongue
Coment faire pour que ariver a un point donner on peut maitre des conditions?(la comande pour dir : si il arrive là alors)
et comment enregistrer et afficher les 3 meillieurs scores?
Posté le 21/01/2007 à 10:42 Membre depuis le 01/12/2005, 413 messages
Pour enregistrer les 3 meilleurs scores, mets les dans une liste.
Pour les conditions, mets:
If [variable placement x]=X and [varaible placement y]=Y
Then
bababababa
End

ou X et Y sont les coordonnees ou il se passe qqch, et [variable placement x] et [variable placement y] sont les coordonnees du serpent
Posté le 21/01/2007 à 10:56 Membre depuis le 12/09/2006, 34 messages
dsl, mais j'ai rien compris...
Posté le 21/01/2007 à 10:58 Membre depuis le 12/09/2006, 34 messages
fin j'ai pas compris comment faire pour la liste et l'enregistrer
Posté le 21/01/2007 à 11:06 Membre depuis le 15/03/2005, 3470 messages
mais ça ne réponds pas a ma question tongue


Oui mais faut déjà corriger ce qui va pas cheeky.
dsl, mais j'ai rien compris...


Pourtant c'est simple, il faut mettre des condition avec des boucles If:Then:End, du genre :
If [variable de la coordonnée X]=94 and [variable de la coordonnée Y]=62:Then:1→X:1→Y:End


Dans cet éxemple, on vérifie que les coordonnées valent 94 pour X et 62 pour Y, et si c'est bon, on les remplacent par 1.

Pour les scores, comme dit Syfo-Dias, il vaut mieu utiliser une liste, donc tu peut faire un truc comme ça :
3→dim(L1
[ton jeu]
[là c'est la fin, lorsque tu veux choisir si c'est un bon score]
ClrHome
If [variable du score]>L1(1):Then:[variable du score]→L1(1): Disp "Bravo, premier.":Pause :CrlHome: Stop:End
If [variable du score]>L1(2):Then:[variable du score]→L1(2): Disp "Bravo, deuxième.":Pause :CrlHome: Stop:End
If [variable du score]>L1(3):Then:[variable du score]→L1(3): Disp "Bravo, troisième.":Pause :CrlHome: Stop:End Output(1,1,"Trop nul pour être dans les High Scores !":Pause :ClrHome: Stop


Voilà, j'éspère que tu as compris un peu le principe.
Posté le 21/01/2007 à 11:29 Membre depuis le 12/09/2006, 34 messages
et quel est le uméro correspondant a la touche seconde?
Posté le 21/01/2007 à 11:35 Membre depuis le 15/03/2005, 3470 messages
C'est 21, pour savoir ça soit tu fait un programme du genre :
ClrHome
Repeat K=45
Repeat K
getKey→K
End
Disp K End


Ou soit tu te dit que la touche 2nd est dans la deuxième ligne (2) et la première colonne (1) et sa te donne : 21.
Posté le 21/01/2007 à 11:42 Membre depuis le 12/09/2006, 34 messages
3→dim(L1 il est où le l1?(L1)??
Posté le 21/01/2007 à 11:43 Membre depuis le 12/09/2006, 34 messages
merci (pour les touche)
Posté le 21/01/2007 à 11:57 Membre depuis le 12/09/2006, 34 messages
non c'est bon je l'ai trouver tongue
Posté le 21/01/2007 à 12:11 Membre depuis le 15/03/2005, 3470 messages
Ok, mais de toutes façons toutes les commandes et signe (sauf ceux des STATS), ce trouvent dans le CATALOG (2nd,0).
Posté le 21/01/2007 à 12:39 Membre depuis le 09/02/2005, 13736 messages
Sinon pour les high scores, il faut aussi penser a decaler les autres quand le premier est remplacé :
3→dim(L1
[ton jeu]
[là c'est la fin, lorsque tu veux choisir si c'est un bon score]
ClrHome
If [variable du score]>L1(1):Then:L1(2)→L1(3):L1(1)→L1(2):[variable du score]→L1(1): Disp "Bravo, premier.":Pause :CrlHome: Stop:End
If [variable du score]>L1(2):Then:L1(2)→L1(3):[variable du score]→L1(2): Disp "Bravo, deuxième.":Pause :CrlHome: Stop:End
If [variable du score]>L1(3):Then:[variable du score]→L1(3): Disp "Bravo, troisième.":Pause :CrlHome: Stop:End
Output(1,1,"Trop nul pour être dans les High Scores !":Pause :ClrHome: Stop
Posté le 21/01/2007 à 13:30 Membre depuis le 12/09/2006, 34 messages
comment fait-on pourinsérer un éspace entre deux caractere déjà marqué?(pas aller a la ligne?)
Posté le 21/01/2007 à 13:46 Membre depuis le 12/09/2006, 34 messages
je vous remerci pour les scores ça marche impec!!
par contre en ce qui concerne le changement de niveau je n'y arrive pas,je met:

...]
X>L
Y>H
...]
if L=-46 and H= -30:then:clrhome:1>X:1>Y:recallpic 2:goto 0:end
(sachant qu'il y a un bord j'ai décaller les coordonnée de 1 pour X et Y) mais quand j'arrive au coin en bas a droite il edie perdu car évidement juste apres c'est le mur!! je comprends pas...
Posté le 21/01/2007 à 14:28 Membre depuis le 15/03/2005, 3470 messages
Sinon pour les high scores, il faut aussi penser a decaler les autres quand le premier est remplacé


Ah oui, j'y avais pas pensé cheeky.
comment fait-on pourinsérer un éspace entre deux caractere déjà marqué?(pas aller a la ligne?)


Hein ? Je comprend pas, si c'est juste que tu veux passer en mode 'insert' comme sur PC, il faut faire la combinaison de touche 2nd, DEL.
...]
X>L
Y>H
...]
if L=-46 and H= -30:then:clrhome:1>X:1>Y:recallpic 2:goto 0:end (sachant qu'il y a un bord j'ai décaller les coordonnée de 1 pour X et Y) mais quand j'arrive au coin en bas a droite il edie perdu car évidement juste apres c'est le mur!! je comprends pas...


J'ai pas compris ton truc, déjà, pourquoi tu stocke les variables qui contienent les coordonnées dans des autre, alors que tu peut tout simplement faire tes tests de valeur avec directement les variables de coordonnées ?

Si c'est pour tester une colision avec un mur, tu peut faire un truc comme ça :
While 1
getKey→K
If K=24:Then:If Pxl-Test(X-1,Y)=1:Then:Goto 1:Else:Pxl-Off(X,Y:X-1→X:End
If K=26:Then:If Pxl-Test(X+1,Y)=1:Then:Goto 1:Else:Pxl-Off(X,Y:X+1→X:End
If K=34:Then:If Pxl-Test(X,Y+1)=1:Then:Goto 1:Else:Pxl-Off(X,Y:Y+1→Y:End
If K=25:Then:If Pxl-Test(X,Y-1)=1:Then:Goto 1:Else:Pxl-Off(X,Y:Y-1→Y:End
Pxl-On(X,Y End


Et 'ClrHome' efface l'écran principal, celui où l'on fait des calculs, donc normalement, tu doit utiliser 'ClrDraw' pour effacer l'écran graphique.

J'ai pas tester mon code, mais normalement ça marche, la seule chose dont je ne suis plus sur, c'est si on met 'Pxl-test(X,Y' ou 'Pxl-test(Y,X' (idem pour Pxl-On), mais bon, c'est l'un ou l'autre.
Posté le 21/01/2007 à 14:49 Membre depuis le 12/09/2006, 34 messages
je veux juste que kan il arrie en bas a droite de l'écran coordonée (46;-30) je charge un nouveau labyrinthe c'est tout. mais j'ai pas réussi avec votre code...(If [variable de la coordonnée X]=94 and [variable de la coordonnée Y]=62:Then:1→X:1→Y:End )
Posté le 21/01/2007 à 15:44 Membre depuis le 15/03/2005, 3470 messages
C'est normale, tu as surement mal régler l'écran, pour bien le faire il faut que tu rajoute :
CoordOff:AxesOff:GridOff
64→Ymax
92→Xmax
0→Ymin 0→Xmin


au début de ton programme.

Après, pour faire ce que tu veux, tu fait :
If [coordonnée X]=94 and [Coordonnée Y]=62:Then:ClrDraw:RecallPic [l'image de ton labyrinth]:1→X:1→Y:End


Voilà smile.
Posté le 21/01/2007 à 16:29 Membre depuis le 12/09/2006, 34 messages
merci meric beaucoup!! smile
Posté le 21/01/2007 à 17:02 Membre depuis le 01/12/2005, 413 messages
pour decaler la liste quand un meilleur score est fait, fais ceci:
1) teste si le score est plus grand que le moins bon score enregistre dans la liste
2) si oui, mets le nouveau score a la place du derier de la liste
3) Fais SortA( [liste scores], ce qui range les scores dans l'ordre croissant
Posté le 21/01/2007 à 19:03 Membre depuis le 09/07/2003, 21783 messages
Sinon, y'a aussi une grosse solution de fainéant:
-tu rajoute le score en position 4 dans la liste.
-tu trie la liste automatiquement ( A<-sortA(L1) )
-tu efface le dernier. (tu met un 0 / tu force la dimension de la liste; 3->dim(L1)

ça économise un peu de place (un if..) et ça ne doit pas significativement perdre du temps. (pour une liste de 3 éléments, et à chaque fin de jeu. évidemment ce serait différent avec 98 éléments et/ou un test à chaque boucle de jeu ! )
Posté le 21/01/2007 à 20:08 Membre depuis le 15/03/2005, 3470 messages
Y'a même pas besoin de changer la dimension de la liste, il suffit de ne pas s'en occuper (ça t'économise un "3→dim(L1 cheeky).
Posté le 21/01/2007 à 20:50 Membre depuis le 09/07/2003, 21783 messages
Ben ça dépend: souvent, avec certaines utilisations, on veut une taille de la liste fixé (mais éventuellement variable) et significative: par exemple pour se servir de dim(L1), genre comme indice de fin de boucle, et peut avoir un grand intérêt dans certains cas.
C'est pour cette raison que j'ai rajouté la redimensionement: pour que 'l'algorithme' soit formellement équivalent.

évidemment, dans son cas, s'il veut absolument et tout le temps que les 3 premiers, que ce n'est pas susceptible de modifications, qu'il n'utilise donc a priori pas la dimension activement, c'est tout à son avantage.
Posté le 23/01/2007 à 14:46 Membre depuis le 12/09/2006, 34 messages
bon j'ai fait 2 niveau (on passe de l'un a l'autre indéfiniment), un nombre de vie, un touche pause, la touche du tricheure (+1 viesmile) etc... par contre un pote a était confraonté a u probleme, il a était obliger de quitter pour aps ce faire capter...
yorait-il un moyen de jesais, étaindre l''écran et le rallumer en appuyant sur des touche?ou autre chose pourpouvoir faire style de rien sans devoir recommancer?, ou aussi-non et ce serais mieu, pouvoir faire come une pause appuyer sur un bouton et faire e sorte que l'on quitte le jeu on accede a la calculatrice normalement et lorseque l'on retourne dans programme si on fait éxécuter les serpent, que la calculatrice nous propose de recommancer ou continuer pour faire une nouvelle partie ou continuer celle qui était en cour. merc de me répodre XD
Posté le 23/01/2007 à 15:06Edité par very le 23/01/2007 à 15:17 Membre depuis le 09/07/2003, 21783 messages
(je n'ai pas du tout lu ton code)

-pour la seconde proposition (mieux et seule faisable en basic pur):
Il te suffit de coder une touche qui (par un if+then ou un if+goto..) 'sauvegarde' les données du jeu, puis quitte. (comme tu quite à la fin, j'imagine). Pour ne pas avoir 'prgm TRUC" sur l'écran de calcul un fois le programme quitté, il suffit de mettre un :
Output(1,1,"

en dernière instruction.

Il faut que tu réfléchisse donc sur deux choses:
-quels données a-tu besoin de sauvegarder pour décrire entièrement le jeu ? (toutes les positions du serpent, seulement le début + la fin + les positions virages, le score aussi, le niveau ?). Par commodité, tu peux en sauvegarder plus que nécessaires si c'est pas trop génant (genre tu peux te permettre t'enregistrer toutes les positions au lieu du début+virages+fin, si t'a relativement peux de cases, t'a tout à y gagner)
-comment les sauvegarder (deux listes une pour les X et l'autre pour les Y ? )
-comment les restaurer (partir de la sauvegarde pour relancer le jeu en état )

Je n'ai pas du tout lu ton code, dans certaines occasions il te suffit d'enregistrer 'directement' certaines variables actuelles qui décrivent ton jeu, dans d'autres (notamment quand tu trvail graphiquement ) c'est moins immédiat.

---------

EDIT: je viens de jeter un très rapide coup d'oeil..apparemment c'est un allongement à l'infini( un worm), et tu travail graphiquement. Dans ce cas une bonne solution peut être:
-sauvegarder le position de la tête
-sauvegarder l'image ( cf StoPic et RecallPic )
-les autres trucs isolés comme le score, etc..

Pour restaurer le jeu:
-tu rappelle l'image
-tu lance la boucle de jeu avec les bonnes conditions initiales sur la tête du serpent
-tu restaure les autres trucs comme le score, etc..
remarque: si tu ne tiens pas à enregistrer dans des variables exotiques pour éviter une interférence avec l'utilisateur/autre programme, tu peut simplement...ne pas t'en occuper, il suffit de ne pas réinitialiser ces variables.

Dans le même genre, si c'est vraiment que pour le prof et que tu travail en mode graphique, si tu t'en fout de pouvoir utiliser la calto 'normalement' entre la moment ou tu quitte et celui ou tu reprends, tu peux ne pas enregistrer l'image...elle rrestera toute seule. Il te suffira de ne pas l'effacer à la reprise.
(bref, dans ce cas, tu quitte simplement, et lors du retour, il te suffit de relancer la boucle de jeu sans initialisation des variables/graphiques. Au pire, si tu te sers d'un indice de boucle (pour le score..), il n'y a guère que ça à t'occuper. )

Posté le 23/01/2007 à 15:12 Membre depuis le 12/09/2006, 34 messages
mais quelle fonction me permétterait de sauvegarder les coordonnées?,et de plus e les ai pas les coordonnée a par l'origine et l'actuelle mon programme ne prends pas en mémoire les déplacemetn intermédiaire...
Posté le 23/01/2007 à 15:19 Membre depuis le 09/07/2003, 21783 messages
-j'ai édité mon post.

question: tu a déjà codé dans d'autres languages ? En Ti-basic, il n'y a pas de fonction-magiques qui font tout toutes seules, faut pas réfléchir comme ça (c'est pas un langage d'assisté comme le php..): en l'occurrence, ici, sauvegarder= enregistrer dans certaines variables.