1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
| #include <stdio.h>
#define NB_LIG 3
#define NB_COL 3
typedef enum {VIDE, ROND, CROIX} ValeurGrille;
typedef enum {FALSE, TRUE} Boolean;
static ValeurGrille grille[NB_LIG][NB_COL];
static int prochainJoueur = ROND;
void initialiseGrille() {
int i, j;
for (i=0; i<NB_LIG; i++) {
for (j=0; j<NB_COL; j++) {
grille[i][j] = VIDE;
}
}
}
/*
Affiche la grille du morpion
_ indique case vide, O pion joueur 1 et X pion jour 2
*/
void afficheGrille() {
int i, j;
for (i=0; i<NB_LIG; i++) {
for (j=0; j<NB_COL; j++) {
switch (grille[i][j]) {
case VIDE:
printf("_ ");
break;
case ROND:
printf("O ");
break;
case CROIX:
printf("X ");
break;
}
}
printf("\n"); /* fin de la ligne */
}
}
void metUnPionSurLaGrille() {
int ligne, col;
Boolean saisieCorrecte = FALSE;
printf("Numeros de ligne et de colonne: ");
do {
scanf("%d %d", &ligne, &col);
printf("\n");
if ((ligne > 0) && (ligne <= NB_LIG) && (col > 0) && (col <= NB_COL)) {
ligne--; /* enleve 1 pour etre compatible avec le tableau ayant des
indices de 0 a NB_LIG-1 */
col--;
if (grille[ligne][col] != VIDE)
printf("Cette case a deja ete remplie. Veuillez recommencer: \n");
else {
saisieCorrecte = TRUE;
grille[ligne][col] = (ValeurGrille)prochainJoueur;
if (prochainJoueur == ROND)
prochainJoueur = CROIX;
else
prochainJoueur = ROND;
}
} else
printf("Indice de ligne ou de colonne incorrect. Veuillez recommencer:\n");
} while (!saisieCorrecte);
}
Boolean testeFinJeu() {
int i,j;
int joueurGagnant; /* pour connaitre quel est le gagnant ie soit CROIX soit ROND */
Boolean estFini = FALSE;
if (grille[1][1] != VIDE) {
if (/* colonne 1 */ ((grille[0][1] == grille[1][1]) && (grille[1][1] == grille[2][1])) ||
/* ligne 1 */ ((grille[1][0] == grille[1][1]) && (grille[1][1] == grille[1][2])) ||
/* diagonale */ ((grille[0][0] == grille[1][1]) && (grille[1][1] == grille[2][2])) ||
/* autre diag */ ((grille[0][2] == grille[1][1]) && (grille[1][1] == grille[2][0]))) {
joueurGagnant = grille[1][1]; /* ie ROND ou CROIX */
estFini = TRUE;
}
}
si la case 0,0 est vide, cela signifie que la ligne 0 et le colonne 0 ne sont pas gagnantes */
if ((!estFini) && (grille[0][0] != VIDE)) {
if ( /* ligne 0 */ ((grille[0][0] == grille[0][1]) && (grille[0][1] == grille[0][2])) ||
/* colonne 0*/ ((grille[0][0] == grille[1][0]) && (grille[1][0] == grille[2][0]))) {
joueurGagnant = grille[0][0];
estFini = TRUE;
}
}
if ((!estFini) && (grille[2][2] != VIDE)) {
if ( /* ligne 2 */ ((grille[2][0] == grille[2][1]) && (grille[2][1] == grille[2][2])) ||
/* colonne 2 */ ((grille[0][2] == grille[1][2]) && (grille[1][2] == grille[2][2]))) {
joueurGagnant = grille[2][2];
estFini = TRUE;
}
}
if (estFini) {
printf("Felicitations au joueur ayant les ");
if (joueurGagnant == ROND)
printf("ronds ");
else
printf("croix ");
printf("qui a gagne.\n");
return TRUE;
}
/* teste si la grille n'est pas pleine */
for (i=0; i<NB_LIG; i++) {
for (j=0; j<NB_COL; j++) {
if (grille[i][j] == VIDE) /* Au moins une case est vide donc le jeu n'est pas fini */
return FALSE;
}
}
return TRUE;
}
int main() {
initialiseGrille();
do {
metUnPionSurLaGrille();
afficheGrille();
}while(!testeFinJeu());
return 1;
} |
Partager