Se connecter / S'enregistrer
Votre question

Jeu Tic-Tac-Toe : comment modifier le programme ?

Tags :
  • Jeux
  • Programmation
Dernière réponse : dans Programmation
8 Décembre 2012 21:42:24

svp j'ai un probléme dans le programme de jeux de tic tac toe ,j'ai pas pu trouver une bonne solution.c'est l'ennonce:
Écrire un programme en langage C qui permet de simuler le jeu du Tic-Tac-Toe tel que décrit précédemment.
On considère que la grille est représentée par une matrice dont les dimensions sont 3*3.
Le programme doit permettre de :
1. Proposer le menu suivant :
Tic-Tac-Toe
1. Jouer Un contre Un
2. Jouer contre l'Ordinateur
3. Quitter
Selon le choix de l'utilisateur, le jeu se déroule soit entre deux utilisateurs, soit entre un utilisateur et le PC.
2. Saisir les noms des deux joueurs, le nom de l'ordinateur est, par défaut, « PC ».
3. Choisir le symbole de chaque joueur avant d’entamer le jeu. Les symboles disponibles sont X et O.
4. Afficher la grille de jeu après chaque coup (initialement les cases sont vides)
5. Cocher à tour de rôle une case de la matrice en indiquant les coordonnées de la case (numéro de ligne et de colonne) : Uniquement une case vide peut être cochée.
Dans le cas où l’adversaire est l’ordinateur, une case vide est cochée aléatoirement (au hasard)
mer66 d'avance :) 

Autres pages sur : jeu tic tac toe modifier programme

a b L Programmation
9 Décembre 2012 14:55:20

Je connais la solution, mais j'ai pas pu trouver comment le dire, désolé.
a b L Programmation
9 Décembre 2012 15:33:50

Bonjour,

Voila un code que j'ai fais il y a quelque année, enfin juste l'IA...

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Morpion.Classes
  7. {
  8. class IA_verif
  9. {
  10. protected int[] tableau = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  11. private int vide;
  12.  
  13. public int[] Tableau
  14. {
  15. get { return tableau; }
  16. set { tableau = value; }
  17. }
  18.  
  19.  
  20. public int IA(int player)
  21. {
  22. int retour ;
  23.  
  24. // IA joue pour gagner !
  25. retour = IA_piont(player);
  26. if (retour != 100)
  27. return retour;
  28.  
  29. // IA joue pour ce defendre !
  30. if (player == 1)
  31. player = 2;
  32. else
  33. player = 1;
  34.  
  35. retour = IA_piont(player);
  36. if (retour != 100)
  37. return retour;
  38.  
  39. int rand;
  40. do
  41. {
  42. Random rndnombre = new Random();
  43. rand = rndnombre.Next(9);
  44. } while (Tableau[rand] != 0);
  45.  
  46. return rand;
  47. }
  48.  
  49. private int IA_piont(int player)
  50. {
  51. if (Tableau[0] == player && Tableau[4] == player && Tableau[8] == 0)
  52. return 8;
  53. if (Tableau[4] == player && Tableau[8] == player && Tableau[0] == 0)
  54. return 0;
  55. if (Tableau[0] == player && Tableau[8] == player && Tableau[4] == 0)
  56. return 4;
  57.  
  58. if (Tableau[2] == player && Tableau[4] == player && Tableau[6] == 0)
  59. return 6;
  60. if (Tableau[4] == player && Tableau[6] == player && Tableau[2] == 0)
  61. return 2;
  62. if (Tableau[2] == player && Tableau[6] == player && Tableau[4] == 0)
  63. return 4;
  64.  
  65. for (int i = 0; i < 3; i++)
  66. {
  67. if (Tableau[i] == player && Tableau[i + 3] == player && Tableau[i + 6] == 0)
  68. return i + 6;
  69. if (Tableau[i] == player && Tableau[i + 6] == player && Tableau[i + 3] == 0)
  70. return i + 3;
  71. if (Tableau[i + 3] == player && Tableau[i + 6] == player && Tableau[i] == 0)
  72. return i;
  73. }
  74.  
  75. for (int i = 0; i < 9; i += 3)
  76. {
  77. if (Tableau[i] == player && Tableau[i + 1] == player && Tableau[i + 2] == 0)
  78. return i + 2;
  79. if (Tableau[i] == player && Tableau[i + 2] == player && Tableau[i + 1] == 0)
  80. return i + 1;
  81. if (Tableau[i + 1] == player && Tableau[i + 2] == player && Tableau[i] == 0)
  82. return i;
  83. }
  84.  
  85. // si l'IA ne peut pas gagner return 100 ;
  86. return 100;
  87. }
  88.  
  89. public bool verif(int player)
  90. {
  91. for (int i = 0; i < 3; i++)
  92. {
  93. if (tableau[i] == player && tableau[i + 3] == player && tableau[i + 6] == player)
  94. return true;
  95. }
  96. for (int i = 0; i < 9; i += 3)
  97. {
  98. if (tableau[i] == player && tableau[i + 1] == player && tableau[i + 2] == player)
  99. return true;
  100. }
  101. if (tableau[0] == player && tableau[4] == player && tableau[8] == player)
  102. return true;
  103. if (tableau[2] == player && tableau[4] == player && tableau[6] == player)
  104. return true;
  105.  
  106. return false;
  107. }
  108.  
  109. public bool verif_plien()
  110. {
  111. vide = 0;
  112. for (int i = 0; i < 9; i++)
  113. {
  114. if (tableau[i] == 0)
  115. vide++;
  116. }
  117. if (vide == 0)
  118. return true;
  119.  
  120. return false;
  121. }
  122. }
  123. }



Bon d'un coter c'est du C# et pas du c, et puis dans ton sujet ya écrie que ton ia doit jouer aléatoirement ^^
Contenus similaires
13 Décembre 2012 00:43:10

mer666 pour votre aide mais j'ai besoin d'une solution sans l'utilisation ni des fonctions ni des procédures
a b L Programmation
13 Décembre 2012 18:24:39

XD, tu crois que l'on a essayer de t'apporter des solution ?
Ici c'est un forum d'entraide .... poste deja ce que tu a fais et on t'aideras, mais une chose est sur c'est que personne ne viendras te poster un code deja tous fais !
a b L Programmation
13 Décembre 2012 19:50:34

Je transforme cette question en post forum ... et post ce que tu a déjà fais , dit nous exactement la ou tu bloc ...
c'est pas bien compliquer , je suis sur que tu bloc sur de l'algo pas sur le code en lui même ...
13 Décembre 2012 19:35:01

je sais b1 sur mais j'ai perdu l'espoir de trouver une solution pr ce probléme j'ai essaye tt mais rien

:/ 
a b L Programmation
13 Décembre 2012 22:42:54

Tu ne mets pas une seule ligne de code, donc tu n'as rien essayé.
13 Décembre 2012 23:21:10

nn j'ai essayé,mais le probleme est dans case 2 contre ordinateur et le saisie aléatoire
a b L Programmation
17 Décembre 2012 21:24:34

heuu ouai , et si tu nous montrer ce que tu a déjà fais ?!? peut être que l'on pourrais te donner des piste pour que tu puisse continuer !!!


(Et si tu continue a y mètre de la mauvaise volonté, je vais finir par fermer le poste ... ont est la pour t'aider par pour faire t'es devoir ! )
17 Décembre 2012 22:45:39

  1. int main(int argc, char *argv[])
  2. {
  3.  
  4. /* Loop counter */
  5. char prenomJ1[15];//pour enregistrer les nom des joueurs
  6. char prenomJ2[15];//pour enregistrer les nom des joueurs
  7. int i = 0;
  8. int j;
  9. char s1,s2;
  10. char x;
  11. char y;
  12. int go1;
  13. int go2;
  14. int joueur = 0;
  15. int choix; /* Player number - 1 or 2 */
  16. int go = 0; /* Square selection number for turn */
  17. int row = 0; /* Row index for a square */
  18. int column = 0; /* Column index for a square */
  19. int line = 0; /* Row or column index in checking loop */
  20. int gagnant = 0; /* The winning player */
  21. char board[3][3] = { /* The board */
  22. {' ',' ',' '}, /* Initial values are reference numbers */
  23. {' ',' ',' '}, /* used to select a vacant square for */
  24. {' ',' ',' '} /* a turn. */
  25. };
  26. printf("------------tic tac toe--------------");
  27. printf("\n\n\n(1) Jouer un conte un \n(2) jouer contre l'odinateur\n(3) Quitter\n\n");
  28. scanf("%d", &choix);
  29. switch (choix){
  30. case 1 :
  31. /* The main game loop. The game continues for up to 9 turns */
  32. printf("\n\nEntrez le nom du premier joueur :\n");
  33. scanf("%s", prenomJ1);
  34. printf("\n\nEntrez le nom du deuxieme joueur :\n");
  35. scanf("%s", prenomJ2);
  36. do{
  37. printf("\n\n saisir le symbole pour le premier joueur ('X'ou'0') \n");
  38. scanf("%c",&s1);}
  39. while((s1!='X')&&(s1!='O')&&(s1!='x')&&(s1!='o'));
  40. //x==s1;
  41. if(s1=='X' || s1=='x')
  42. s2='O';
  43. else
  44. s2='X';
  45. /*for( i = 0; i<3; i++)
  46. for(j=0; j<3; j++)
  47. {*/
  48. //}
  49. printf("\n\n");
  50. printf(" %c | %c | %c\n", board[0][0], board[0][1], board[0][2]);
  51. printf("---+---+---\n");
  52. printf(" %c | %c | %c\n", board[1][0], board[1][1], board[1][2]);
  53. printf("---+---+---\n");
  54. printf(" %c | %c | %c\n", board[2][0], board[2][1], board[2][2]);
  55. //for (i=0;i<=3;i++)
  56. for(j=0;j<=8;j++){
  57. joueur = j%2+1;
  58. do
  59. {
  60. printf("\n joueur n %d veuillez entrer les coordonnées de la case ",joueur);
  61. scanf("%d %d", &go1,&go2);
  62. //row==board[go1][go2];
  63. //column ==board[go1][go2];
  64.  
  65. }while(go1>3 || go2>3 || go1<0 || go2<0 || board[go1][go2]!=' ');
  66. if(joueur==1)
  67. {
  68. board[go1][go2]=s1;
  69. }
  70. else
  71. {
  72. board[go1][go2]=s2;
  73. }
  74. /* if ((s1=='x')||(s1=='X'))
  75. {board[row][column] = (joueur == 1) ? 'X' : 'O';}
  76. else{board[row][column] = (joueur == 1) ? 'O' : 'X';}*/
  77. /* Insert player symbol */
  78.  
  79. /* Check for a winning line - diagonals first */
  80. printf("\n\n");
  81. printf(" %c | %c | %c\n", board[0][0], board[0][1], board[0][2]);
  82. printf("---+---+---\n");
  83. printf(" %c | %c | %c\n", board[1][0], board[1][1], board[1][2]);
  84. printf("---+---+---\n");
  85. printf(" %c | %c | %c\n", board[2][0], board[2][1], board[2][2]);
  86.  
  87. if((board[0][0]!=' ' && board[0][0] == board[1][1] && board[0][0] == board[2][2]) ||
  88. (board[0][2]!=' ' && board[0][2] == board[1][1] && board[0][2] == board[2][0]))
  89. gagnant = joueur;
  90. else
  91. /* Check rows and columns for a winning line */
  92. for(line = 0; line <= 2; line ++)
  93. if((board[line][0]!=' ' && board[line][0] == board[line][1] && board[line][0] == board[line][2])||
  94. (board[0][line]!=' ' && board[0][line] == board[1][line] && board[0][line] == board[2][line]))
  95.  
  96. {
  97. gagnant = joueur;
  98. break;
  99. }
  100. if (gagnant!=0)
  101. break;
  102. }
  103. /* Game is over so display the final board */
  104. printf("\n\n");
  105. printf(" %c | %c | %c\n", board[0][0], board[0][1], board[0][2]);
  106. printf("---+---+---\n");
  107. printf(" %c | %c | %c\n", board[1][0], board[1][1], board[1][2]);
  108. printf("---+---+---\n");
  109. printf(" %c | %c | %c\n", board[2][0], board[2][1], board[2][2]);
  110.  
  111. /* Display result message */
  112. if(gagnant == 0){
  113. printf("\npartie nulle \n");}
  114. else{
  115. printf("\n félicitation , joueur %d, c'est vous le gagnant\n", gagnant);}
  116. case 2:
  117.  
  118. #define TRUE 1
  119. #define FALSE 0
  120.  
  121. void dessine_plateau (int plateau[][3]) {
  122. int i=0,j=0;
  123.  
  124. printf ("\n-------\n");
  125. for (i=0;i<3;i++) {
  126. for (j=0;j<3;j++) {
  127. printf("|");
  128.  
  129. switch(plateau[i][j]) {
  130. case 0:
  131. printf(" ");
  132. break;
  133. case 1:
  134. printf("O");
  135. break;
  136. case 2:
  137. printf("X");
  138. break;
  139. }
  140. }
  141. printf ("|\n");
  142. printf ("-------\n");
  143. }
  144. }
  145.  
  146. int fin_jeu (int plateau[][3]) {
  147. int i=0,j=0;
  148.  
  149. for (i=0;i<3;i++) {
  150. for (j=0;j<3;j++) {
  151. if (plateau [i][j]==0) {
  152. return FALSE;
  153. }
  154. }
  155. }
  156. return TRUE;
  157. }
  158.  
  159. int saisie_donnee (char *invite) {
  160. int valeur;
  161.  
  162. do {
  163. printf ("%s", invite);
  164. scanf ("%d",&valeur);
  165. } while (( valeur <1) || (valeur >3));
  166.  
  167. return (valeur);
  168. }
  169.  
  170. int gagne (int plateau[][3]) {
  171. int i=0;
  172.  
  173. // Test sur les lignes
  174. for ( i=0; i<3; i++) {
  175. if (( plateau[i][0] >0) && ( plateau[i][0] == plateau[i][1] ) && ( plateau[i][1] == plateau[i][2] )) {
  176. puts ("GAGNE");
  177. return TRUE;
  178. }
  179. }
  180.  
  181. // Test sur les colonnes
  182. for ( i=0; i<3; i++) {
  183. if (( plateau[0][i] >0) && ( plateau[0][i] == plateau[1][i] ) && ( plateau[1][i] == plateau[2][i] )) {
  184. puts ("GAGNE");
  185. return TRUE;
  186. }
  187. }
  188.  
  189. // Test sur les diagonales
  190. if (( plateau[0][0] >0) && ( plateau[0][0] == plateau[1][1] ) && ( plateau[1][1] == plateau[2][2] )) {
  191. puts ("GAGNE");
  192. return TRUE;
  193. }
  194.  
  195. // Test sur les diagonales
  196. if (( plateau[0][2] >0) && ( plateau[0][2] == plateau[1][1] ) && ( plateau[1][1] == plateau[2][0] )) {
  197. puts ("GAGNE");
  198. return TRUE;
  199. }
  200.  
  201. return FALSE;
  202. }
  203.  
  204. void jeu (int plateau[][3], int joueur) {
  205. int pos_x=0,pos_y=0;
  206. int correct=FALSE;
  207.  
  208. do {
  209. printf ("Joueur %d\n",joueur);
  210. pos_x= saisie_donnee ("Ligne : ");
  211. pos_y= saisie_donnee ("Colonne : ");
  212.  
  213. if ( plateau[pos_x-1][pos_y-1]>0 ) {
  214. printf ("Case occupée !\n");
  215. } else {
  216. plateau[pos_x-1][pos_y-1]=joueur;
  217. correct=TRUE;
  218. }
  219. }
  220. while (! correct);
  221.  
  222. dessine_plateau (plateau);
  223. }
  224.  
  225. int main () {
  226. int plateau [3][3];
  227. int joueur=1;
  228.  
  229. // la fonction memset permet d'initialiser chacun
  230. // des octets d'une zone donnée avec une valeur
  231. // déterminée (ici: 0)
  232. memset (plateau, 0, 9*sizeof (int));
  233.  
  234. dessine_plateau (plateau);
  235.  
  236. do {
  237. jeu (plateau, joueur);
  238. if ( joueur==1 ) {
  239. joueur=2;
  240. } else {
  241. joueur=1;
  242. }
  243. }
  244. while (( !gagne (plateau)) );
  245.  
  246. return 0;
  247. }
  248.  
  249.  
  250. return 0;
  251. }

a b L Programmation
18 Décembre 2012 10:08:23

O_o .....................

Citation :
j'ai besoin d'une solution sans l'utilisation ni des fonctions ni des procédures



dans ton code, il y a deux main, il y a des fonction et des procédures ... commence par relire ton cours !

ensuite, découpe ton jeux en action qui vont devoir être répéter plusieurs fois ( ou pas )
( ex : "faire jouer joueur x", "verification gagner", ect ) , puis tu fais une fonction une action ( un procédure étant une fonction qui ne retourne rien on vas faire un abus de langage et appeler ça aussi une fonction !!! )

et ton main tu doit le faire en dernier !
il ne doit contenir que des appel a t'es fonction !

pour le rand , tu doit inclure time.h

ensuite srand(time(NULL)); au début de ton code, et tu peut obtenir un nombre aléatoire avec rand(); => google pour plus d'info !

( et pour jouer aléatoirement , tu fais deux rand et tu regarde dans ton tableau si a la position x,y tu peut jouer , si non tu rerand une nouvelle position !
a c 232 L Programmation
18 Décembre 2012 20:43:43

Il a surtout fait un copier/coller d'un truc tout fait qu'il comprend pas
a b L Programmation
18 Décembre 2012 22:10:12

Tu boucles sur toutes les cases en incrémentant un compteur sur les cases vides, et ça te donne n le nombre de cases vides.
Avec la fonction rand(), tu cherches un nombre i compris entre 0 et n (inclus) où n est le nombre de cases vides.
Tu refais la boucle précédente jusqu'à trouver la i-ème case vide, et l'ordinateur y pose son jeton.

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS