Bonjour à tous!
Alors voilà je vous présente mon programme Tic Tac Toe Tomek que j'ai présenté pour le ti concours 2014, au tour 1 en ti basic, en sujet imposé !
Le lien de téléchargement:
https://www.mediafire.com/?1qgtz7433jtq2h4
Je vous fait une rapide présentation:
Le menu:
Vous vous déplacez avec les flèches du haut et du bas. Dans l'ordre:
_Vous pouvez choisir ici de jouer à 2 joueurs (chacun joue chacun son tour sur la même ti), ou contre une IA (HUM VS IA) en utilisant les flèches droite/gauche. Ce choix sera effectif en mode partie simple et tournoi.
_Vous pouvez choisir de faire une partie simple du jeu (voir les règles plus bas) (entrer pour valider).
_Vous pouvez choisir de faire un tournoi, et le choisir le nombre de manches (entre 2 et 5), avec les flèches droite/gauche (entrer pour valider).
_Quitter, je ne vous apprends rien. (annul/clear marche aussi)
Au moment de l'affichage de fin, vous pouvez quitter directement en appuyant sur n'importe quelle touche.
Le jeu (règles prises d'après le site du concours: http://www.ti-concours.com/tz/t1/accueil.php)
Ce jeu se joue sur une grille de 4 * 4 cases. Au début d'une partie, la grille est vide, à l'exception d'un caractère 'T' qui est placé aléatoirement sur l'une des cases.
Il y a deux joueurs: le joueur X et le joueur O. Le joueur X commence, puis les deux jouent chacun leur tour. A chaque tour, le joueur concerné place son symbole sur l'une des cases vides de la grille. Lorsque c'est votre tour, déplacez vous avec les flèches directionnelles, et validez votre position avec entrer.
Lorsque l'un des joueur finis avec une ligne, une colonne ou une diagonale contenant quatre fois son symbole, ou trois fois son symbole plus le symbole 'T', alors ce joueur gagne. La partie continue jusqu'à ce que quelqu'un gagne, ou qu'il n'y ait plus d'emplacement vide sur la grille, auquel cas il y a égalité.
A tout moment, vous pouvez quitter avec annul/clear.
Mode tournoi
En mode tournoi, vous disputez (contre un autre joueur ou une IA), une série de manches, chacun commençant à tour de rôle. A la fin du tournoi, celui qui a remporté le plus de manches gagne le tournoi.
L'IA
L'IA est programmée pour gérer en priorité certains cas (si elle peut gagner, si elle peut perdre, si elle peut prendre l'avantage, etc). Elle est plus offensive que défensive, mais ne peut pas avoir de stratégie impliquant plusieurs lignes/colonnes/diagonales simultanément.
Le code
Voici le code de mon programme. Comme vous pouvez le voir, j'ai essayé d'exploiter au maximum le "bogue" des goto/lbl. (note:je corrige dès que possible l'incompatibilité entre le forum et les caractères de tipe fait)
Pour finir, je vous met un petit screen:
Nb: ici vous pouvez trouver le programme présenté par Wistaro pour ce même concours.
Alors voilà je vous présente mon programme Tic Tac Toe Tomek que j'ai présenté pour le ti concours 2014, au tour 1 en ti basic, en sujet imposé !
Le lien de téléchargement:
https://www.mediafire.com/?1qgtz7433jtq2h4
Je vous fait une rapide présentation:
Le menu:
Vous vous déplacez avec les flèches du haut et du bas. Dans l'ordre:
_Vous pouvez choisir ici de jouer à 2 joueurs (chacun joue chacun son tour sur la même ti), ou contre une IA (HUM VS IA) en utilisant les flèches droite/gauche. Ce choix sera effectif en mode partie simple et tournoi.
_Vous pouvez choisir de faire une partie simple du jeu (voir les règles plus bas) (entrer pour valider).
_Vous pouvez choisir de faire un tournoi, et le choisir le nombre de manches (entre 2 et 5), avec les flèches droite/gauche (entrer pour valider).
_Quitter, je ne vous apprends rien. (annul/clear marche aussi)
Au moment de l'affichage de fin, vous pouvez quitter directement en appuyant sur n'importe quelle touche.
Le jeu (règles prises d'après le site du concours: http://www.ti-concours.com/tz/t1/accueil.php)
Ce jeu se joue sur une grille de 4 * 4 cases. Au début d'une partie, la grille est vide, à l'exception d'un caractère 'T' qui est placé aléatoirement sur l'une des cases.
Il y a deux joueurs: le joueur X et le joueur O. Le joueur X commence, puis les deux jouent chacun leur tour. A chaque tour, le joueur concerné place son symbole sur l'une des cases vides de la grille. Lorsque c'est votre tour, déplacez vous avec les flèches directionnelles, et validez votre position avec entrer.
Lorsque l'un des joueur finis avec une ligne, une colonne ou une diagonale contenant quatre fois son symbole, ou trois fois son symbole plus le symbole 'T', alors ce joueur gagne. La partie continue jusqu'à ce que quelqu'un gagne, ou qu'il n'y ait plus d'emplacement vide sur la grille, auquel cas il y a égalité.
A tout moment, vous pouvez quitter avec annul/clear.
Mode tournoi
En mode tournoi, vous disputez (contre un autre joueur ou une IA), une série de manches, chacun commençant à tour de rôle. A la fin du tournoi, celui qui a remporté le plus de manches gagne le tournoi.
L'IA
L'IA est programmée pour gérer en priorité certains cas (si elle peut gagner, si elle peut perdre, si elle peut prendre l'avantage, etc). Elle est plus offensive que défensive, mais ne peut pas avoir de stratégie impliquant plusieurs lignes/colonnes/diagonales simultanément.
Le code
Voici le code de mon programme. Comme vous pouvez le voir, j'ai essayé d'exploiter au maximum le "bogue" des goto/lbl. (note:
- Code:
{4,4->dim([A]
AxesOff
FnOff
"TIC TAC TOE TOMEK->Str0
10->dim(L2
-1->Ymin
61->Ymax
-23->Xmin
71->Xmax
DelVar LDelVar MDelVar H4->O
While 1
ClrDraw
2->J
Shade(48,59,-13,63
For([théta],1,17
If not(max([théta]={4,8,12
Text(4+randInt(0,2),10+4[théta]," "+sub(Str0,[théta],1
End
Text(50,33,"QUITTER
Text(40,12,"TOURNOI EN ",O," MANCHES
Text(30,23,"PARTIE SIMPLE
For([théta],0,1
For(W,0,2
For(A,1,1+2W
22+20[théta]-W+A
Pxl-On(Ans,W+1
Pxl-On(Ans,93-W
End
End
End
10->I
Repeat H and K=105
If L-W
Text(20,29+2L," "+sub("2 JOUEURSHUM VS IA",1+9L,9
L->W
Text(40,50,O
If H-A
Then
For([théta],0,1
Line(-23,43-10A,71,43-10A,[théta]
Line(-23,33-10A,71,33-10A,[théta]
H->A
End
End
getKey->K
If Ans=45
Goto 0
max(0,min(3,H+(Ans=34)-(Ans=25->H
L xor not(Ans)(K=24 or K=26->L
max(2,min(5,O+(H=2)((K=26)-(K=24->O
End
If H=1
Goto J
If H=3
Goto 0
DelVar P{0,0->L1
Repeat P>O
For(W,0,1
If Pnot(W
Goto 8
End
2-2fPart(.5P->J
P+1->P
If Ans<=O
Goto J
End
L1(2
(L1(1)>Ans)+2(Ans>L1(1->G
Goto 7
Lbl 8
For([théta],-1,50
Line(-23,[théta],71,[théta],0
End
If P-1
Then
RecallPic 0
Else
Horizontal 48
Horizontal 40
Horizontal -1
Text(14,2,"JOUEUR X MANCHE JOUEUR O
For([théta],-23,71,31.3
Line([théta],48,[théta],-1
End
For([théta],1,O
16+6[théta]
Text(Ans,46,[théta]
Text(Ans,15,"-
Text(Ans,78,"-
End
6[théta]
Line(-23,44-Ans,71,44-Ans
Text(18+Ans,39,"TOTAL
Shade(-1,36-Ans
If O<5
Text(44+3O,17," IL RESTE ",O," MANCHES
End
For([théta],1,û3
End
If G
Then
Text(6P+16,63G-48,sub("XO",G,1
1+L1(G->L1(G
For([théta],1,300
End
End
For([théta],1,2
Text(24+6O,63[théta]-48,L1([théta]
End
For([théta],1,300
End
If O<5
Text(44+3O,48,O-P
StorePic 0
Pause
End
Lbl J
ClrDraw
If M
Then
RecallPic 1
Else
For([théta],52,61
Line(-8,[théta],55,[théta]
End
Pxl-Off(0,15
Pxl-Off(9,15
Pxl-Off(0,78
Pxl-Off(9,78
Text(2,17," "+Str0
For([théta],0,48,12
Line(0,[théta],48,[théta]
Line([théta],0,[théta],48
End
Line(1,-1,49,-1
Line(49,-1,49,47
For(A,0,36,12
For(B,0,36,12
Lbl 9
For([théta],2,8,2
Pt-Change(A+[théta],2+B
Pt-Change(2+A+[théta],10+B
Pt-Change(2+A,B+[théta]+2
Pt-Change(A+10,B+[théta]
End
End
End
StorePic 1
1->M
End
Line(54,32,54,16
Line(66,32,66,16
Line(56,14,66,14
Line(67,32,67,15
For([théta],15,33,2
Line(55,[théta],65,[théta]
End
If H=2
Then
Text(29,78," X:",L1(1
Text(39,78," O:",L1(2
End
Fill(0,[A]
randInt(0,3->C
randInt(0,3->D
Fill(0,L2
L2->L3
Ans->L5
.5->L2(1+C
Ans->L2(5+D
If C=D
Then
Ans->L2(9
1->L3(9
End
If C=3-D
Then
.5->L2(10
1->L3(10
End
1->L3(1+C
1->L3(5+D
3->[A](C+1,D+1
12C->A
12D->B
Line(4+A,8+Ans,8+A,8+Ans
Line(6+A,8+Ans,6+A,4+Ans
For(T,0,1
If not(T
Goto 9
End
9->V
Line(-14,19,-6,19
Line(-5,20,-5,26
Line(-15,20,-15,26
Line(-14,27,-6,27
DelVar GDelVar NRepeat N=15 or G
N+1->N
3-J->J
Text(35,10,"J",sub("XO",Ans,1
If L and J=2
Then
seq([théta],[théta],1,10->L4
(4!=L3)+(-1=L2 and 1=L3->L5
For([théta],1,10
L5([théta]
If Ans
Then
If 2=L3([théta]) and 0>L2([théta]) or not(L3([théta]
3
If L3([théta])=1 and 0<L2([théta]
4
If L3([théta])=2 and 0<L2([théta]
5
If L3([théta])=3 and -1.5>=L2([théta]
6
If 2.5<=L2([théta]
7
Ans->L5([théta]
End
End
SortD(L5,L4
L4(1
If Ans<5
Then
DelVar SAns-1->Q
While [A](Q+1,S+1
S+1->S
End
Else
If Ans>8
Then
Ans=10->[théta]
DelVar Q3Ans->S
While [A](Q+1,S+1
Q+1->Q
S+1-2[théta]->S
End
Else
DelVar QAns-5->S
While [A](Q+1,S+1
Q+1->Q
End
End
End
End
Repeat K=105 and not([A](U+1,V+1
If U-C or V-D
Then
For(W,0,1
12U->A
12V->B
For([théta],1,11,10
Line(A+1,[théta]+B,A+11,[théta]+B,W
Line(A+[théta],1+B,A+[théta],B+11,W
End
C->U
D->V
End
End
If L and J=2
Then
69!
If getKey=45
Goto M
DelVar KU+(U<Q)-(U>Q->C
If Ans=U
V+(V<S)-(V>S->D
If S=V and C=Q
105->K
Else
Repeat Ans
getKey->K
End
If Ans=45
Goto M
max(0,min(3,U+(Ans=26)-(K=24->C
max(0,min(3,V+(K=25)-(K=34->D
End
End
J->[A](U+1,V+1
If J=2
Then
For(W,4,8,4
Line(5+A,W+B,7+A,W+B
Line(W+A,5+B,W+A,7+B
End
Else
Line(A+4,B+4,A+8,B+8
Line(A+4,B+8,A+8,B+4
End
For(T,0,1
If not(T
Goto 9
End
2J-3+L2(U+1->L2(U+1
1+L3(U+1->L3(U+1
2J-3+L2(V+5->L2(V+5
1+L3(V+5->L3(V+5
If U=V
Then
2J-3+L2(9->L2(9
1+L3(9->L3(9
End
If U=3-V
Then
2J-3+L2(10->L2(10
1+L3(10->L3(10
End
J(max(L2=-2.5) or 3.5<=max(abs(L2->G
End
Lbl 7
For([théta],0,3
Horizontal 28+[théta]
Horizontal 27-[théta]
69!
End
If G
Then
sub("XO",G,1)+" GAGNE!
Else
"EGALITE...
End
Text(31,34," "+Ans
Pause
End
Lbl M
105->K
Ans->P
Fill(0,[A]
1->G
End
End
End
End
End
Lbl 0
If M
Then
ClrDraw
RecallPic 1
Text(2,18," PRESS A KEY
DelVar A-1->B
For([théta],1,16
B=2 and [théta]-16->W
B+1-3Ans->B
A+W->A
Text(16+12A+randInt(-1,1),28+12(B+(A=1))+randInt(-1,1),sub(Str0,[théta],1
[théta]+max([théta]={3,7,11->[théta]
For(D,1,300
End
getKey->K
If Ans
20->[théta]
End
Text(57,72," K
While not(Ans
getKey
End
End
ClrDraw
ClrHome
DelVar [A]DelVar Str0DelVar Pic0DelVar Pic1ClrAllLists
Output(1,1,"
Pour finir, je vous met un petit screen:
Nb: ici vous pouvez trouver le programme présenté par Wistaro pour ce même concours.
Dernière édition par m@thieu41 le Dim 2 Mar 2014 - 18:10, édité 1 fois