Forum

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

Programme : Morpion

Mingerton le 10/12/2012 à 19:25
J'ai allégé ce programme en perm.Il est (toujours) pas graphique et il devine (toujours) pas quand on a gagné. Le programme fait 400 octet, mais il doit pouvoir être (encore) optimisé.

Notons le léger bug qui fait que lorsque Y est plus petit que 2, c'est "Err:Domain". J'y travaille !
Code
: Lbl A
: ClrHome
: Disp "+--+--+--+","!  !  !  !","+--+--+--+","!  !  !  !","+--+--+--+","!  !  !  !","+--+--+--+"
: Output (1,11,"MORPIO
: Output (3,14, "J-X
: Output (5,14, "J-O
: Output (3,13, ">
: 1->J
: Lbl P
: 2->X : 2->Y
: 2->A : 2->B
: Repeat K=105
: Output (A, B, " 
: Output (Y, X, "+
: Y->A : X->B
: getKey->K
: X-3(K=24)+3(K=26->X
: Y-2(K=25)+2(K=34->Y
: If X=11 : 2->X
: If X<2 : 8->X
: If Y=8 : 2->Y
: If Y=1 : 6->Y
: End
: If K=45
: Then
: Goto A
: End
: 3-J->J
: If J=2
: Then
: Output (3,13,"
: Output (5,13,">
: Output (A,B," 
: Output (A,B+1,"X
: Goto P
: End
: If J=1
: Then
: Output (3,13,">
: Output (5,13,"
: Output (A,B," 
: Output (A,B+1,"O
: Goto P
: End


-> flèche sto
> plus grand que
< plus petit que
Clear = recommencer la partie

Bonne chance !
blg_flg le 10/12/2012 à 19:31
Pour ces corrections, tu peux éditer ton message précédent (le bouton est en haut à gauche de ton post). winkle.gif
geeky-TI le 12/12/2012 à 17:29
bien, c'est fonctionnel, mais comment on fait pour mettre des O?
linkakro le 12/12/2012 à 19:17
La structure de If/Then/End est fausse.
Tu as mis un Then là où il n'en faut pas et tu as laissé deux vides là où il en faut.

Tu peux remplacer l'incrément de J et sa remise à 1 par "3-J->J".

Tu peux remplacer les lignes du type
: If X=7 and K=24 : 5->X
Par des incréments de X ou Y et des tests de la zone de déplacement en plus des tests de K.

Tu peux aussi associer une touche à chaque case, le pavé numérique par exemple.
(à la place du curseur)
Mingerton le 13/12/2012 à 20:50
@geeky-TI
Comme je l'ai dit, ce programe ne vérifie pas la victoire. Donc il faut s'attendre à des bugs du genre remplacement des cases, etc... Toujours est il, si j'ai bien compris ta question : placer c'est ENTER. Bonne chance.

@linkakro
Comme tu peux le remarquer en lisant le code, je ne suis pas un bon programmateur, donc j'ai "bricolé". Merci de tes conseils ! happy.gif J'espère les avoir bien interprétés. Pour le pavé numérique, j'ai un autre morpion en utilisant un, mais c'est plus esthétique avec un curseur (ou pas ?).
Mingerton le 15/12/2012 à 19:30
Mon programme morpion utilisant le pavé numérique, et optimisable sans aucun doute. Il fait environ 400 octets. Bonne chance !
Code
: Lbl A
: ClrHome
: Disp "+--+--+--+","!  !  !  !","+--+--+--+","!  !  !  !","+--+--+--+","!  !  !  !","+--+--+--+"
: Output (1,11,"MORPIO
: Output (3,14, "J-O
: Output (5,14, "J-X
: Output (3,13, ">
: 1->J
: Lbl P
: Repeat K>71 and K<95
: getKey->K
: If K=72 : Output(2,2,Str1
: If K=73 : Output(2,5,Str1
: If K=74 : Output(2,8,Str1
: If K=82 : Output(4,2,Str1
: If K=83 : Output(4,5,Str1
: If K=84 : Output(4,8,Str1
: If K=92 : Output(6,2,Str1
: If K=93 : Output(6,5,Str1
: If K=94 : Output(6,8,Str1
: End
: If K=45
: Goto A
: End
: 3-J->J
: If J=2
: Then
: "XX"->Str1
: Output (3,13,"
: Output (5,13,">
: Goto P
: End
: If J=1
: Then
: "OO"->Str1
: Output (3,13,">
: Output (5,13,"
: Goto P
: End


Notes : -> flèche sto
< plus petit que
> plus grand que

Bonne chance !
linkakro le 15/12/2012 à 23:56
C'est probablement dû aux goto à l'intérieur des If/then/end
https://tout82.pages-perso.fre[...].php?sujet=2757
D'ailleurs le second End ne correspond à rien.

Voici qui devrait régler le problème.
Code
: Lbl A
: ClrHome
: Disp "+--+--+--+","!  !  !  !","+--+--+--+","!  !  !  !","+--+--+--+","!  !  !  !","+--+--+--+"
: Output (1,11,"MORPIO
: Output (3,14, "J-O
: Output (5,14, "J-X
: Output (3,13, ">
: 1->J
: Lbl P
: Repeat K
: getKey->K
: End
: If K=72 : Output(2,2,Str1
: If K=73 : Output(2,5,Str1
: If K=74 : Output(2,8,Str1
: If K=82 : Output(4,2,Str1
: If K=83 : Output(4,5,Str1
: If K=84 : Output(4,8,Str1
: If K=92 : Output(6,2,Str1
: If K=93 : Output(6,5,Str1
: If K=94 : Output(6,8,Str1
: If K=45
: Goto A
: 3-J->J
: If J=2
: Then
: "XX"->Str1
: Output(3,13,"
: Output(5,13,">
: Else
: "OO"->Str1
: Output(3,13,">
: Output(5,13,"
: End
: Goto P
Mingerton le 16/12/2012 à 09:05
En effet le problème se situait ici. Merci beaucoup !