1

Salut à tous, j'ai encore besoin de vous :
Je me suis lancé dans la programmation d'un jeu de morpion sur ma 83+ en basic.
Le jeu se jouera avec les touches 1-9.
Malheureusement, lorsque la grille apparait et que j'appuie sur 1 une croix est sensée apparaitre dans la case inférieure gauche.
Mais le probleme est ici : L'execution du programme est considéré comme terminée.
Ainsi, l'écran de graph disparait et ca fait comme si j'appuyait sur 1 sans programme.
Je vous demande encore votre aide (vous serez dans les crédits du jeu !) pour savoir comment faire pour ne pas quitter l'ecran du graph.
Merci d'avance !

2

Je ne sais pas, tout dépend comment tu as programmé ça. Tu peux poster ton code ?

C'est sans doute une histoire de boucle manquante (rien que pour le getKey).

3

Repeat 0
If ((getkey92) et(H=2) ou (H=4) ou(H=6)ou(H=8)))
Then
Line(29,19,1,1
Line(29,1,1,19
H+1->H
End
If (la même chose mais avec H= des nombres impairs)
Then
Circle(15,10,8
H+1->H
End

La même chosre pour les 9 touches

If H=10
Then
Goto F
End

End (pour le repeat

Lbl F

4

Enfaite ton problème vient du fait que getKey ne bloque pas l'exécution du programme, du coup ta boucle est bien faite 10 fois, mais trop rapidement pour détecter les touches...

Je t'ai fait une version optimisée :

0→Xmin
94→Xmax
0→Ymin
62→Ymax ; on règle l'écran graphique
GridOff ; pas de grille
AxesOff ; pas d'axes
ClrDraw
0→C ; on réinitialise le compteur de tours
Line(16,62,16,14
Line(32,62,32,14
Line(0,46,48,46
Line(0,30,48,30 ; puis on trace la grille du jeu
Repeat C=9 ; la boucle s'effectuera 9 fois
Repeat Ans ; on aurait pu faire "Repeat A", mais Ans est légèrement plus rapide
getKey→A ; le but est de sortir de la boucle que si une touche est pressée (getKey≠0)
End
-2+10fPart(.1Ans→B ; cette fonction récupère le premier chiffre (unité) du nombre du getKey et lui soustrait 2 (de sorte qu'ensuite on ne s'occupe des touches que de la deuxième colonne, par exemple les touches #72, 73 et 74 renverront 0, 1 et 2), ce sera donc notre coordonnée X (note : le signe moins à utiliser est (-))
-7+iPart(.1A→A ; idem mais avec le deuxième chiffre (dizaine), pour ne s'occuper des touches qu'à partir de la ligne 7, c'est notre coordonnée Y
If A≥0 and A<3 and B≥0 and B<3 ; on vérifie qu'on presse bien une touche du pavé numérique
Then
C+1→C ; si c'est le cas on incrémente le compteur de tours
If fPart(Ans/2 ; on vérifie si le numéro du tour est pair
Then
Circle(8+16*B,54-16*A,8 ; s'il est impair, on trace un cercle en fonction des coordonnées
Else
Line(16*B,62-16*A,16+16*B,46-16*A ; sinon on trace une croix
Line(16+16*B,62-16*A,16*B,46-16*A
End
End
End


Si tu as des questions n'hésite pas smile

Par contre, il n'y a bien évidemment pas (encore) de vérification lorsqu'on choisit une case (si elle a déjà été choisie), et pour savoir qui gagne à la fin, mais c'est facilement faisable avec une matrice de 3*3.

Et je suis sûr que les pro du TI-Basic vont certainement pouvoir encore optimiser tout ça, mais le but c'est tout de même que tu comprennes ce que tu codes.

edit : quelques optimisations.

5

A propos, tu peux te sers de SourceCoder pour poster le source code de tes programmes : http://www.cemetech.net/projects/basicelite/sourcecoder2.php

Comme ça tu n'auras pas à écrire tout manuellement !