Matsermind objet [dev-c++ + conio.h de turbo c++ 3.0]

Description

Ceci est mon premier programme en C++ !
Il est on ne peut plus basique, je vous l'accorde ! (mais il fonctionne !)

ATTENTION ! Pour le compiler, j'ai utilisé Dev-C++ 4.01 MAIS j'ai ajouté le conio.h de TC 3.0 ! Donc si vous voulez absolument l'exécuter, jettez un oeil dans le zip ! L'exécutable, semble-t-il, ne contient pas de virus connu à ce jour! Mais je ne serai pas responsable des dégâts encourus malgré ça !
Bon, trêve de blabla ! Envoyez vos commentaires, vos insultes, prouvez-moi que, comme j'ai 13 ans, je suis nul en prog ! Rendez-moi service, quitte à briser mon rêve ^^

Source / Exemple :


/*

                         $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                         $     Mastermind "Classique"                  $ 
                         $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

Ce programme n'a aucun intérêt, mais sachez qu'il est sous licence GNU/GPL !
C'est juste pour leur montrer mon admiration ! 
There is hope in this world.

  • /
#include <iostream.h> #include <stdlib.h> #include <time.h> #include <string> #include <conio.h> #define TRUE 1 #define FALSE 0 const int g_LONGUEUR_COMBINAISON=4; const int g_NB_CHIFFRES=8; const int g_NB_ESSAIS=12; //------------------ ----::::- Déclaration des classes -::::---- -------------- class Combinaison { private: int m_iBienPlaces; int m_iMalPlaces; int m_iCombinaison[g_LONGUEUR_COMBINAISON]; public: Combinaison(); void CreationCombinaison(); void SaisieCombinaison(); bool AnalyseCombinaison(const Combinaison &_CombinaisonProposee,const Combinaison &_CombinaisonSecrete); int RetourneResultats(char _cChoix); int* RetourneCombinaison(); }; class Joueur { private: int m_iEssaisRestants; string m_sNom; int m_iHistoriqueEssais[g_NB_ESSAIS]; int m_iHistoriqueCombinaisons[g_NB_ESSAIS]; int m_iHistoriqueBienPlaces[g_NB_ESSAIS]; int m_iHistoriqueMalPlaces[g_NB_ESSAIS]; public : Joueur(); void AfficheStatut(); string RetourneNom(); int RetourneEssais(); void DecrementeEssais(); Combinaison m_CombinaisonProposee; }; class Partie { public: Partie(); void Jouer(); bool m_bGagne; Joueur m_joueur; Combinaison m_CombinaisonSecrete; }; //------------------ ----::::- Fonction pricipale -::::---- -------------------- int main() { system("CLS"); //gotoxy(25,10); cout <<"M A S T E R M I N D\n\n\n"; cout <<"\tVous avez "<<g_NB_ESSAIS<<" essais pour decouvrir le code secret !"<<endl; cout <<"\tIl est compose de "<<g_LONGUEUR_COMBINAISON<<" chiffres, compris entre 1 et "<<g_NB_CHIFFRES<<" inclus."<<endl; for (float i=0;i<1000000000;i++) { ; // remplace delay() qui n'est pas disponible avec Dev-C++ } system("CLS"); Partie partie; partie.Jouer(); if (!partie.m_bGagne) { int* piCombinaisonCachee=partie.m_CombinaisonSecrete.RetourneCombinaison(); cout <<"\n\n\n"<<partie.m_joueur.RetourneNom()<<", vous avez perdu!\n"; cout <<"La combinaison a trouver etait: "; for(int i=0;i<g_LONGUEUR_COMBINAISON;i++) { cout<<piCombinaisonCachee[i]; } cout<<'.'<<endl; } else { string sCoup[2]={"coup","coups"}; int i=(g_NB_ESSAIS-1-(partie.m_joueur.RetourneEssais())!=1); cout<<"\n\n\nBravo, "<<partie.m_joueur.RetourneNom()<<", vous avez gagne en "<<g_NB_ESSAIS-1-(partie.m_joueur.RetourneEssais())<<' '<<sCoup[i]<<'!'; } cout<<"\n\n"; system("PAUSE"); return 0; } //--------------- ----::::- Déclaration des méthodes -::::---- ----------------- // ----::::- Méthodes de Combinaison -::::---- Combinaison::Combinaison() { for (int i=0;i<g_LONGUEUR_COMBINAISON;i++) { m_iCombinaison[i]=0; } m_iBienPlaces=m_iMalPlaces=0; } void Combinaison::CreationCombinaison() { srand(time(0)); for (int i=0;i<g_LONGUEUR_COMBINAISON;i++) { m_iCombinaison[i]=rand()%g_NB_CHIFFRES+1; } for (int i=0;i<4;i++) cout << m_iCombinaison[i]; // affichage de la combinaison cachée pour faire le test cout<<"\n"; } void Combinaison::SaisieCombinaison() { char cCombinaisonProposee[g_LONGUEUR_COMBINAISON]; char bCombinaisonCorrecte; do { for(int i=0;i<g_LONGUEUR_COMBINAISON;i++) { cCombinaisonProposee[i]=0; } bCombinaisonCorrecte=TRUE; cout <<"\nEntrez votre proposition:"<<endl; for(int i=0;i<g_LONGUEUR_COMBINAISON;i++) { cCombinaisonProposee[i]=getche(); m_iCombinaison[i]=atoi(&cCombinaisonProposee[i]); } for(int i=0;i<g_LONGUEUR_COMBINAISON;i++) { if(m_iCombinaison[i]<=0 || m_iCombinaison[i]>8) { bCombinaisonCorrecte=FALSE; } } if(!bCombinaisonCorrecte) { cout<<"\nVotre combinaison doit etre composee de chiffres compris entre 1 et 8(inclus) !"<<endl; } } while(!bCombinaisonCorrecte); } bool Combinaison::AnalyseCombinaison(const Combinaison &_CombinaisonProposee,const Combinaison &_CombinaisonSecrete) { int iC[g_LONGUEUR_COMBINAISON],iCC[g_LONGUEUR_COMBINAISON]; int j; int iTrouve; m_iBienPlaces=m_iMalPlaces=0; for(int i=0;i<g_LONGUEUR_COMBINAISON;i++) { iC[i]=iCC[i]=1; } for (int i=0;i<g_LONGUEUR_COMBINAISON;i++) { if (_CombinaisonProposee.m_iCombinaison[i]==_CombinaisonSecrete.m_iCombinaison[i]) { m_iBienPlaces++; iCC[i]=iC[i]=0; } } // algorithme d'analyse, très simple, enfin fonctionnel for (int i=0;i<g_LONGUEUR_COMBINAISON;i++) { if(iC[i]) { j=iTrouve=0; while(!iTrouve && j<g_LONGUEUR_COMBINAISON) { if(iCC[j] && _CombinaisonSecrete.m_iCombinaison[j]==_CombinaisonProposee.m_iCombinaison[i]) { m_iMalPlaces++; iCC[j]=0; iTrouve=1; } j++; } } } if (m_iBienPlaces==g_LONGUEUR_COMBINAISON && m_iMalPlaces==0) { return TRUE; } else { return FALSE; } } int Combinaison::RetourneResultats(char _cChoix) { if(_cChoix=='b') { return m_iBienPlaces; } else if(_cChoix=='m') { return m_iMalPlaces; } } int* Combinaison::RetourneCombinaison() { return m_iCombinaison; } // ----::::- Méthodes de Joueur -::::---- Joueur::Joueur() { m_iEssaisRestants=g_NB_ESSAIS-1; cout <<"Entrez votre nom :"; cin >> m_sNom; } void Joueur::AfficheStatut() { int* piCombinaison=m_CombinaisonProposee.RetourneCombinaison(); system("CLS"); cout<<"--------------------------"<<endl; m_iHistoriqueEssais[m_iEssaisRestants]=m_iEssaisRestants; m_iHistoriqueBienPlaces[m_iEssaisRestants]=m_CombinaisonProposee.RetourneResultats('b'); m_iHistoriqueMalPlaces[m_iEssaisRestants]=m_CombinaisonProposee.RetourneResultats('m'); m_iHistoriqueCombinaisons[m_iEssaisRestants]=piCombinaison[0]*1000+piCombinaison[1]*100+piCombinaison[2]*10+piCombinaison[3]; for(int i=g_NB_ESSAIS-1;i>=m_iEssaisRestants;i--) { cout<<"Essais restants "<<m_iHistoriqueEssais[i]<<endl; cout<<"Combinaison "<<m_iHistoriqueCombinaisons[i]<<endl; cout<<"Bien places "<<m_iHistoriqueBienPlaces[i]<<endl; cout<<"Mal places "<<m_iHistoriqueMalPlaces[i]<<endl; cout<<"--------------------------"<<endl; } } string Joueur::RetourneNom() { return m_sNom; } int Joueur::RetourneEssais() { return m_iEssaisRestants; } void Joueur::DecrementeEssais() { m_iEssaisRestants--; } // ----::::- Méthodes de Partie -::::---- Partie::Partie() { system("CLS"); m_bGagne=FALSE; m_CombinaisonSecrete.CreationCombinaison(); } void Partie::Jouer() { do { if(m_bGagne) { break; } else { m_joueur.m_CombinaisonProposee.SaisieCombinaison(); m_bGagne=m_joueur.m_CombinaisonProposee.AnalyseCombinaison(m_joueur.m_CombinaisonProposee,m_CombinaisonSecrete); if(!m_bGagne) { m_joueur.AfficheStatut(); } } m_joueur.DecrementeEssais(); }while(m_joueur.RetourneEssais()>=0); }

Conclusion :


Bon, pour les améliorations?
Eh bien je compte écrire un algorithme pour que l'oridnateur trouve la combinaison proposée par le joueur (ça n'a acun sens, c'est juste pour le fun !).
Je vais aussi tenter d'améliorer l'interface, d'intégrer un système de dificulté etc (n'hésitez pas de me donner des idées).

@+
Alex

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.