begin process at 2012 05 27 18:46:48
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > MORPION EN C

MORPION EN C


 Information sur la source

Note :
Aucune note
Catégorie :Jeux Niveau :Débutant Date de création :10/06/2002 Date de mise à jour :21/06/2002 23:02:14 Vu / téléchargé :6 038 / 346

Auteur : Cal

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Morpion pour 2 joueurs humains, en mode texte (pas top d'ailleurs...)
Merci cmarsc pour m'avoir aidé à optimiser le code  

Source

  • ******************Morpion*********************
  • //Morpion en mode texte
  • //Mon premier (vrai) programme !!
  • //Ecrit par Cal en 2002
  • #include <stdio.h>
  • #include <conio.h>
  • extern int grille[3][3] = {0}; //Grille du morpion
  • extern int cases[3][3] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; //Pour faire son choix...
  • extern int ok = 0; //Flag pour erreur
  • extern int v = 0; //Vainqueur
  • void AFFICHE(int *tableau) //Affiche un tableau [3][3] avec l'aide de pointeurs
  • {
  • int i;
  • for(i = 0; i < 9; i++)
  • {
  • if(!(i%3)) //Pour aller à la ligne tout les 3 éléments
  • printf("\n\n");
  • tableau += i;
  • printf("%d\t", *tableau);
  • tableau -= i;
  • }
  • printf("\n\n");
  • return;
  • }
  • int VERIF_CASE(int *pgrille) //Pour vérifier si la case n'est pas déjà prise
  • {
  • if(*pgrille)
  • {
  • clrscr();
  • AFFICHE(pgrille);
  • printf("\nCase d\x82j\x85 prise !\n");
  • ok = 0;
  • }
  • else
  • ok = 1;
  • return ok;
  • }
  • void MESSAGE_ERREUR(void)
  • {
  • printf("\n\nTu t'es plant\x82 quelque part ! Recommence :\n\n");
  • return;
  • }
  • int VERIF_VAINQUEUR(int joueur)
  • {
  • int c0, c1, c2, c3, c4, c5, c6, c7, c8;
  • c0 = grille [0][0];
  • c1 = grille [0][1];
  • c2 = grille [0][2];
  • c3 = grille [1][0];
  • c4 = grille [1][1];
  • c5 = grille [1][2];
  • c6 = grille [2][0];
  • c7 = grille [2][1];
  • c8 = grille [2][2];
  • if(((c0 && c1 && c2) && (c0 + c1 + c2 == 3*(joueur))) ||
  • ((c3 && c4 && c5) && (c3 + c4 + c5 == 3*(joueur))) ||
  • ((c6 && c7 && c8) && (c6 + c7 + c8 == 3*(joueur))) ||
  • ((c0 && c3 && c6) && (c0 + c3 + c6 == 3*(joueur))) ||
  • ((c1 && c4 && c7) && (c1 + c4 + c7 == 3*(joueur))) ||
  • ((c2 && c5 && c8) && (c2 + c5 + c8 == 3*(joueur))) ||
  • ((c0 && c4 && c8) && (c0 + c4 + c8 == 3*(joueur))) ||
  • ((c2 && c4 && c6) && (c2 + c4 + c6 == 3*(joueur)))))
  • //Vérifie si chaque ligne ou chaque diagonale est égale à 3 ou 6 suivant le numero du joueur
  • //Mais il ne faut pas de 0 car 1 + 2 + 0 = 3
  • {
  • printf("\n\nLe joueur %d \x85 gagn\x82 !\n\n",(joueur));
  • v = 1;
  • }
  • return v;
  • }
  • void jeux_morpion(void)
  • {
  • int *pgrille = &grille; //Pointeur pour selectionner la case choisie par le joueur
  • int *pcases = &cases; //Pointeur pour afficher le tableau "cases"
  • int c0, c1, c2, c3, c4, c5, c6, c7, c8; //Cases
  • int x; //Selections des joueurs
  • int i, j; //Pour afficher les tableaux
  • int c; //Compteur de coups
  • int score1 = 0;
  • int score2 = 0;
  • char selection;
  • printf("\n*********************MORPION*********************\n\n");
  • printf("Ecrit par u Cal en 2002\n\n");
  • printf("*************************************************\n\n");
  • printf("Grille : 0 -> Case vide\n");
  • printf(" 1 -> Case jou%ce par le joueur 1\n", 130);
  • printf(" 2 -> Case jou%ce par le joueur 2\n", 130);
  • start: v = 0;
  • for(i = 0; i < 3; i++) //Re-initialisation de la grille pour les nouvelles parties
  • {
  • for(j = 0; j <3; j++)
  • grille[i][j] = 0;
  • }
  • for(c = 1; c < 9; c += 2) //Si les 9 coups n'ont pas été joués (en fait ça s'arrete au 8e,
  • //mais si un joueur arrive au 9e coup, c'est un match nul)
  • {
  • do
  • {
  • printf("\n\n\nJoueur 1: entrez votre case : (0 - 8)\n");
  • printf("\nCases : ");
  • AFFICHE(pcases);
  • printf("Votre case = ");
  • scanf("%d", &x);
  • if ((x >= 0) && (x <= 8)) //Si x est un chiffre entre 0 et 8
  • {
  • pgrille += x; //Positionnement dans la case du tableau choisie
  • VERIF_CASE(pgrille);
  • if(ok) //Assigne la valeur 1 si la case n'est pas déjà prise
  • *pgrille = 1;
  • pgrille -= x; //Reviens au debut du tableau
  • }
  • else
  • MESSAGE_ERREUR();
  • }
  • while (!ok);
  • clrscr();
  • printf("Grille : ");
  • AFFICHE(pgrille);
  • VERIF_VAINQUEUR(1);
  • if(v) //Si il y a un vainqueur
  • {
  • score1++;
  • printf("\n\nScore du joueur 1 : %d", score1);
  • printf("\nScore du joueur 2 : %d", score2);
  • printf("\n\nVoulez vous faire une autre partie ? (o/n) :");
  • if((selection = getche()) == 'o')
  • {
  • clrscr();
  • goto start;
  • }
  • else
  • {
  • printf("\n\nPartie finie !\n\n");
  • exit(0);
  • }
  • }
  • do //Au tour du joueur 2
  • {
  • printf("\n\n\nJoueur 2: entrez votre case : (0 - 8)\n");
  • printf("\nCases :");
  • AFFICHE(pcases);
  • printf("Votre case = ");
  • scanf("%d", &x);
  • if ((x >= 0) && (x <= 8))
  • {
  • pgrille += x;
  • VERIF_CASE(pgrille);
  • if(ok)
  • *pgrille = 2;
  • pgrille -= x;
  • }
  • else
  • MESSAGE_ERREUR();
  • }
  • while (!ok);
  • clrscr();
  • printf("Grille :");
  • AFFICHE(pgrille);
  • VERIF_VAINQUEUR(2);
  • if(v)
  • {
  • score2++;
  • printf("\n\nScore du joueur 1 : %d", score1);
  • printf("\nScore du joueur 2 : %d", score2);
  • printf("\n\nVoulez vous faire une autre partie ? (o/n)");
  • selection = getche();
  • if(selection == 'o')
  • {
  • clrscr();
  • goto start;
  • }
  • else
  • {
  • printf("\n\nPartie finie !\n\n");
  • exit(0);
  • }
  • }
  • } //Si il n'y a aucun vainqueur
  • printf("\n\nMatch nul !\n");
  • printf("\n\nScore du joueur 1 : %d", score1);
  • printf("\nScore du joueur 2 : %d\n\n", score2);
  • printf("\n\nVoulez vous faire une autre partie ? (o/n)");
  • if((selection = getche()) == 'o')
  • goto start;
  • else
  • {
  • printf("\nPartie finie !");
  • exit(0);
  • }
  • return;
  • }
  • int main()
  • {
  • jeux_morpion();
  • return 0;
  • }
******************Morpion*********************
//Morpion en mode texte
//Mon premier (vrai) programme !!
//Ecrit par Cal en 2002

#include <stdio.h>
#include <conio.h>

extern int grille[3][3] = {0};    //Grille du morpion
extern int cases[3][3] = {0, 1, 2, 3, 4, 5, 6, 7, 8};  //Pour faire son choix...
extern int ok = 0;    //Flag pour erreur
extern int v = 0;     //Vainqueur

void AFFICHE(int *tableau)  //Affiche un tableau [3][3] avec l'aide de pointeurs
{
	int i;
	for(i = 0; i < 9; i++)
		{
			if(!(i%3))    //Pour aller à la ligne tout les 3 éléments
				printf("\n\n");
			tableau += i;
			printf("%d\t", *tableau);
			tableau -= i;
    	}
	printf("\n\n");
	return;
}


int VERIF_CASE(int *pgrille)    //Pour vérifier si la case n'est pas déjà prise
{

	if(*pgrille)      
		{
		 clrscr();
		 AFFICHE(pgrille);
		 printf("\nCase d\x82j\x85 prise !\n");
	     ok = 0;
		}
	else
	    ok = 1;
return ok;
}


void MESSAGE_ERREUR(void)
{
    printf("\n\nTu t'es plant\x82 quelque part ! Recommence :\n\n");
return;
}

int VERIF_VAINQUEUR(int joueur)             
{
    int c0, c1, c2, c3, c4, c5, c6, c7, c8;
	c0 = grille [0][0];
	c1 = grille [0][1];
	c2 = grille [0][2];
	c3 = grille [1][0];
	c4 = grille [1][1];
	c5 = grille [1][2];
	c6 = grille [2][0];
	c7 = grille [2][1];
	c8 = grille [2][2];
	if(((c0 && c1 && c2) && (c0 + c1 + c2 == 3*(joueur))) ||
                   ((c3 && c4 && c5) && (c3 + c4 + c5 == 3*(joueur))) || 
                   ((c6 && c7 && c8) && (c6 + c7 + c8 == 3*(joueur))) || 
                   ((c0 && c3 && c6) && (c0 + c3 + c6 == 3*(joueur))) || 
                   ((c1 && c4 && c7) && (c1 + c4 + c7 == 3*(joueur))) || 
                   ((c2 && c5 && c8) && (c2 + c5 + c8 == 3*(joueur))) || 
                   ((c0 && c4 && c8) && (c0 + c4 + c8 == 3*(joueur))) || 
                   ((c2 && c4 && c6) && (c2 + c4 + c6 == 3*(joueur)))))
//Vérifie si chaque ligne ou chaque diagonale est égale à 3 ou 6 suivant le numero du joueur
//Mais il ne faut pas de 0 car 1 + 2 + 0 = 3 	
	    {
			printf("\n\nLe joueur %d \x85 gagn\x82 !\n\n",(joueur));
			v = 1;
		}
return v;
}

void jeux_morpion(void)
{

	int *pgrille = &grille;     //Pointeur pour selectionner la case choisie par le joueur
    int *pcases = &cases;    //Pointeur pour afficher le tableau "cases"
	int c0, c1, c2, c3, c4, c5, c6, c7, c8; //Cases
	int x;      //Selections des joueurs
	int i, j;     //Pour afficher les tableaux
    int c;    //Compteur de coups
	int score1 = 0;
	int score2 = 0;
	char selection;

	printf("\n*********************MORPION*********************\n\n");
	printf("Ecrit par u Cal en 2002\n\n");
	printf("*************************************************\n\n");
	printf("Grille : 0 -> Case vide\n");
	printf("         1 -> Case jou%ce par le joueur 1\n", 130);
	printf("         2 -> Case jou%ce par le joueur 2\n", 130);

	start: v = 0;

	for(i = 0; i < 3; i++)    //Re-initialisation de la grille pour les nouvelles parties
       {
	    for(j = 0; j <3; j++)
			grille[i][j] = 0;
	   }

    for(c = 1; c < 9; c += 2)   //Si les 9 coups n'ont pas été joués (en fait ça s'arrete au 8e,
		          //mais si un joueur arrive au 9e coup, c'est un match nul)
       {
		do
		   {
		    printf("\n\n\nJoueur 1: entrez votre case : (0 - 8)\n");
		    printf("\nCases : ");
			AFFICHE(pcases);
    		printf("Votre case = ");
			scanf("%d", &x);

	  	 	if ((x >= 0) && (x <= 8))   //Si x est un chiffre entre 0 et 8
    	   	   {
    	        pgrille += x;      //Positionnement dans la case du tableau choisie
				VERIF_CASE(pgrille);
			    	if(ok)  //Assigne la valeur 1 si la case n'est pas déjà prise
				    	*pgrille = 1;
					pgrille -= x;  //Reviens au debut du tableau
			   }
   		     else
				MESSAGE_ERREUR();

		    }
    	 while (!ok);

		 clrscr();
		 printf("Grille : ");
		 AFFICHE(pgrille);
         VERIF_VAINQUEUR(1);
             if(v)     //Si il y a un vainqueur
				{
				 score1++;
				 printf("\n\nScore du joueur 1 : %d", score1);
				 printf("\nScore du joueur 2 : %d", score2);
				 printf("\n\nVoulez vous faire une autre partie ? (o/n) :");
				  	 if((selection = getche()) == 'o')
					   {
                        clrscr();
						goto start;
					   }
					 else
					   {
					    printf("\n\nPartie finie !\n\n");
						exit(0);
					   }
				 }

		 do     //Au tour du joueur 2
		   {
		    printf("\n\n\nJoueur 2: entrez votre case : (0 - 8)\n");
		    printf("\nCases :");
			AFFICHE(pcases);
			printf("Votre case = ");
			scanf("%d", &x);

    		if ((x >= 0) && (x <= 8))
    	   	   {
    	        pgrille += x;
				VERIF_CASE(pgrille);
				    if(ok)
					    *pgrille = 2;
			    pgrille -= x;
    	       }
   		     else
				MESSAGE_ERREUR();
			 }
    	 while (!ok);

		 clrscr();
		 printf("Grille :");
		 AFFICHE(pgrille);
		 VERIF_VAINQUEUR(2);
		 if(v)
				{
				 score2++;
				 printf("\n\nScore du joueur 1 : %d", score1);
				 printf("\nScore du joueur 2 : %d", score2);
				 printf("\n\nVoulez vous faire une autre partie ? (o/n)");
				 selection = getche();
				 	 if(selection == 'o')
					   {
                        clrscr();
						goto start;
				       }
				     else
					   {
					    printf("\n\nPartie finie !\n\n");
						exit(0);
					   }
				 }

	}          //Si il n'y a aucun vainqueur
     printf("\n\nMatch nul !\n");
     printf("\n\nScore du joueur 1 : %d", score1);
     printf("\nScore du joueur 2 : %d\n\n", score2);
     printf("\n\nVoulez vous faire une autre partie ? (o/n)");
       	 if((selection = getche()) == 'o')
		    goto start;
	     else
		   {
		    printf("\nPartie finie !");
			exit(0);
		   }
  	 return;
}

int main()
{
	jeux_morpion();
return 0;
}  

 Conclusion

Ce code peut servir aux débutant comme moi, c'est pas mal de commencer par un morpion je pense (j'ai super progressé en une semaine grâce à cette idée)
Si vous trouvez des bugs ou des idées pour une future version je suis preneur (j'ai l'intention de faire jouer l'ordinateur).
Si vous avez des remarques ou des conseils, n'ésitez pas.

Cal.

      

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • Morpion.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier6 405 octets
  • morpion.exeTélécharger ce fichier [Réservé aux membres club]24 452 octets

Télécharger le zip


 Sources du même auteur

Source avec Zip MORPION II

 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

Commentaires et avis

Commentaire de glipper le 11/06/2002 10:14:19

Si tu cherche une fonction pour effacer l'ecran, je connais clrscr() qui est dans la bibliothèque conio.h .
Sinon pour ton programme, je n'ai pas reussi à le compiler: des que les lignes sont trop longues, il y a un retour à la ligne.
Sur les autres exemples que j'ai vu, ils etaient dans des EditBox. Je suis nouveau ici donc je ne peux pas t'aider pour ce probleme.
Mais pourais tu quand meme mettre le source et l'executif en fichier attaché, histoire que je puisse voir comment il est ?
Glipper

Commentaire de Galett le 12/06/2002 18:35:43

euh, le clrscr() c'est une fonction spéciale de borland ça. Pas vraiement portable.

Commentaire de flauralize le 24/01/2003 18:16:24

les cocos, personne aurait un morpion en C++ qui se joue à deux joueurs avec autant de cases qu'on veut ??? Parce que là j'en fais un mais c'est un peu galère galère....
Flo

 Ajouter un commentaire




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,530 sec (3)

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