Accueil > > > JEUX DU MORPION EN CONSOLE
JEUX DU MORPION EN CONSOLE
Information sur la source
Description
Programme de morpion. Le jeu s'arrete qd l'un des joueurs a gagne (ie 3 pions semblables sur une ligne, colonne ou diagonale) ou qd la grille est pleine.
Source
- /*********************************************************************
- Programme de morpion. Le jeu s'arrete qd l'un des joueurs a gagne
- (ie 3 pions semblables sur une ligne, colonne ou diagonale) ou qd
- la grille est pleine.
-
- **********************************************************************/
- #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]; /* grille du morpion valeurs possibles VIDE, ROND ou CROIX */
-
- /* indique quel sera le prochain joueur a mettre un pion dans la grille ie soit ROND soit CROIX */
- static int prochainJoueur = ROND;
-
- /*
- * Initiliase la grille du morpion a vide
- */
- 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 */
- }
- }
-
- /*
- Saisie les coordonnees du nouveau pion a mettre sur la grille
- Si les coordonnees sont en dehors de la grille ou si la case possede
- deja un pion, la saisie est refusee, un message d'erreur est affichee,
- et le joueur doit rejoue
- */
- 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);
- }
-
- /* Teste si l'un des joueurs a gagne (ligne, colonne ou diagonale remplit
- de pions semblables). Dans ce cas affiche un message pour indiquer le
- joueur qui a gagne.
- S'il n'y a pas de gagnant, teste que la grille n'est pas pleine. Si elle
- est pleine, affiche un message indiquant qu'aucun des joueurs a gagne
- Retourne TRUE si la grille est pleine ou si un joueur a gagne
- FALSE sinon
- */
- Boolean testeFinJeu() {
- int i,j;
- int joueurGagnant; /* pour connaitre quel est le gagnant ie soit CROIX soit ROND */
- Boolean estFini = FALSE;
-
- /* Teste s'il y a un gagnant */
- /* L'algorithme utilise est le plus facile mais n'est pas le plus efficace
- car on n'utilise pas la position du dernier pion ajoute sur la grille. Cette information
- permettrait de reduire le temps de la recherche.
- De plus, cet algo suppose que la taille de la matrice est de 3 par 3
- */
- /* si la case 1,1 est VIDE, cela signifie que les diagonales, la ligne 1 et la colonne 1 ne sont
- pas gagnantes
- */
- 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;
- }
- }
-
- /* si la case 2,2 est vide, cela signifie que la ligne 2 et la colonne 2 ne sont gagnantes */
- 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;
-
- }
-
- /*
- Initialise la grille a vide puis tant que la grille n'est pas pleine ou
- qu'il n'y a pas un gagnant, saisie les pions des joueurs et affiche la grille
- */
- int main() {
- initialiseGrille();
- do {
- metUnPionSurLaGrille();
- afficheGrille();
- }while(!testeFinJeu());
- return 1;
- }
-
-
-
-
/*********************************************************************
Programme de morpion. Le jeu s'arrete qd l'un des joueurs a gagne
(ie 3 pions semblables sur une ligne, colonne ou diagonale) ou qd
la grille est pleine.
**********************************************************************/
#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]; /* grille du morpion valeurs possibles VIDE, ROND ou CROIX */
/* indique quel sera le prochain joueur a mettre un pion dans la grille ie soit ROND soit CROIX */
static int prochainJoueur = ROND;
/*
* Initiliase la grille du morpion a vide
*/
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 */
}
}
/*
Saisie les coordonnees du nouveau pion a mettre sur la grille
Si les coordonnees sont en dehors de la grille ou si la case possede
deja un pion, la saisie est refusee, un message d'erreur est affichee,
et le joueur doit rejoue
*/
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);
}
/* Teste si l'un des joueurs a gagne (ligne, colonne ou diagonale remplit
de pions semblables). Dans ce cas affiche un message pour indiquer le
joueur qui a gagne.
S'il n'y a pas de gagnant, teste que la grille n'est pas pleine. Si elle
est pleine, affiche un message indiquant qu'aucun des joueurs a gagne
Retourne TRUE si la grille est pleine ou si un joueur a gagne
FALSE sinon
*/
Boolean testeFinJeu() {
int i,j;
int joueurGagnant; /* pour connaitre quel est le gagnant ie soit CROIX soit ROND */
Boolean estFini = FALSE;
/* Teste s'il y a un gagnant */
/* L'algorithme utilise est le plus facile mais n'est pas le plus efficace
car on n'utilise pas la position du dernier pion ajoute sur la grille. Cette information
permettrait de reduire le temps de la recherche.
De plus, cet algo suppose que la taille de la matrice est de 3 par 3
*/
/* si la case 1,1 est VIDE, cela signifie que les diagonales, la ligne 1 et la colonne 1 ne sont
pas gagnantes
*/
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;
}
}
/* si la case 2,2 est vide, cela signifie que la ligne 2 et la colonne 2 ne sont gagnantes */
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;
}
/*
Initialise la grille a vide puis tant que la grille n'est pas pleine ou
qu'il n'y a pas un gagnant, saisie les pions des joueurs et affiche la grille
*/
int main() {
initialiseGrille();
do {
metUnPionSurLaGrille();
afficheGrille();
}while(!testeFinJeu());
return 1;
}
Conclusion
Si vous avez une question n'hésiter pas à la poser.J'attend vos commentaire!! ;)
Thebroyeur
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
jeux Morpion - puissances 4 [ par Lisandrelegrand ]
Salut, je cherche un jeux de Morpion ou de puissances 4 en langague C comprenant le chainage avant-arriere (systeme expert AI) Merci pour votre aide.
Morpion [ par Lisandrelegrand ]
hello! je cherche un jeu de morpion en utilisant -> un système expert intégrant un moteur d’inférences utilisant des règles d’ordre 0.(sans utilser un
Comment les jeux récents font-il pour avoir plus de 8 lumières en même temps? [ par envi33 ]
Bonjour! Je suis en train de me faire un petit jeux 3D maison, et j'essaye de me sortir de la galère des 8 lumières : si je met un spot sur chaque zo
[Qt]Jeux similaire à Zelda en multijoueur [ par Neckara ]
Bonjour, Je voudrais créer un petit jeux avec Qt constitué de donjons jouable de 1 à 4 joueurs. On se déplace à travers différentes salles nécessitan
Programmation jeux en C++ [ par GhadaAngie ]
Salut j'ai un projet en classe qui nous demande de faire une simulation du jeux de Morpion (Tic Tac Toe) en C++ le plus simple possible si vous pouvez
Jeu sur console [ par hdx75 ]
Bonjour je suis en seconde et je débute en C Je dois faire un jeu sur console sous forme de tableau 10x10 du genre jewels où il faut faire des groupes
programmation des jeux avec C++ [ par sacar ]
salut,j'ai besoin des cours sur la programmation des jeux vedeo avec C/C++ svp [^^happy13] ou des conseils pour les débutant dans ce domaine et merci
algo [ par jakpot ]
[^^happy17]Slt a tous.... On me di d'ecrire un algo qui permet d'afficher un message aux veterants de plus de 100ans a partir de la saisi leur annee d
bsr je cherche un code de jeux sudoko avec c [ par sassi1985 ]
bsr je cherche un code de jeux sudoko avec c
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|