Morpion version 1.2

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 341 fois - Téléchargée 39 fois

Contenu du snippet

J'ai réalisé ce code source juste pour voir comment fonctionnait un peu les tableau. Il peut probablement être optimisé, n'étant que débutant en c++ je ne suis pas encore apte a produire un code source bien optimisé :)

Petit changement, il y a maintenant une fonction "caclulant" le score... pff quel flemard j'étais de ne pas l'avoir rajoutée avant :)

Update n°2 : Maintenant l'écran est a chaque fois réaffiché... j'ai enfin trouvé comment le faire :)

Source / Exemple :


#include <iostream.h>
#include <stdlib.h>

int newgame=1;
int grille[3][3];
int transit; //ici transit servira a savoir quel joueur joue afin de savoir quel joueur gagne...
bool p=true;
int coupsmax1; //Pour calculer le nb de coups max afin de savoir s'il y a match nul !
int coupsmax2; //idem
int Play1x, Play1y;
int Play2x, Play2y;
int scoreP1; //Score du joueur1
int scoreP2; //Score du joueur2

void verifP1();
void verifP2();
void affiche();
void score();
bool win(int transit);
void reinitialisation();

//fonction servant a afficher un recapitulatif des cases :

void affiche()
{	
	cout << "\n\n";
	cout << grille[0][0] << " | " << grille[0][1] << " | " << grille[0][2] << "\n";
	cout << "---------\n";
	cout << grille[1][0] << " | " << grille[1][1] << " | " << grille[1][2] << "\n";
	cout << "---------\n";
	cout << grille[2][0] << " | " << grille[2][1] << " | " << grille[2][2] << "\n\n";
}

//fonction effaçant l'écran

void clearscreen()
{
	system("cls");
}

//fonction interaction

void interactionP1()
{
	clearscreen();
	affiche();
	cout << "Player 1, entrez x : ";
	cin >> Play1x;
	cout << "Entrez y : ";
	cin >> Play1y;
	verifP1();
	
}

void interactionP2()
{
	clearscreen();
	affiche();
	cout << "Player 2, entrez x : ";
	cin >> Play2x;
	cout << "Entrez y : ";
	cin >> Play2y;
	verifP2();
}

//fonction de verification 

void verifP1()	//Vérifie pour Player 1
{
	//Vérifie que x et y ne sont pas plus petit que 1 et pas plus grand que 3
	if(Play1x < 1 || Play1x >3)
	{
		cout << "\nErreur, x doit etre compris entre 1 et 3 !!! Recommencez pour x et y !\n\n";
		interactionP1();
	}else if(Play1y < 1 || Play1y > 3)
	{
		cout << "\nErreur, y doit etre compris entre 1 et 3 !!! Recommencez pour x et y !\n\n";
		interactionP1();
	}else {
	
	
		//Vérifie si la case choisie est deja utilisée !

		if(grille[Play1x-1][Play1y-1]!=0)
		{
			cout << "\nErreure, case deja utilisee  !!!\n\n";
			interactionP1();

		}else{ grille[Play1x-1][Play1y-1]= 1; coupsmax1++; win(1); }

		}
	}

void verifP2() //Vérifie pour Player 2
{
	//Vérifie que x et y ne sont pas plus petit que 1 et pas plus grand que 3
	if(Play2x < 1 || Play2x >3)
	{
		cout << "\nErreur, x doit etre compris entre 1 et 3 !!! Recommencez pour x et y !\n\n";
		interactionP2();
	}else if(Play2y < 1 || Play2y > 3)
	{
		cout << "\nErreur, y doit etre compris entre 1 et 3 !!! Recommencez pour x et y !\n\n";
		interactionP2();
	}else {
		
		//Vérifie que la case n'est pas deja utilisée !

		if(grille[Play2x-1][Play2y-1]!=0)
		{
			cout << "\nErreur, case deja utilisee !!! Recommencez ! \n\n";
			interactionP2();
		}else{ grille[Play2x-1][Play2y-1]=2; coupsmax2++;win(2);}
	}
}

//Affiche le score
void score()
{
	cout << "Le score est de : " << scoreP1 << " pour le Joueur 1 a : " << scoreP2 << " pour le joueur 2\n\n";
}

//Définit quel joueur a gagné !
bool win(int transit)
{
	if(grille[0][0]==transit && grille[0][1]==transit &&grille[0][2]==transit)
	{
			clearscreen();
			affiche();
			cout << "\nP" << transit <<" WIN !\n\n\n";
			p=false;

	}else if(grille[1][0]==transit && grille[1][1]==transit && grille[1][2]==transit)
	{
			clearscreen();
			affiche();
			cout << "\nP" << transit <<" WIN !\n\n\n";
			p=false;

	}else if(grille[2][0]==transit && grille[2][1]==transit && grille[2][2]==transit)
	{
			clearscreen();
			affiche();	
			cout << "\nP" << transit <<" WIN !\n\n\n";
			p=false;

	}else if(grille[0][0]==transit && grille[1][0]==transit && grille[2][0]==transit)
	{
			clearscreen();
			affiche();
			cout << "\nP" << transit <<" WIN !\n\n\n";
			p=false;

	}else if(grille[0][1]==transit && grille[1][1]==transit && grille[2][1]==transit)
	{
			clearscreen();
			affiche();
			cout << "\nP" << transit <<" WIN !\n\n\n";
			p=false;

	}else if(grille[0][2]==transit && grille[1][2]==transit && grille[2][2]==transit)
	{
			clearscreen();
			affiche();
			cout << "\nP" << transit <<" WIN !\n\n\n";
			p=false;

	}else if(grille[0][0]==transit && grille[1][1]==transit && grille[2][2]==transit)
	{
			clearscreen();
			affiche();
			cout << "\nP" << transit <<" WIN !\n\n\n";
			p=false;

	}else if(grille[0][2]==transit && grille[1][1]==transit && grille[2][0]==transit)
	{
			clearscreen();
			affiche();
			cout << "\nP" << transit <<" WIN !\n\n\n";
			p=false;
	}
	
	if(coupsmax1==5 && coupsmax2==4 && p==1)	//Sert a savoir si il y'a eu match nul car P1 peut jouer max 5 coups et P2 max 4 coups !
	{
		cout << "\nMatch Nul !!!\n\n\n";
		p=false;
		transit=0;
	}
	if(transit==1 && p==1)	//Si P1 ne gagne pas, appeler la fonction interactionP2(), sinon stop !
	{
		interactionP2();	
	}

	if(p==false && transit==1)
	{
		scoreP1++;

	}else if(p==false && transit==2)
	{
		scoreP2++;

	}

	return p;
}

//Sert a reinitialiser la grille pour un nouveau jeu !
void reinitialisation()
{
	int reix, reiy;
	for( reix=0; reix<=3; reix++)
	{	
		for(reiy=0; reiy<=3; reiy++)
		{
			grille[reix][reiy]=0;
			p=true;
			coupsmax1=0;
			coupsmax2=0;
						
		}
	}
}

int main(void)
{

	do
	{
				
		do
		{
			interactionP1();
		}while(p);
		score();
		cout << "\nRejouer ? ( oui=1/non=2) ";
		cin >> newgame;
		cout << "\n";
		reinitialisation();
		

	}while(newgame==1);
return 0;
}

Conclusion :


dans ce code, les fonctions verif1() et verif2() envois a la fonction win() un paramètre afin de dire au programme quel joueur vient de jouer et donc de savoir si ce même joueur a gagné.
Lors du jeu, les coordonnées de la grille de jeu sont donné ainsi :

1,0 | 1,1 | 1,3
2,0 | 2,1 | 2,3
3,0 | 3,1 | 3,3

Pour toutes questions, n'hésitez pas a m'envoyer un mail ! Car je sais que ce code n'est pas parfait :)

PS: Désolé pour les commentaire un peu long et donc qui déborde sur la ligne suivante ! Faite donc attention a ne pas les laissé ainsi si vous faite un copier/coler :)

A voir également

Ajouter un commentaire Commentaires
Messages postés
6
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
20 juillet 2005

l'intélligence c'est la simplicité
Messages postés
1
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 mars 2005

Oui je le trouve super surtout que moi je viens de commencé donc tout ce que je vois je trouve ca super complexe :(
Messages postés
30
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
1 septembre 2005

franchement super le morpion sa ma permit d'apprendre des chose que j'avait compris

continue comme sa ;)
Messages postés
17
Date d'inscription
jeudi 11 décembre 2003
Statut
Membre
Dernière intervention
27 juillet 2005

franchement, c'est cO_ol
faudrait juste que tu rajoute une I.A pour un pauvre joueur solitaire
meme un I.A basique suffit, juste pour ne pas taper les coordonnées de la base pour le joueur 2(pense aux nombreux flemmards ;-)
c'est pas le top des programmes mais l'idée est excellente( du moin pour moi) car c'est fait avec des choses simples
un ti 8
Voila le tableau n'est plus autant repeté qu'avant :) Maintenant il n'y a que 1 tableau affiché à la fois...
Afficher les 6 commentaires

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.