Page 1 of 3

probleme sur mon morpion

Unread postPosted: 02 Apr 2010, 23:06
by jbofcalc
bonjour j'ai crée un jeu de morpion sympa sans utiliser le mode graphique (je ne sais pas l'utiliser ^^")
et dansce programme une fois sur deux lorsque je lance le programme en mode un joueur au bout du 6ème tour
le programme s'arrete en faisant "done"
je vus recopie le programme meme si je doute que beaucoup de monde aura le courage de le recopier (8page) ^^ mais si quelqun pouvait arriver a voir mon erreur (j'ai regardé + de 10 fois mon programme sans la trouvé)


Lbl 3
EffEcr
RappelImage 1
Pause
0-W
0-S
0-B
0-C
0-D
0-E
0-V
0-F
0-G
0-H
0-I
0-J
Menu("MORPION","JOUER",4,"REGLE DU JEU",5,"QUITTER",6)
Lbl 5
Disp "FAIRE UNE LIGNE"
Disp "DE 3 CROIX OU
Disp "3 RONDS"
Pause
EffEcr
Goto 3
Lbl 4
Menu("NBRE DE JOUEURS","UN",51,"DEUX",52)
Lbl 51
W+1-W
Lbl 52
While V=0
Lbl 2
EffEcr
Output(6,1,"J1"
Output(1,8,"7 8 9")
Output(3,8,"4 5 6")
Output(5,8,"1 2 3")
If W=1
Then
entAléat(1,9)-A
End
If W=/1 (=/ veut dire inégale)
Then
Input "OU ?",A
End
EffEcr
If A=7
Then
If B=1 ou B=-1
Then
S-1-S
Goto 2
End
B-1-B
S+1-S
End
If A=8
Then
If C=1 ou C=-1
Then
S-1-S
Goto 2
End
C-1-C
S+1-S
End
If A=9
Then
If D=1 ou D=-1
Then
S-1-S
Goto 2
End
D-1-D
S+1-S
End
If A=4
Then
If E=1 ou E=-1
Then
S-1-S
Goto 2
End
E-1-E
S+1-S
End
If A=5
Then
If F=1 ou F=-1
Then
S-1-S
Goto 2
End
F-1-F
S+1-S
End
If A=6
Then
If G=1 ou G-1
Then
S-1-S
Goto 2
End
G-1-G
S+1-S
End
If A=1
Then
If H=1 ou H=-1
Then
S-1-S
Goto 2
End
H-1-H
S+1-S
End
If A=2
Then
If I=1 ou I=-1
Then
S-1-S
Goto 2
End
I-1-I
S+1-S
End
If A=3
Then
If J=1 ou J=-1
Then
S-1-S
Goto 2
End
J-1-J
S+1-S
End
For(X,1,13)
Output(1,X,"-")
Output(3,X,"-")
Output(5,X,"-")
Output(7,X,"-")
End
For(X,1,14,4)
Output(2,X,"I"
Output(4,X,"I"
Output(6,X,"I"
End
If B=1
Then
Output(2,2,"OOO"
End
If B=-1
Then
Output(2,2,"XXX")
End
If C=1
Then
Output(2,6,"OOO"
End
If C=-1
Then
Output(2,6,"XXX")
End
If D=1
Then
Output(2,10,"OOO"
End
If D=-1
Then
Output(2,10,"XXX")
End
If E=1
Then
Output(4,2,"OOO"
End
If E=-1
Then
Output(4,2,"XXX")
End
If F=1
Then
Output(4,6,"OOO"
End
If F=-1
Then
Output(4,6,"XXX")
End
If G=1
Then
Output(4,10,"OOO"
End
If G=-1
Then
Output(4,10,"XXX")
End
If H=1
Then
Output(6,2,"OOO"
End
If H=-1
Then
Output(6,2,"XXX"
End
If I=1
Then
Output(6,6,"OOO"
End
If I=1
Then
Output(6,6,"XXX")
End
If J=1
Then
Output(6,10,"OOO"
End
If J=-1
Then
Output(6,10,"XXX")
End
If B+C+D=3 ou E+F+G=-3 ou H+I+J=-3 ou B+E+H=-3 ou C+F+I=-3 ou D+G+J=-3
Then
Output(8,1,"J1 GAGNE")
Pause
V-1-V
Goto 10
End
If B+F+J=-3 ou D+F+H=-3
Then
Output(8,1,"J1 GAGNE"
Pause
V-1-V
Goto 10
End
If S=9
Then
Output(8,1,"EGALITE"
Pause
V-1-V
Goto 10
End
Pause
Lbl 1
EffEcr
Output(6,1,"J2"
Output(1,8,"7 8 9")
Output(3,8,"4 5 6")
Output(5,8,"1 2 3")
Input "OU ?",R
If R=7
Then
If B=-1 ou B=1
Then
S-1-S
Goto 1
End
B+1-B
S+1-S
End
If R=8
Then
If C=-1 ou C=1
Then
S-1-S
Goto 1
End
C+1-C
S+1-S
End
If R=9
Then
If D=1 ou D=-1
Then
S-1-S
Goto 1
End
D+1-D
S+1-S
End
If R=4
Then
If E=1 ou E=-1
Then
S-1-S
Goto 1
End
E+1-E
S+1-S
End
If R=5
Then
If F=1 ou F=-1
Then
S-1-S
Goto 1
End
F+1-F
S+1-S
End
If R=6
Then
If G=1 ou G=-1
Then
S-1-S
Goto 1
End
G+1-G
S+1-S
End
If R=1
Then
If H=1 ou H=-1
Then
S-1-S
Goto 1
End
H+1-H
S+1-S
End
If R=2
Then
If I=1 ou I=-1
Then
S-1-S
Goto 1
End
I+1-I
S+1-S
End
If R=3
Then
If J=1 ou J=-1
Then
S-1-S
Goto 1
End
J+1-J
S+1-S
End
For(X,1,14)
Output(1,X,"-")
Output(3,X,"-")
Output(5,X,"-")
Output(7,X,"-")
End
For(X,1,14,4)
Output(2,X,"I")
Output(4,X,"I")
Output(6,X,"I")
End
If B=-1
Then
Output(2,2,"XXX"
End
If B=1
Then
Output(2,2,"OOO")
End
If C=-1
Then
Output(2,6,"XXX"
End
If C=1
Then
Output(2,6,"OOO"
End
If D=-1
Then
Output(2,10,"XXX"
End
If D=1
Then
Output(2,10,"OOO"
End
If E=-1
Then
Output(4,2,"XXX"
End
If E=1
Then
Output(4,2,"OOO"
End
If F=-1
Then
Output(4,6,"XXX"
End
If F=1
Then
Output(4,6,"OOO"
End
If G=-1
Then
Output(4,10,"XXX"
End
If G=1
Then
Output(4,10,"OOO"
End
If H=-1
Then
Output(6,2,"XXX"
End
If H=1
Then
Output(6,2,"OOO"
End
If I=-1
Then
Output(6,6,"XXX"
End
If I=1
Then
Output(6,6,"OOO"
End
If J=-1
Then
Output(6,10,"XXX"
End
If J=1
Then
Output(6,10,"OOO"
End
If B+C+D=3 ou E+F+G=3 ou H+I+J=3
Then
Output(8,1,"J2 GAGNE"
Pause
V-1-V
Goto 10
End
If B+E+H=3 ou C+F+I=3 ou D+G+J=3
Then
Output(8,1,"J2 GAGNE"
Pause
V-1-V
Goto 10
End
If B+F+J=3 ou D+F+H=3
Then
Output(8,1,"J2 GAGNE")
Pause
V-1-V
Goto 10
End
If S=9
Then
Output(8,1,"EGALITE"
Pause
V-1-V
Goto 10
End
Pause
End
Lbl 10
While V=-1
Menu("FIN DE PARTIE","REJOUER",3,"QUITTER",6
EffEcr
End
Lbl 6
EffEcr

Re: probleme sur mon morpion

Unread postPosted: 03 Apr 2010, 12:16
by tama
Plop,
Effectivement, en regardant le code comme ça on peut pas trop deviner où est l'erreur, mais c'est une bonne chose d'avoir mis le code, en général si ce n'est qu'une partie qui bug pas besoin de mettre tout le code mais seulement la partie qui foire.
Bon sinon, pour (tenter de) résoudre ton problème, il va falloir débugger légèrement ton programme, c'est-à-dire savoir ce qui est fait et quand, en ajoutant des "Disp " ou "Disp message" à certains endroits (des "points-clés") et en vérifiant que l'affichage se fait bien dans l'ordre que tu souhaites
Evite les goto sinon, à ton niveau ce n'est pas encore bien grave mais essaies déjà d'en minimiser l'utilisation (utilises des boucles for ou while)
Il y a sûrement aussi un moyen d'optimiser tous les
If ...

Goto 1

mais j'avoue avoir lu le code en diagonale, donc je sais pas trop ce qui est censé se faire, c'est pour ça qu'il faut ajouter quelques commentaires à ton code si tu veux nous le montrer, le but étant qu'une personne ne connaissant pas le programme (nous en l'occurence) puisse quand même comprendre comment il fonctionne.

Voilà c'est tout ce que j'ai à dire pour le moment, d'autres personnes auront peut-être trouvé ce qui se passe d'ici mon prochain message :D
Bon courage

Re: probleme sur mon morpion

Unread postPosted: 03 Apr 2010, 12:59
by Yak
Arg, je ne me souvenais pas que c'était à ce point illisible du basic.
Et comme le dit Tama, le goto, c'est vraiment à éviter. Ça peut être très bien utilisé, mais c'est illisible deux jours après. Et ne parlons même pas de la difficulté de lecture par une tierce personne.
D'ailleurs, le deboggage devient bien plus difficile et tu risques de te retrouver dans des cas que tu n'as pas prévu.

Re: probleme sur mon morpion

Unread postPosted: 04 Apr 2010, 19:21
by jbofcalc
j'ai enfin réussis a résoudre mon pb au fur et a mesure de faire des essais mon pb venait de l'entré aléatoire qui a chaque fois qu'elle se trompait réalisait une action (je ne sais pas laquelle) qui stoppait le programme j'ai donc résolut mon pb en modifiant l'ia de ma calculette ^^
( je ne republierais pas mon programme (17 pages word )je ne pense pas que quelqun le lira) (je suis un geek

Re: probleme sur mon morpion

Unread postPosted: 04 Apr 2010, 20:57
by tama
Bienvenue dans le monde des "geeks" mais un seul programme c'est pas assez pour être geek XD
Nan sérieusement, c'est cool que ça marche, maintenant si t'as le temps essaies d'optimiser ton programme, parce que 17 pages word pour un programme comme ça c'est pas top, bien sûr t'y connais pas grand-chose et tu viens juste de commencer mais y a largement de quoi réduire tout ça et le rendre plus efficace ;)
Pis si t'es intéressé par la programmation, n'hésites pas à repasser ici, tu peux aussi prendre mon adresse MSN si tu veux (même si ça fait déjà pas mal de temps que j'ai plus touché à mes TI, mais j'devrais pas avoir de problèmes pour te répondre :p)

Re: probleme sur mon morpion

Unread postPosted: 05 Apr 2010, 17:04
by jbofcalc
ok merci de ton aide, je pense avor fini d'optimiser mon programme maintenant me reste plus qu'a le réduire et si jamais j'ai un autre pb j'hesiterais pas à demandé ^^
(en ameliorant mon programme je suis passé a 22 pages

Re: probleme sur mon morpion

Unread postPosted: 05 Apr 2010, 17:42
by jacques
jbofcalc wrote:ok merci de ton aide, je pense avor fini d'optimiser mon programme maintenant me reste plus qu'a le réduire et si jamais j'ai un autre pb j'hesiterais pas à demandé ^^
(en ameliorant mon programme je suis passé a 22 pages

Ca serait plutôt de la désoptimisation alors. :#langue#:

Re: probleme sur mon morpion

Unread postPosted: 05 Apr 2010, 17:55
by jbofcalc
oui enfin sa dépend du point de vue ^^
j'ai ajouté de l'ia et une meilleur visibilité et ai viré un truc inutile
mais tout cela m'a ajouté 5 pages (le principal pb, qui rajoute de la longueur a mon programme, est le fait d'avoir créé une partie pour j1 et une partie pour j2 qui sont pareil, a la difference de leur entré dans la grille: les croix pour l' un et les ronds pour l'autre )

Re: probleme sur mon morpion

Unread postPosted: 05 Apr 2010, 19:00
by tama
Si t'as du code qui se ressemble, "factorise-le", dans ton cas tu peux utiliser une variable J qui vaut 0 ou 1 selon le joueur qui joue, puis à l'affichage selon la valeur de J tu affiches une croix ou un rond :

While 1
0 -J
...
If J=0 /* c'est le joueur 1 qui joue */
Then
Output A,B,"x"
Else
Output A,B,"o"
End
not(J-J
End

Pourquoi 0 ou 1 ? pour pouvoir "switcher" rapidement entre les 2 joueurs grâce à not() : not(A) vaut 1 si A = 0, ou 0 si A = 1, c'est pratique pour les jeux à 2 joueurs comme ça

Re: probleme sur mon morpion

Unread postPosted: 06 Apr 2010, 20:35
by jbofcalc
je n'ai pas compris le truc du not(J->J) je ne comprend pas en quoi cela inverse le J=0 de plus dans mon programme une troisieme possibilité entre en compte celle de la présence de l'ia (le joueur a le choix entre jouer seul ou a deux )