Mastermind (visual c++)

Contenu du snippet

Un petit Mastermind tout bête en mode console. Il faut deviner des chiffres :
- En mode novice : combinaison de 4 chiffres de 0 à 3 à deviner
- En mode pro : combinaison de 5 chiffres de 0 à 4 à deviner
- En mode killer : combinaison de 6 chiffres de 0 à 5 à deviner
- En mode nightmare : combinaison de 7 chiffres de 0 à 6 à deviner
Le nombre d'essais varie aussi en fonction du niveau de difficulté

Source / Exemple :


#include <iostream>
#include <ctime>
using namespace std;

typedef int TCouleur [7];

void niveau (int &nc)
{
	cout << "Choisissez votre difficulte :"<< endl;
	cout << " 1 - Novice"<<endl;
	cout << " 2 - Pro"<< endl;
	cout << " 3 - Killer"<< endl;
	cout << " 4 - Nightmare" << endl;
	cout << "Votre choix :" ;
	cin >> nc;
	while ((nc < 1 || nc > 4) && nc != 69)
	{
		cout << "Choix incorrect. Votre choix :";
		cin >> nc;
	}
}

void tirage(TCouleur COrdi, int nc)
{
	for (int i = 0; i<nc; i++)
	{
		COrdi[i] = rand()%nc;
	}

}

void saisir(TCouleur CJoueur, int nc)
{
	for (int i = 0; i<nc; i++)
	{
		cout << "Couleur " << i+1 << " : ";
		cin >> CJoueur[i];
		while (CJoueur[i]< 0 ||CJoueur[i]> (nc -1))
		{
			cout << "Erreur!Couleur " << i + 1 << "  : ";
			cin >> CJoueur[i];
		}
	}
}

void affiche (const TCouleur Couleur, int nc)
{
	for (int i = 0; i<nc; i++)
	{
		cout << Couleur[i] << " ";
	}

}

void copier (const TCouleur src, TCouleur dest)
{
	for (int i=0; i<7; i++)
	{
		dest[i]=src[i];
	}
}

int position (int c, const TCouleur K, int nc)
{
	int i = 0;
	while (K[i] != c && i<nc)
	{
		i++;
	}

	if (i== nc)
		i = -1;

	return i;

}

void compteBPMP ( const TCouleur  CJoueur, const TCouleur COrdi, int nc, int &nbp, int &nmp)
{
	//couleurs bien placées
	TCouleur CCopyO,CCopyJ;
	copier (COrdi, CCopyO);
	copier (CJoueur, CCopyJ);
	nbp = 0;
	for (int i = 0 ; i<nc; i++)
	{
		if (CCopyO[i] == CCopyJ[i])
		{
			CCopyO[i] = -1;
			CCopyJ[i] = -1;
			nbp ++;
		}
	}
	
	//couleurs mal placées
	nmp = 0;
	int j;
	for ( i = 0; i<nc; i++)
	{
		if (CCopyO[i] != -1)
		{
			j=0;
			while (CCopyJ[j]!=CCopyO[i] &&j <nc)
			{
				j++;
			}
			if (j!=nc)
			{
				CCopyO[i] = -1;
				CCopyJ[j] = -1;
				nmp++;
			}
			

		}
	}

	

}

int main()
{
	int nc,niv,nbp,nmp;
	int essais;
	bool cheat;
	srand(time(NULL));
	niveau(niv);
	if (niv==69)
	{
		cout << "God mode on !"<< endl;
		cheat = true;
		niveau(niv);
	}

	nc = niv + 3;
	TCouleur COrdi,CJoueur;

	tirage(COrdi,nc);
	essais = 9 +niv;
	//affiche (COrdi, nc);
	if (cheat == true)
	{
		cout << "La combinaison a trouver est :";
		affiche(COrdi, nc);
		cout << endl;
	}

	for (int i = 1; i<=essais; i++)
	{
		cout << "Essai " << i << endl;
		saisir(CJoueur,nc);
		compteBPMP (CJoueur,COrdi,nc,nbp,nmp);
		affiche(CJoueur,nc);
		cout << "      ";
		if (nmp==0 && nbp ==0)
		{ 
			cout << " Rien de bon ! ";
		}
		else
		{
			for (int j=1; j<=nbp;j++)
			{
				cout << "B";
			}
			for ( j=1; j<=nmp;j++)
			{
				cout << "M";
			}
		}
		cout << endl;
		if (nbp == nc)
			break;

	}

	if (nbp == nc)
		cout << "Vous avez gagne apres " << i << " essais ! You are a killer !" << endl;
	else
	{
		cout << "Perdu ! La bonne combinaison etait : ";
		affiche (COrdi,nc);
		cout << "endl";
	}
	return 0;
}

Conclusion :


Pour les tricheurs, tapez 69 dans le menu principal...

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.