Puissance 4 (visual c++)

Description

Encore un jeu? et oui!! Je vous présente mon puissance 4 pour deux, avec une particularité, le jeu ne s'arrête que qand la grille est pleine, et comptabilise le nombre de puissances 4 de chaque joueur. Voili voilou!!...
Prenez le fichier ZIP.
NE FAITES SURTOUT PAS DE COPIER-COLLER!!!

Source / Exemple :


#include<iostream.h>
#include<conio.h>

struct colonne //le jeu est une grille contenant des colonnes
{
	int kaz[8]; //contenant elles-mêmes chacune 8 cases
	int n; //hauteur des pions dans la colonne
};

void init(colonne a[])
{
	int i,j;
	for(i=0;i<10;i++) //la boucle parcourt les 10 colonnes
	{
		for(j=0;j<8;j++) a[i].kaz[j]=0;
		//la valeur de chaque case est initialisée à 0 (=vide)
		a[i].n=0;
		//le nombre de pions dans chaque colonne également
	}
}

void saisie(colonne a[],int t)
{
	int c;
	do{
		cout<<"Joueur "<<t<<", tape la colonne (0-9): ";cin>>c;
		if(c>9 || c<0 || a[c].n==8)cout<<"colonne invalide!"<<endl;
	}while(c>9 || c<0 || a[c].n==8);
	a[c].kaz[a[c].n]=t;
	//la case prend la valeur du joueur t (1 ou 2)
	a[c].n++;
	//le nombre de pions dans la colonne c est incrémenté
}

int test(colonne a[],int t)
//renvoie 1 si 4 pions du même joueur sont alignés, 0 sinon
//le jeu est divisé en 4 zones
{
	int i,j;
	for(i=0;i<10;i++) //pour tester les puissance4 verticaux
		for(j=0;j<5;j++)
			if(a[i].kaz[j]==a[i].kaz[j+1] && a[i].kaz[j+1]==a[i].kaz[j+2] && a[i].kaz[j+2]==a[i].kaz[j+3] && a[i].kaz[j+3]==t)
			{
				a[i].kaz[j]=-1;a[i].kaz[j+1]=-1;a[i].kaz[j+2]=-1;a[i].kaz[j+3]=-1;
				return 1;
				//si puissance 4 il y a, les 4 cases concernées
				//prennent la valeur -1, on retourne 1
			}
	for(i=0;i<7;i++) //pour tester les puissance4 horizontaux
		for(j=0;j<8;j++)
			if(a[i].kaz[j]==a[i+1].kaz[j] && a[i+1].kaz[j]==a[i+2].kaz[j] && a[i+2].kaz[j]==a[i+3].kaz[j] && a[i+3].kaz[j]==t)
			{
				a[i].kaz[j]=-1;a[i+1].kaz[j]=-1;a[i+2].kaz[j]=-1;a[i+3].kaz[j]=-1;
				return 1;
			}
	for(i=0;i<7;i++) //pour les diagonales orientées Nord-Est
		for(j=0;j<5;j++)
			if(a[i].kaz[j]==a[i+1].kaz[j+1] && a[i+1].kaz[j+1]==a[i+2].kaz[j+2] && a[i+2].kaz[j+2]==a[i+3].kaz[j+3] && a[i+3].kaz[j+3]==t)
			{
				a[i].kaz[j]=-1;a[i+1].kaz[j+1]=-1;a[i+2].kaz[j+2]=-1;a[i+3].kaz[j+3]=-1;
				return 1;
			}
	for(i=0;i<7;i++) //pour les diagonales orientées Sud-Est
		for(j=3;j<8;j++)
			if(a[i].kaz[j]==a[i+1].kaz[j-1] && a[i+1].kaz[j-1]==a[i+2].kaz[j-2] && a[i+2].kaz[j-2]==a[i+3].kaz[j-3] && a[i+3].kaz[j-3]==t)
			{
				a[i].kaz[j]=-1;a[i+1].kaz[j-1]=-1;a[i+2].kaz[j-2]=-1;a[i+3].kaz[j-3]=-1;
				return 1;
			}
	return 0;
}

void affiche(colonne a[])
{
	int i,j;
	cout<<"__________________________________________________"<<endl;
	for(i=7;i>=0;i--)
	{
		cout<<"\xB3     \xB3     \xB3     \xB3     \xB3     \xB3     \xB3     \xB3     \xB3     \xB3     \xB3"<<endl;
		for(j=0;j<10;j++)
		{
			cout<<"\xB3  ";
			if(a[j].kaz[i]==1)cout<<"\x01"; //pour joueur 1
			else if(a[j].kaz[i]==2)cout<<"\x02"; //pour joueur 2
			else if(a[j].kaz[i]==-1)cout<<"X"; //pour cases "gagnées"
			else cout<<" "; //pour cases vides
			cout<<"  ";
		}
		cout<<"\xB3"<<endl;
		cout<<"\xB3_____\xB3_____\xB3_____\xB3_____\xB3_____\xB3_____\xB3_____\xB3_____\xB3_____\xB3_____\xB3"<<endl;
	}
}

void main()
{
	int i,t,score[3],choix;
	colonne a[10]; //on crée un tableau de 10 colonnes
	cout<<"Bienvenue dans mon jeu de Puissance 4\n\n";
	do{
		cout<<"1. Jouer\n";
		cout<<"2. Quitter\n";
		cin>>choix;
		cout<<endl;
		if(choix==1)
		{
			for(i=0;i<3;i++)score[i]=0;
			//on initialise les scores à 0 (score[0] ne sert à rien!)
			init(a);
			affiche(a);
			for(i=0;i<80;i++) //il y aura 80 coups (8*10)
			{
				if(i%2==0)t=1; //t change de valeur une fois sur deux
				if(i%2==1)t=2; //représentant le joueur
				saisie(a,t);
				score[t]=score[t]+test(a,t);
				//on incrémente (ou non) le score du joueur t
				affiche(a);
			}
			getch();
			cout<<"\n_SCORES_"<<endl;
			cout<<"Joueur 1: "<<score[1]<<endl;
			cout<<"Joueur 2: "<<score[2]<<endl;
			if(score[1]>score[2])cout<<"Joueur 1 a gagne!!"<<endl;
			if(score[2]>score[1])cout<<"Joueur 2 a gagne!!"<<endl;
			if(score[1]==score[2])cout<<"Match nul..."<<endl;
			getch();
			cout<<endl;
		}
	}while(choix!=2);
}

Conclusion :


La coutume... venez tous voir mon site pour retrouver des cours et sources qui ouvrira fin avril 2002... http://lambda.man.free.fr
biz à tous!

Codes Sources

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.