Mastermind numerique [version 2][tout compilateur]

Contenu du snippet

Ceci est un jeux de MasterMind utilisant les chiffres de 1 à 6 pour remplacer les 6 couleurs.

Source / Exemple :


/* MasterMind version 2.0 par TANGUY MORET */
/* Code source sous license GPL */

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int combinaison[4], combinaison_joueur[4];
bool gagne, end;
int count, count_combinaison[6], count_total, chiffres_bien_places, nombredechiffres[6];

/* Variables : combinaison[4] : enregistre la combinaison calculé,
combinaison_joueur[4] : enregistre la combinaison du joueur,
gagne : 1=OUI 0=NON, end : à t-on finis? 1=OUI 0=NON,
count : nombre d'essais, count_combinaison[6] : nombre de chaque chiffres
dans la combinaison du joueur, count_total : nombre de chiffres bon (bien ou mal
placés, chiffres_bien_places : nombre de chiffres bien placés,
nombredechiffres[6] : nombre de chaque chiffres dans la combinaison de l'ordi. */

void creation_combinaison(void) {
srand((unsigned) time(NULL)); /* initialise srand avec le nombre de secondes depuis 1970 */
for(int i=0;i<4;i++) { combinaison[i]=(rand()%6)+1;
switch(combinaison[i]) {
case 1: nombredechiffres[0]++;
break;
case 2: nombredechiffres[1]++;
break;
case 3: nombredechiffres[2]++;
break;
case 4: nombredechiffres[3]++;
break;
case 5: nombredechiffres[4]++;
break;
case 6: nombredechiffres[5]++;
};
}
}

void tester_combinaison(void) {
for(int i=0;i<4;i++) {
if(combinaison_joueur[i]==combinaison[i]) chiffres_bien_places++;
if(combinaison_joueur[i]==combinaison[0] || combinaison_joueur[i]==combinaison[1] || combinaison_joueur[i]==combinaison[2] || combinaison_joueur[i]==combinaison[3]){
count_combinaison[(combinaison_joueur[i])-1]++;}
}
for(int i=0;i<6;i++) { /* On veut empecher que plusieurs chiffres identiques correspondant
à un chiffre de la combinaison soit considérés comme plusieurs "bons" chiffres */
if(count_combinaison[i]>nombredechiffres[i])
count_combinaison[i]=nombredechiffres[i];}
}

void dire_bon_chiffres(void) {
for(int i=0;i<6;i++) count_total+=count_combinaison[i];
cout << "\n\n " << count_total << " chiffres bons\n";
cout << " dont " << chiffres_bien_places << " chiffres bien placés\n";
}

void _gagne(void) {
char reponse;
if(chiffres_bien_places==4) {
cout << "Vous avez gagne!\n";
gagne=1;}
}

void reset_1(void) {
for(int i=0;i<4;i++) {
combinaison[i]=chiffres_bien_places=combinaison_joueur[i]=0;}
for(int i=0;i<6;i++) nombredechiffres[i]=0;
gagne=end=count=count_total=0;
}

void reset_2(void) {
chiffres_bien_places=count_total=0; // On reinitialise les résultats
for(int i=0;i<6;i++) count_combinaison[i]=0;
}

bool rejouer(void) {
char reponse;
cout << "\n\nVoulez-vous rejouer? (o/n) ";
cin >> reponse;
cin.ignore();
switch(reponse) {
case 'o': end=0;
break;
case 'n': end=1;
break;
default: break;};
}

void jouer(void) {
reset_1(); // On reinitialise tout
cout << "\033[2J";
cout << "\n\t\t\tMasterMind\n\n";
creation_combinaison();
while(!gagne&&count!=10) {
count++;
reset_2(); // On reinitialise les donnés du joueur
cout << "Entrez une combinaison de 4 chiffres compris entre 1 et 6 (123 pour sortir) : \n";
for(int i=0;i<4;i++) {
cin >> combinaison_joueur[i];
switch(combinaison_joueur[i]) {
case 123: exit(1);
default: break;};
}
tester_combinaison();
dire_bon_chiffres();
_gagne();}
if(count==10) cout << "\n10 essais!\n";
}

int main()
{
do {
jouer();
rejouer(); // Encore une fois?
}while(!end); // Sinon on arrête le programme
}

Conclusion :


Le code peut paraître un peu "flou" par endroit, j'en suis désolé cependant il est difficile de faire beaucoup mieux tout en respectant les règles du MasterMind...

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.