Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MASTERMIND NUMERIQUE [VERSION 2][TOUT COMPILATEUR]


Information sur la source

Catégorie :Jeux Niveau : Initié Date de création : 18/05/2002 Date de mise à jour : 21/05/2002 21:50:37 Vu : 5 070

Note :
Aucune note

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

Description

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

Source

  • /* 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
  • }
/* 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...
 

Commentaires et avis

Aucun commentaire pour le moment.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 2,184 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.