Autorisation : Membre
Nb de messages : 158
Inscrit le : Dim 11 Oct 2009, 14:18
Posté le : Dim 20 Déc 2009, 11:12
Bonjour à tous ! Je vous présente mon dernier programme, un Morpion !
Je tiens à préciser que le site du zéros en propose un dans un de ses tutoriels et que je n'ai pas copier ! (le miens étant beaucoup mieux^^)
Pour info, il fait 2408 octets et se joue à 2. (j'ai même pas essayer de crée une intelligence artificielle pour un mode 1 joueur)
Les règles :
- Se joue à 2
- Le jeux s'arrête quand 3 croix ou 3 cercles sont alignés verticalement, horizontalement ou en diagonale.
- Ensuite le programme nous demande de "Restart" ou non.
- A chaque fois qu'un joueur aligne 3 de ses pions, il gagne 1 point.
- Les points s'accumulent si vous demander à chaque fin de partie de "Restart"
- A chaque nouvelle partie, Le J1 commence une fois sur 2 pour que sa soit égale
- Si quand vous en avez marre, vous demander de ne pas "Restart", le programme fait un bilan et attribue un vainqueur sur toute les parties jouées.
- Il peut y avoir égalité.
Voici le code:
Code
:StoreGDB GDB1 /* StoreGDB : 2nd + PRGM + 2 fois flèche droite
:0->L GDB1 : Vars + GDB */
:0->M
:2->D
:1->I
:Lbl 1
:If L+M=!0 or I=0:D+1->D // =! signifie : signe différent : 2nd + MATH + 2
:ClrDraw
:CoordOff // Window + format
:GridOff
:AxesOff
:FnOff // 2nd + VARS + ON/Off
:0->Xmin // VARS + Window
:0->Ymin
:94->Xmax
:62->Ymax
:Line(34,21,94,21:Line(34,41,94,41:Line(54,61,54,1:Line(74,61,74,1
:Line(34,1,34,61:Line(34,61,94,61:Line(94,61,94,1:Line(94,1,34,1
:Line(5,36,29,36:Line(17,43,17,27:Line(4,44,30,44:Line(30,44,30,26:Line(4,26,4,44
:Text(19,8,"J1
:Text(19,21,"J2
:Text(28,10,L
:Text(28,23,M
:{3,3}->dim [A] // Pour faire [A] faites MATRX + ENTRER
:Fill(0,[A] // Fill : MATRX + flèche droite
:36->A:3->B:0->C:1->E:1->F:0->G:1->I
:Line(A,B,A,B+16:Line(A,B+16,A+16,B+16:Line(A+16,B+16,A+16,B:Line(A+16,B,A,B
:Repeat K=105
:getKey->K
:If K=24 or K=25 or K=26 or K=34
:Then
:Line(A,B,A,B+16,0:Line(A,B+16,A+16,B+16,0:Line(A+16,B+16,A+16,B,0:Line(A+16,B,A,B,0
:End
:If A=16:76->A
:If A=96:36->A
:If B=-17:43->B // Ce moins est le signe négatif. Sur la calcu il est noté (-)
:If B=63:3->B
:If E=4:1->E
:If E=0:3->E
:If F=4:1->F
:If F=0:3->F
:If K=24 or K=25 or K=26 or K=34
:Then
:Line(A,B,A,B+16:Line(A,B+16,A+16,B+16:Line(A+16,B+16,A+16,B:Line(A+16,B,A,B
:End
:If fPart (D/2)=0 and [A](E,F)=0
:Then
:Line(A+1,B+1,A+15,B+15:Line(A+15,B+1,A+1,B+15
:1->[A](E,F
:D+1->D:G+1->G
:End
:If fPart (D/2)=!0 and [A](E,F)=0
:Then
:Circle(A+8,B+8,7 // Pour cette ligne regarder à la fin du post.
:2->[A)(E,F
:D+1->D:G+1->G
:End
:If G=9
:Then
:1->C:0->I
:End
:If ([A](1,1)=!0 and [A](1,1)=[A](1,2) and [A](1,2)=[A](1,3)) or // Cette mise
([A](2,1)=!0 and [A](2,1)=[A](2,2) and [A](2,2)=[A](2,3)) or // en page est la
([A](3,1)=!0 and [A](3,1)=[A](3,2) and [A](3,2)=[A](3,3)) or // pour facilité
([A](1,1)=!0 and [A](1,1)=[A](2,1) and [A](2,1)=[A](3,1)) or // la copie du
([A](1,2)=!0 and [A](1,2)=[A](2,2) and [A](2,2)=[A](3,2)) or // programme.
([A](1,3)=!0 and [A](1,3)=[A](2,3) and [A](2,3)=[A](3,3)) or // Ne pas sauter
([A](1,1)=!0 and [A](1,1)=[A](2,2) and [A](2,2)=[A](3,3)) or // de ligne sur la
([A](3,1)=!0 and [A](3,1)=[A](2,2) and [A](2,2)=[A](1,3)) // calculatrice.
:1->C
:End
:If I=!0
:Text(8,6,"GAGNE
:Text(40,2,"RESTART? // Laissez Le "?" collé au "RESTART"
:Line(2,15,31,15
:Text(49,18,"YES
:Text(57,18,"NO
:0->K:49->N
:Text(N,5,"--> // Ceci n'est pas la flèche "sto". Faites 2 fois le signe - + >
:If N=49:Goto 1
:RecallGDB GDB1
:If N=57
:Then
:ClrHome
:If L=M
:Then
:Output(2,1,"EGALITE ENTRE LE
:Output(3,1,"J1 ET LE J2 AVEC
:Output(4,2,M
:Output(4,4,"VICTOIRE(S)
:Output(5,6,"CHACUN
:End
:If M=!L
:Then
:Output(3,3,«LE J GAGNE" // 3 espaces entre J et GAGNE
:If L>M:Output(3,1,"1
:If M>L:Output(3,7,"2
:Output(4,5,"AVEC -" // 3 espaces après AVEC
:Output(4,10,L
:Output(4,14,M
:End
:Output(7,4,"MADE BY :
:Output(8,8,"ADRIEN.D
:End
:Output(1,1,"
Si vous trouver que le traçage du cercle est trop lent ( cela dépend du modèle de votre calculatrice Il faut remplacer cette ligne :
Pt-On( se trouve en faisant 2nd + PRGM + flèche droite + ENTRER
La calculatrice trace enfaite les points un par un, ce qui est plus rapide (oui c'est bizarre^^)
Pour plus de clarté voici la liste des points :
- Quand il y a // puis du texte, ce sont des commentaires (il ne faut pas les copiés).
- Si je saute des lignes c'est pour vous facilitez la copie du programme, pour le copier par étapes.
Bon ba voilà, j'espère que quelqu'un vas le tester. Dites m'en des nouvelles
Autorisation : Membre
Nb de messages : 41
Inscrit le : Sam 20 Fév 2010, 17:50
Posté le : Jeu 25 Fév 2010, 14:42
problème val fenêtre résolu merci
maintenant j'ai d'autres petits problemes :
-je ne pe pas choisir ou je veux mettre mes croix et mes croix ça les place sur le pointeur
-est ce normal que la zone de jeu ne soit pas délimitécar je peut mettre des croix une case a coté de la zone de jeu
-le pire : ça ne détecte pas lorsque j'aligne 3 croix (ou ronds).
Ps: me dite pas que j'ai recopié tout ça pour rien
Autorisation : Membre
Nb de messages : 158
Inscrit le : Dim 11 Oct 2009, 14:18
Posté le : Jeu 25 Fév 2010, 19:53
Pour la zone de jeux délimiter vérifie sa :
Code
:If A=26:76->A
:If A=96:36->A
:If B=-17:43->B // Ce moins est le signe négatif. Sur la calcu il est noté (-)
:If B=63:3->B
:If E=4:1->E
:If E=0:3->E
:If F=4:1->F
:If F=0:3->F
Pour la détection des victoires vérifie sa :
Code
:If ([A](1,1)=!0 and [A](1,1)=[A](1,2) and [A](1,2)=[A](1,3)) or // Cette mise
([A](2,1)=!0 and [A](2,1)=[A](2,2) and [A](2,2)=[A](2,3)) or // en page est la
([A](3,1)=!0 and [A](3,1)=[A](3,2) and [A](3,2)=[A](3,3)) or // pour facilité
([A](1,1)=!0 and [A](1,1)=[A](2,1) and [A](2,1)=[A](3,1)) or // la copie du
([A](1,2)=!0 and [A](1,2)=[A](2,2) and [A](2,2)=[A](3,2)) or // programme.
([A](1,3)=!0 and [A](1,3)=[A](2,3) and [A](2,3)=[A](3,3)) or // Ne pas sauter
([A](1,1)=!0 and [A](1,1)=[A](2,2) and [A](2,2)=[A](3,3)) or // de ligne sur la
([A](3,1)=!0 and [A](3,1)=[A](2,2) and [A](2,2)=[A](1,3)) // calculatrice.
Pour le 1er problème tu peux préciser ? Je voit pas ce que tu veux dire.
Autorisation : Membre
Nb de messages : 41
Inscrit le : Sam 20 Fév 2010, 17:50
Posté le : Jeu 25 Fév 2010, 21:03
merci de m'avoir répondu je vais vérifié
comment fait-on pour faire un rond ou une croix
sinon le problème c'est que pour le carré pour choisir l'emplacement de mon signe il mets le signe sans que j'appuie donc la 1er croix et en bas a droite
Autorisation : Membre
Nb de messages : 158
Inscrit le : Dim 11 Oct 2009, 14:18
Posté le : Jeu 25 Fév 2010, 23:15
Autant pour moi, c'est de ma faute (erreur de copie)
Ajoute un End ici :
Code
:If A=26:76->A
:If A=96:36->A
:If B=-17:43->B // Ce moins est le signe négatif. Sur la calcu il est noté (-)
:If B=63:3->B
:If E=4:1->E
:If E=0:3->E
:If F=4:1->F
:If F=0:3->F
:If K=24 or K=25 or K=26 or K=34
:Then
:Line(A,B,A,B+16:Line(A,B+16,A+16,B+16:Line(A+16,B+16,A+16,B:Line(A+16,B,A,B
:End
:End <== celui là !
Autorisation : Membre
Nb de messages : 41
Inscrit le : Sam 20 Fév 2010, 17:50
Posté le : Ven 26 Fév 2010, 11:49
merci maintenant la reconnaissance des victoires marche, le pointage aussi, ... mais la zone du morpion n'est pas encore bonne ( j'ai vérifié la partie de code que tu m'avais proposé pour la zone de jeux délimitée) Comment faire ????
merci d'avance en tout cas ce jeu est très bien
Autorisation : Membre
Nb de messages : 41
Inscrit le : Sam 20 Fév 2010, 17:50
Posté le : Ven 26 Fév 2010, 18:33
help est ce que quelqu'un pourrait m'aider pour mon probleme de zone de jeux ???
sinon est ce que d'autre personne peuvent le copier pour voir si c'est moi qui est fait une erreur et si c'estune erreur de recopiage de Didouille
Autorisation : Membre
Nb de messages : 41
Inscrit le : Sam 20 Fév 2010, 17:50
Posté le : Jeu 11 Mar 2010, 18:42
je m'adresse au programmateur est ce que vous pouvez modifiez ce morpion pour que l'on puisse jouer contre un IA
merci de me dire toutes les modifications à faire
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 14 Mar 2010, 15:56
Moi non plus.
Ce n'est que rarement facile de programmer une IA efficace sans une base de cas de figures, ce qui est lourd.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 158
Inscrit le : Dim 11 Oct 2009, 14:18
Posté le : Jeu 18 Mar 2010, 17:32
J'y ai pensé, fait des recherches et en ai conclue que c'est beaucoup trop compliqué pour moi ^^
Le seul truc que je pourrai faire c'est que la calto choisisse une case au hasard.
Autorisation : Membre
Nb de messages : 26
Inscrit le : Mar 13 Avr 2010, 12:34
Posté le : Jeu 22 Avr 2010, 12:14
marrant, j'ai fait un morpion aussi hier soir ^^ !
je vous l'envoie (il pèse environ 980 octets). (tout écrit avec le clavier visuel windows vu que le mien est en panne)
// Ceci est un commentaire
Code
Lbl A
1->K
0->Q
0->P
0->V
0->R
0->U
0->T
0->W
0->Z
0->Y
0->N
7->E
16->F
1->G
0->H
EffEcr
Output(8,16,"O // ici un "O"
output(1,1,"-------
output(2,1,"[ I I ] 7 8 9
output(3,1,"[-----]
output(4,1,"[ I I ] 4 5 6
output(5,1,"[-----]
output(6,1,"[ I I ] 1 2 3
output(7,1,"-------
Lbl 5
K+1->K
If Q=K et P=K et R=K:Goto P
If Q=K et U=K et Y=K:Goto P
If R=K et U=K et W=K:Goto P
If V=K et U=K et T=K:Goto P
If W=K et Z=K et Y=K:Goto P
If R=K et T=K et Y=K:Goto P
If P=K et U=K et Z=K:Goto P
If Q=K et V=K et W=K:Goto P
If K=1:Goto 5
If K=2:0->K
If N=9:Goto 4
Lbl 1
0->C
codeTouche->C
If C=0:Goto 1
If C=74 et Q=0
Then
2->E
6->F
G->Q
Goto B
End
If C=73 et P=0
Then
2->E
4->F
G->P
Goto B
End
If C=72 et R=0
Then
2->E
2->F
G->R
Goto B
End
If C=84 et V=0
Then
4->E
6->F
G->V
Goto B
End
If C=83 et U=0
Then
4->E
4->F
G->U
Goto B
End
If C=82 et T=0
Then
4->E
2->F
G->T
Goto B
End
If C=94 et W=0
Then
6->E
6->F
G->W
Goto B
End
If C=93 et Z=0
Then
6->E
4->F
G->Z
Goto B
End
If C=92 et Y=0
Then
6->E
2->F
G->Y
Goto B
End
0->C
Goto 1
Lbl B
If G=1
Then
Output(8,16,"*
2->G
Output (E,F,"O // "O"
N+1->N
Goto 5
End
If G=2
Then
Output(8,16,"O // Ici "O" et pas "zéro"
1->G
Output(E,F,"*
N+1->N
Goto 5
End
Lbl 4
EffEcr
Pause "EGALITE
Goto A
Lbl P
EffEcr
If K=1
Then
Pause "0 GAGNE
End
If K=2
Then
Pause "* GAGNE
End
Menu("FIN","NEW GAME",A,"QUITTER",Z
Lbl Z
Disp "PROG BY LiNK"
A!!! fini !!!
Si des programmeurs pourrait m'aider à enlever des "Then", sa serait sympa (genre a la fin avec les "O gagne" et "* gagne", je crois qu'il n'y en a pas besoin).
Voila!!! Merci ^^
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 22 Avr 2010, 22:48
J'aime bien la boucle de test d'alignement, bien qu'elle puisse être remplacée par un For ou encore mieux selon le contenu.
Plutôt que de trafiquer G et H pour savoir qui joue, stocke 1 ou 2 dans G. Puis tes tests sur G=1 ou H=1 peuvent être remplacés par G->P (ou toutes variables de cases)
Puis la partie changement de joueur peut être réduite avec 3-G->G
Dans cette même partie les deux then peuvent être rassemblés avec un Else
Les N+1->N et goto5 (même endroit) peuvent être à la suite des If...End et ne pas se répéter.
D'autres trucs sont laissés à la préférence de chaque programmeurs.
Tu as déjà réussi à faire quelque chose qui tient debout, c'est l'essentiel. bravo
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)