begin process at 2010 02 10 07:59:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > PUISSANCE 4

PUISSANCE 4


 Information sur la source

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Jeux Niveau :Initié Date de création :26/04/2005 Vu :3 937

Auteur : Spawn3107

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

 Description

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

Source

  • #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);
  • }
#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 !!!


 Sources de la même categorie

Source avec Zip Source avec une capture PLUS OU MOINS par antho974
Source avec Zip Source avec une capture TETRIS EN C++ AVEC SDL par Marmalus
Source avec une capture DÉMINEUR SOUS TERMINAL par aom333
Source avec Zip JEU: MARIO SOKOBAN par astro53
Source avec Zip JEU PUISSANCE IV par ElendilAranwe

Commentaires et avis

Commentaire de bilaloch le 26/04/2005 13:27:42

Bon code. 9/10 a cause de l'erreur au debut :
"void main (void)" => "int main (void)"

BILALoch

Commentaire de bobkiller le 26/04/2005 17:01:35

moi je vois pas d erreur... y a aucun return dans son main non ? s'il ne veut pas retourner de code d erreur c son droit lol !

Commentaire de Funto66 le 27/04/2005 00:22:46

Justement non, les normes C/C++ explicitent qu'il faut que main() renvoie un int indiquant le code d'erreur. Ca passe avec certains compilos mais ça ne devrait pas.

Commentaire de coucou747 le 27/04/2005 10:07:40

ça passe avec gcc... ça m'avait fait prendre de mauvaises habitudes... mais effectivement, faut mettre un return dans main...

Commentaire de bilaloch le 27/04/2005 11:17:02

C'est bien ce que je pensais car mon compilateur s'arretait et je devais modifier "void" en "int" pour que la source fonctionne.

BILALoch

Commentaire de Saros le 27/04/2005 13:53:58

Bon... C'est sûrement une question idiote, mais voilà : je compile ça sous VC++, et il me sort "unexpected end of file while looking for precompiler header directive"
Quelqu'un aurait une idée ?

Commentaire de bilaloch le 27/04/2005 16:46:43

Ben je sais pas mais essaie de remplacer "void main (void)" par "int main (void)" au debut et normalement ca fonctionnera...

BILALoch

Commentaire de SMarmotte le 27/04/2005 20:10:45

désactive les precompilated headers (active do not use PreCompilated Headers (PCH))
enfin un truc du genre dans les propriétés du projet

c'est une erreur classique avec MS Visual C++

Commentaire de coucou747 le 27/04/2005 20:14:45

"erreur classique avec MS"...

non, rien, je passais par la, et j'ai vu de la lumière...

Commentaire de Saros le 28/04/2005 08:34:34

Ok ça marche, en fait j'avais créé un nouveau projet standard et il m'avait mis un fichier stdafx.h par défaut

Mais là ça marche très bien :)

Comment est-il possible de faire un match nul au puissance 4 ?

Commentaire de bilaloch le 28/04/2005 10:36:38

Si toutes les cases sont remplies sans que qu'un joueur ai mis 4 pions d'affilés, c'est match nul.

BILALoch

Commentaire de detays le 28/04/2005 18:16:35

Il y a un bug:
entrez une lettre à la place d'un chiffre, je vous préviens ça fait mal au yeux !

Commentaire de deedflit le 08/06/2005 13:36:36

est ce que quelqu'un pourrait m'aider à comprendre un peu le programme, il y a des trucs que je saisis pas trop. Par exemble que signifie : system("cls) ou encore : fflush(stdin) et a quoi correspond : tab = 250
Si quelqu'un peut m'éclairer je le remercie d'avance

Commentaire de coucou747 le 08/06/2005 13:43:14

system permet d'exécuter une commande système (shell, dos, bash ...)
cls permet sous windows d'effacer l'écran, sous linux, on met clear.

Commentaire de deedflit le 08/06/2005 13:53:11

Merci pour l'explication.
J'attends les autres explications impatiemment.

Commentaire de deedflit le 08/06/2005 13:54:22

Merci pour cette explication, ça m'éclaire déjà beaucoup. J'attends le reste avec impatience.

Commentaire de deedflit le 10/06/2005 13:32:47

je crois avoir trouvé ce qu'est le tab=250 : ça ne correspondrait pas au numéro du caractère, enfin je sais pas trop comment l'expliquer mais je pense que c'est ce qui sert à afficher le smiley dans la case, non?

Commentaire de lordsodom le 10/11/2006 14:17:00

La fonction recherche mériterait d'être mieux écrite, tu as un "copier-coller" de boucle... C'est moche, tu pourrais l'ecrire une fois avec des paramêtres...

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

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

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