Puissance 4

Contenu du snippet

Ben qui ne connait pas le puissance 4 !! Le voici fait en C avec Microsoft Visual C++:

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>

// FONCTIONS

void Initialisation(int*,int*);
void Affichage(int*);
int Joueur1(int*,int*,int);
int Recherche(int*,int*,int);

// MAIN

void main (void)
{
	int tab[6][7],va[7];
	int y,c,compt=0,joueur;
	char recom;
	
  do
  {
	y=0;
	joueur=2;
	Initialisation(&tab[0][0],&va[0]);
		
	do
	{
	  system("cls");

	  joueur=joueur%2+1;
	  
	  Affichage(&tab[0][0]);
	  
	  printf("\n");

	  c=Joueur1(&tab[0][0],&va[0],joueur);

	  compt++;

	  if(compt>6)
	  {
		  y=Recherche(&tab[0][0],&va[0],c);
	  
		  if(compt==6*7 && y==0)
		  {
			 y=2;
		  }

		  switch(y)
		  {
		  case 1 :  system("cls");
					Affichage(&tab[0][0]);
					printf("\t\t\t ** JOUEUR %d a gagne !! **",joueur);
					break;
		  case 2 :  system("cls");
					Affichage(&tab[0][0]);
					printf("\t\t\t ** Match Null ! **");
					break;
		  }
	  }

	}while(y==0);

	printf("\n\n");
	
	// Boucle "RECOMMENCER"!

	do
	{ fflush(stdin);
	  printf("\t\tVoulez-vous recommencer ? (o/n) : ");
	  scanf("%c",&recom);
	}while(recom!='o' && recom!='n');

	printf("\n");

  }while (recom=='o');
}

/***************************************************
INPUT :   Adresse de début du tableau et du vecteur
		  d'occupation.
PROCESS : Initialisation des valeurs du tableau
		  et du vecteur(tab=250 et va=6).
OUTPUT:   /

                                                                                                      • /
void Initialisation(int *ptab,int *pva) { int i; for(i=0;i<6*7;i++) {
  • ptab=250;
ptab++; } for(i=0;i<7;i++) {
  • pva=6;
pva++; } } /********************************************************* INPUT : Adresse de début du tableau, du vecteur et le numéro correspondant au joueur. PROCESS : Introduction des valeurs dans le tableau. (Joueur1 = 1 et Joueur2 = 2) OUTPUT : Numéro de la colonne (c)
                                                                                                                  • /
int Joueur1(int *ptab,int *pva,int joueur) { int c,x,*pdeb; pdeb=ptab; do { x=0; do { printf("JOUEUR %d [%c] > colonne (1-7) : ",joueur,joueur); scanf("%d",&c); }while(c<1 || c>7); pva=pva+(c-1); if(*pva>0) { ptab=(ptab+((*pva-1)*7))+(c-1);
  • ptab=joueur;
  • pva=*pva-1;
} else { x=1; pva=pva-(c-1); ptab=pdeb; } }while(x!=0); return(c); } /***************************************************** INPUT : Adresse de début du tableau. PROCESS : Affichage des valeurs comprisent dans le tableau. OUTPUT : /
                                                                                                          • /
void Affichage(int *ptab) { int i,j; printf("\n"); printf("\t******************* PUISSANCE 4 *******************\n\n"); for(i=0;i<6;i++) { printf("\t\t\t"); for(j=0;j<7;j++) { printf("%c ",*ptab); ptab++; } printf("\n\n"); } printf("\n\t\t\t"); for(i=0;i<7;i++) { printf("%d ",i+1); } printf("\n\n\n"); } /***************************************************** INPUT : Adresse de début du tableau, du vecteur plus le numéro de colonne. PROCESS : Recherche des occurences dans le taleau (4) OUTPUT : Renvoit la valeur de "y".
                                                                                                          • /
int Recherche(int *ptab,int *pva,int c) { int x=1,compt=1,compt2=0,y=0; pva=pva+(c-1); ptab=(ptab+(*pva*7))+(c-1); // Vérification de la ligne horizontale while(*ptab==*(ptab-x) && y!=1 && c>1) //GAUCHE { compt++; compt2++; c--; x++; if(compt==4) { y=1; } } c=c+compt2; compt2=0; x=1; while(*ptab==*(ptab+x) && y!=1 && c<7) //DROITE { compt++; compt2++; c++; x++; if(compt==4) { y=1; } } c=c-compt2; compt2=0;; x=7; compt=1; // Vérification de la ligne verticale (vers le bas seulement !) while(*ptab==*(ptab+x) && y!=1 && (*pva+compt2)<5) { compt++; compt2++; x=x+7; if(compt==4) { y=1; } } x=8; compt2=0; compt=1; // Vérification de la diagonale principale while(*ptab==*(ptab-x) && y!=1 && c>1 && (*pva-compt2)>0) //GAUCHE { compt++; compt2++; c--; x=x+8; if(compt==4) { y=1; } } c=c+compt2; compt2=0; x=8; while(*ptab==*(ptab+x) && y!=1 && c<7 && (*pva+compt2)<5) //DROITE { compt++; compt2++; c++; x=x+8; if(compt==4) { y=1; } } c=c-compt2; compt2=0; x=6; compt=1; // Vérification de la diagonale secondaire while(*ptab==*(ptab+x) && y!=1 && c>1 && (*pva+compt2)<5) //GAUCHE { compt++; compt2++; c--; x=x+6; if(compt==4) { y=1; } } c=c+compt2; compt2=0; x=6; while(*ptab==*(ptab-x) && y!=1 && c<7 && (*pva-compt2)>0) //DROITE { compt++; compt2++; c++; x=x+6; if(compt==4) { y=1; } } return(y); }

Conclusion :


Amusez-vous bien avec et si vous trouvez des bugs , n'hésitez pas à me le dire !!!

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.