Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 1968
Réponses : 9
Type : discussion
Etat : réponses autorisées

JEU DEUX JOUEURS

Mr.Jak le 09/12/2016 à 18:37
Salut à tous,
ce post sera l'occasion de me présenter un peu, c'est le premier post que je fais sur ce forum même si j'y traîne depuis quelques années déjà. Je suis actuellement en Terminale S et voilà déjà un moment que je trifouille un peu dans ma calculatrice et j'ai fait un jeu deux joueurs que je voulait partager avec vous. glasses.gif

INFO :
-Programmé sous TI-82+ en langue anglaise
-Le jeu prend 373 octets mais n'est pas optimisé.

POUR LES DEBUTANTS :
-Les symboles tels que inférieur ou égal etc.. se trouvent dans test (2nde+math)
-La fonction int(, le point d'exclamation etc.. se trouvent dans math

DESCRIPTION :
Alors le principe est simple, vous gérez un personnage et devez tirer sur votre adversaire avec la touche "In" ou "-" en fonction de quel côté vous êtes par rapport à la calculatrice. J'ai mis une limite de temps que vous pouvez modifier dans le programme, personnellement j'ai mis 15 secondes.

J'ai maintenant terminé le jeu grâce à vos conseils, merci à tous ! Je suis content du résultat !

PROBLEMES RENCONTRES LORS DU DEVELOPPEMENT :
-Je n'ai pas réussi à trouver comment mettre un délai entre chaque tir, donc si vous avez des propositions, ça sera avec plaisir que je les accueillerai.
-Je voulais aussi "reset" les positions une fois qu'un point était marqué mais je n'y suis pas arrivé, si vous avez des idées rendez vous dans les commentaires loupe.gif


Code

ClrHome
2->A:6->B:1->C:1->D:20->F:0->Z:0->Y:3->T:3->U      //20->F avec 20 la limite de temps
Lbl 1
69!:69!
ClrHome
Output(1,8,int(F
Output(1,2,Z
Output(1,16,Y
Output(A,1,"{-
output(B,15,"-}
getKey->K
If K=81 and T>=2:Goto 2     //>= supérieur ou égal
If K=85 and U>=2:Goto 3
A+C->A
B+D->B
1+T->T
1+U->U
If A>=8:-1->C               //>= supérieur ou égal  //Utiliser le "(-)" de la calculatrice
If B>=8:-1->D
If A<=2:1->C               //<= inférieur ou égal
If B<=2:1->D
F-0,25->F
If F=0:Stop
Goto 1
Lbl 2
2->E
0->T
Lbl 4
Output(A,E,"-
E+1->E
If A=B and E=16:Z+1->Z
If A=B and E=16:0->U
If A=B and E=16:Goto 1
If E>=16:Goto 1
Goto 4
Lbl 3
15->E
0->U
Lbl 5
Output(B,E,"-
E-1->E
If B=A and E=1:Y+1->Y
If B=A and E=1:0->T
If B=A and E=1:Goto 1
If E<=1:Goto 1
Goto5


N'hésitez pas à donner vos avis et amusez vous bien. bigmouth.gif
Paulo1026 le 11/12/2016 à 20:22
Je te fais le reset de la position quand j'aurai le temps (c'est assez simple il faut juste que je regarde ton code pour savoir quelle variable correspond à quoi, etc...)
Mr.Jak le 11/12/2016 à 20:46
Paulo1026 a écrit :
Je te fais le reset de la position quand j'aurai le temps (c'est assez simple il faut juste que je regarde ton code pour savoir quelle variable correspond à quoi, etc...)


Merci beaucoup bigmouth.gif
m@thieu41 le 12/12/2016 à 12:36
Pour la limite de temps : tu prends une variable (une par joueur) que tu augmentes de 1 à chaque tour.
Tu la réinitialises à 0 lorsqu'il y a un tir.
Tu n'autorises le tir que si elle est supérieure à une certaine valeur V (à toi d'ajuster pour que ça fasse ~20s (mais ça dépendra de l'état de la pile, RAM, etc).
Au début tu l'initialise à V, pour qu'on puisse tirer dès le début.
EDG le 12/12/2016 à 13:24
De ce que j'ai compris, A c'est le J1, B le J2, C et D sont les montés et descente des joueurs (C pour A et D pour B), 2 et 8 sont les limites, F le temps, Z les points de A et Y le points de B (juste à la vue, j'ai pas recopier ton programme sur ma calculatrice.)

Donc pour reset les position, du devrais changer ton code

Code
If B=A and E=1:Y+1->Y
If B=A and E=1:8->B
If B=A and E=1:2->A
If B=A and E=1:Goto 1


par

Code
If B=A and E=1
Then
Y+1->Y
8->B
2->A
Goto 1
End


et

Code
If A=B and E=16:Z+1->Z
If A=B and E=16:2->A
If A=B and E=16:8->B
If A=B and E=16:Goto 1


par

Code
If B=A and E=16
Then
Z+1->Z
8->B
2->A
Goto 1
End
Paulo1026 le 12/12/2016 à 19:51
Et voilà la réponse bigmouth.gif merci pour lui EDG j'avoue que j'avais un peu la flemme et que je le lui aurai pas fait avant le week'end XD
m@thieu41 le 13/12/2016 à 17:33
/!\ Évitez les goto dans les boucles et structures If/Then/end !
https://tout82.pages-perso.fre[...].php?sujet=2757

Surtout que le Goto sera de toute façon exécuté aux lignes
If E<=1:Goto 1
If E>=1:Goto 1

Je te recommande donc de juste enlever les Goto dans la proposition de EDG.
Mr.Jak le 14/12/2016 à 19:40
Merci à tous de vos réponses ! cupsmiley.gif cupsmiley.gif
EDG le 19/01/2017 à 14:43
pas de problèmes bigmouth.gif
Homer_Dalor le 22/04/2017 à 15:45
Comment ça je suis en retard ?

Non pas du tout. N'insistez pas !
Bref. Voilà ton programme avec quelques modifications expliquées winkle.gif
J'ai pas mis les mêmes variables, vu que j'ai refait le jeu dans mon coin sans vraiment regardé ce que t'avais mis. Excuse moi cry.gif

Code

:EffVar VEffVar WEffVar AEffVar B2->C:6->D:1->Y:1->Z    //Pour les variables, ici A et B sont les scores, C et D les positions des persos, Y et Z si ils vont vers le haut ou le bas. U et T dans ton programmes sont inutiles (voir suite programme), V et W sont les temps de recharge

:Repeat K=45     //Pour l'arrêt, je n'ai pas mis de limite de temps, si tu veux la rajouter, comme tu avait fait été parfait^^

:EffEcr
:Output(1,2,A
:Output(1,15,B
:Output(C,1,"{-
:Output(D,15,"-}
:codeTouche->K
:If K=81 et non(V:Then     //Si le joueur de gauche appuie et si le temps de recharge et à 0. non(V signifie V=0, on gagne un octet, c'est important !
:For(E,3,16
:Output(C,E,"-      //Plus simple que d'incrémenter une variable, tu t'es compliqué la vie :)
:End
:If C=D:A+1->A     //Si les deux joueurs sont sur la même ligne, on ajoute un point
:4->V      //Le temps de recharge
:End       //On ferme la boucle le joueur de gauche a fini de tirer.
:If K=85 et non(W:Then      //Pareil pour le joueur de droite
:For(E,14,1,-1
:Output(D,E,"-
:End
:If C=D:B+1->B
:4->W
:End
:C+Y->C       //Y=1 ou -1 le joueur ira donc soit en bas, soit en haut.
:D+Z->D
:If C=8 ou C=2:-Y->Y    //si le joueur touche un bord, on inverse sa direction
:If D=8 ou D=2:-Z->Z
:V-(V>0->V              //On décremente le temps de recharge si il est supérieur à 0
:W-(W>0->W
:End                   //Fin de la boucle repeat.



Y a ptet encore des amélio à faire, quelques broutilles surement^^
Bref, ce qu'on peut en conclure : Les boucles seront toujours mieux qu'un Goto Lbl bigmouth.gif
Tu vas voir, c'est beaucoup plus rapide comme ça.
Bonne continuation ! <3