begin process at 2012 05 27 20:15:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > JEUX DU MORPION EN CONSOLE

JEUX DU MORPION EN CONSOLE


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Jeux Classé sous :morpion, jeux, grille, algo Niveau :Débutant Date de création :30/03/2010 Vu / téléchargé :5 066 / 216

Auteur : thebroyeur

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec une capture ALGORITHME DE MAURICE KRAITCHIK (1882&#65533;1957)
Source avec Zip TRANSFORMER UN ENTIER EN DEUX NOMBRES COMPOSÉ DES MEMES CHIF...

 Sources de la même categorie

Source avec Zip Source avec une capture JEU DES CARTES par eapaceinfo
PROGRAMME DE JEU DE MPT par KerizGarmm
Source avec Zip Source avec une capture JEUX SERPENT par antho974
Source avec Zip Source avec une capture PENDU EN SDL par Damsou91
Source avec Zip STATE MACHINE MODIFICATION MATH BUCKHAM par billybones79

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture JEUX SERPENT par antho974
Source avec Zip Source avec une capture BEAT DETECTION par barsichou
Source avec Zip Source avec une capture BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR U... par envi33
GÉRER UN COMBAT DANS UN JEU 2D / ALGORITHME PRIMAIRE D'UNE I... par Chiheb2010
Source avec Zip Source avec une capture SUDOKU NIVEAU FACIL, MOYEN DIFFICILE (GOOGLE) PAS AU PLUS par cool2source

Commentaires et avis

Commentaire de jedinos le 10/04/2010 19:13:30 9/10

Salut thebroyeur!

Ton code est très bien commenté, même un petit peu trop à mon gout ( abrège tes commentaires ), les noms des variables sont claires, tu ne fais pas un mélange de C et de C++ comme pleins de personnes: tu créés un type de variable boolean qui ait bien pensé!

Ton adaptation du morpion est très bien, beaucoups mieux de celui d'un type sur un forum.

9/10 car je trouve que c'est super mais je ne t'es pas mis 10/10 car il y a trop de commentaires ( -0.25 ), quelques fautes d'ortho ( -0.25 ) et encore -0.5 car je suis sur que tu aurais pu faire des if/else if moins gros ( grands ).

Bravo et continue ainsi!

 Ajouter un commentaire


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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,780 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales