IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Problème pour coder le Mastermind


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Par défaut Problème pour coder le Mastermind
    Bonjour à tous et à toute,

    Actuellement étudiant en BTS informatique, je doit dans le cadre de mes études coder le jeu du mastermind en c++.

    Après des heures et des heures à ne pas comprendre comment réussir à résoudre mon problème je m'en remet à vous et vos conseils éclairés

    Mon programme se lance, tourne mais mes fonctions "CalculBP" et "CalculMP" ne veulent pas fonctionner (l'erreur vient de la comparaison des deux tableaux je crois) et malgré toute mes recherches je ne sais plus quoi faire ...

    Je dois utiliser de préférence les deux librairies dans mon code. Je vous ai copié l'intégralité du code si vous arrivez à m'aidez, je vous remercie d'avance

    Bien Cordialement un petit développeur nommée Drum-Drumm.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    #include <iostream>
    #include <myconio.h>
     
    using namespace std ; 
     
    typedef char typeformule[5];
     
     
    void afficheValeur(int x,int y, int val){ // permet d'afficher la valeur au coordonné voulu
        gotoxy(x,y) ; 
        cout<<val ; // val prendra la valeur du bien placer ou du mal placer
    }
     
    int CaractereValide(char c) { // Détermine si le caractere saisie correspond à un caractere valide
        int i = 0; 
        char VarCoul [7] = {'B','R','N','V','J','O','G'};
        for (i=0;i<6;i++){
            while (VarCoul[i] != c && i < 6){
                i++;
            }
            return (VarCoul[i] == c);
        }
    }
     
    char SaisieCouleur(int x, int y){ // Permet de saisie une couleur qui sera valider grâce a caractere valide
        char c ; 
        do {
            gotoxy(x,y) ; 
            c = getche();
        }while(!CaractereValide(c));
        return c;
    }
     
     
    int calculBP(typeformule VarEssai, typeformule VarCopie){ // fonction qui permet de verifier combien de coups sont bien place
        int i, cp;
         for (i=0;i<5;i++){
             if (VarCopie[i],(VarCopie[i] == 'X')){ // permet d'éviter de recalculer dans le vide à chaque saisie
                 // i++;
             }else{
                 if ((VarEssai[i] == VarCopie[i])){
                     cp = cp + 1; // compteur des coup bien place
                     VarCopie[i] = 'X';                 
                 }
             }
        }
        return cp ;
    }
     
    int calculMP(typeformule VarEssai, typeformule VarCopie){ // fonction qui permet de verifier combien de coups sont mal place
         int i, j, cl;
         for (i = 0; i < 5; i++){
             for (j = 0; j < 5; j++){
                 if (VarEssai[i] == VarCopie[j]){
                     cl = cl + 1; //compteur des coup mal place
                     VarEssai[i] = 'X';
                     VarCopie[j] = 'Y';
                 }
            }
        }
        return cl;
    }
     
     
     
     
     
     
     
     
     
     
    int main() {
        typeformule VarCopie, VarEssai, VarOriginal ;
        int x, y, i, nbessai, ligne;
        char c;
        int cp, cl ;
     
        ligne = 7 ;// me permet de faire varier ma ligne pour chaque essai
        nbessai = 0; // initialise le nombre d'essai
        gotoxy(25,1); // afficher une phrase de bienvenue
        cout<<"Welcome to the MasterMind";
        gotoxy(1,3); // afficher la phrase d'accroche
        cout<<"Entrer votre code secret :"; 
     
        for(i=0;i<5;i++){ // permet de saisir nos valeurs 
            VarOriginal[i] = SaisieCouleur(30+i*4,3);
            gotoxy(30+i*4,3); cout<<"X"; // permet de cacher les lettre compose sans devoir effacer l'écran
            VarCopie[i] = VarOriginal[i] ; // VarCopie prend les valeurs de VarOrignal
        }
        //     gotoxy (1,5);     cout<<VarCopie[2] ; test
         gotoxy (1,5); cout<<"Joueur deux veuillez trouver la combinaison";
     
        do {
            gotoxy(1,ligne); // mettre une variable pour descendre d'une ligne à chaque fois 
            cout<<"Dechiffrer le code secret :"; 
            for(i=0;i<5;i++){ // permet de saisir nos valeurs 
                VarEssai[i] = SaisieCouleur(30+i*4,ligne);
            }
            calculBP(VarCopie, VarEssai); // calcul les bien palcer
            calculMP(VarEssai, VarCopie); // calcul les mal placer
            afficheValeur(50,ligne, calculBP(VarEssai, VarCopie)); // afficher le nombre de coup bien placer 
            afficheValeur(55,ligne, calculMP(VarEssai, VarCopie)); // affiche le nombre de coup mal plcer
            nbessai ++;
            ligne ++;
     
        }while (calculBP(VarEssai, VarCopie) != 5); // affiche une phrase de fin 
        if (nbessai <= 5 ) {
            gotoxy(1,ligne + 1); cout<<"Bravo, vous avez reussi en", nbessai ," coups ! Vous êtes vraiment génial ! "; // compteur nbessai ne veux pas marcher
     
        } else { 
            if (nbessai <= 10) {
                gotoxy(1,ligne + 1);cout<<"Pas trop mal mon petit mais te reste encore des efforts.";
            } else {
                gotoxy(1,ligne + 1);    cout<<"t'es vraiment bidon en faite !";
            }
        }
     
    }

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    Pourquoi ne pas utiliser un débuggeur ?

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Bonjour,
    As-tu conscience qu'avec "les fonctions ne semblent pas marcher", nous ne pouvons pas t'aider?

    Qu'est-ce qui te fait dire qu'elles ne fonctionnent pas?

    Qu'espères-tu d'elles?
    Qu'obtiens-tu?

    On m'a un jour dit "si le problème n'est pas là, c'est qu'il est ailleurs"
    C'est-à-dire que si la fonction ne fait pas ce que tu veux, c'est peut-être parce que tu lui demandes autre chose, ou mal…

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Par défaut
    Bonjour,

    si mes fonctions marchaient je n'aurai pas eu besoin de poster mon message ici. Enfin bref, je n'arrive pas à comparer mes deux tableaux avec un caractère 'X' et cela bloque tout mon programme puisque je en peux sortir de ma boucle. Si quelqu'un à déjà eu le même soucis.

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    moi, j'accuse calculBP d'être fausse.

    Il y a une virgule dans son code, et aucun débutant ne sait l'utiliser.
    à vrai dire, quasiment personne ne sait l'utiliser à bon escient.

    Après, il faudra que tu grondes ton prof de notre part, c'est du C avec cout. pas du C++ du tout.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Par défaut
    Après moultes et moultes tentatives, j'ai finalement réussi à résoudre le problème

    BP et MP utilisaient le caractère 'X' pour remplacer et éviter les re-calcul alors que j'aurai du les différencier et ré-initialiser mon tableau à chaque début de boucle.

    Merci pour votre aide et au passage je préviendrais ma prof'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    #include <iostream>
    #include <myconio.h>
     
    using namespace std ;
     
    typedef char typeformule[5];
     
     
    void afficheValeur(int x,int y, int val){ // permet d'afficher la valeur au coordonné voulu
        gotoxy(x,y) ;
        cout<<val ; // val prendra la valeur du bien placer ou du mal placer
    }
     
    int CaractereValide(char c) { // Détermine si le caractere saisie correspond à un caractere valide
        int i = 0;
        char VarCoul [7] = {'B','R','N','V','J','O','G'}; // caractere autoriser
        for (i=0;i<6;i++){
            while (VarCoul[i] != c && i < 6){
            	i++;
        	}
            return (VarCoul[i] == c);
        }
    }
     
    char SaisieCouleur(int x, int y){ // Permet de saisie une couleur qui sera valider grâce a caractere valide
        char c ;
        do {
            gotoxy(x,y) ;
            c = getche();
        }while(!CaractereValide(c));
        	return c;
    }
     
     
    int calculBP(typeformule VarEssai, typeformule VarCopie){ // fonction qui permet de verifier combien de coups sont bien place
         int k, cp;
         cp = 0;
             for (k=0;k<5;k++){
               if (VarCopie[k] == 'X'){ // permet d'éviter de recalculer dans le vide à chaque saisie
                      cp = cp + 1;
                 }else{
                         if (VarEssai[k] == VarCopie[k]){
                             cp = cp + 1; // compteur des coup bien place
                             VarCopie[k] = 'X';                
                         }
                 	}
            }
        return cp ;
    }
     
    int calculMP(typeformule VarEssai, typeformule VarCopie){ // fonction qui permet de verifier combien de coups sont mal place
    	int i, j, cl;
        cl = 0;
             for (i = 0; i < 5; i++){
             	 if (VarCopie[i] == 'X'){
             	 } else {
                 	for (j = 0; j < 5; j++){
                        	 if (VarEssai[i] == VarCopie[j]){
                            	 cl = cl + 1; //compteur des coup mal place
                           	 	VarEssai[i] = 'q'; 
                           		VarCopie[j] = 'b';
                        	 }
                  	}
            	}
        	}
        return cl;
    }
     
    int main() {
        typeformule VarCopie, VarEssai, VarOriginal ;
        int x, y, i, nbessai, ligne;
        char c;
        int cp, cl ;
     
        ligne = 11 ;// me permet de faire varier l'affichage de mes lignes (si je doit modifie l'affichage de n'importe quoi je modifie cette variable)
        nbessai = 0; // initialise le nombre d'essai
     
        gotoxy(25,1); // afficher une phrase de bienvenue
        cout<<"Welcome to the MasterMind";
     
        gotoxy(1,ligne - 8); // afficher la phrase d'accroche
        cout<<"bleu = B, rouge = R, noir = N, vert = V, jaune = J, orange = O, gris = G "; // rappel des couleurs
     
        gotoxy(1,ligne - 6); // afficher la phrase d'accroche
        cout<<"Entrer votre code secret :";
     
        for(i=0;i<5;i++){ // permet de saisir nos valeurs
        VarOriginal[i] = SaisieCouleur(30+i*4,ligne - 6);
        gotoxy(30+i*4,ligne - 6); cout<<"X"; // permet de cacher les lettre compose sans devoir effacer l'écran
        // VarCopie prend les valeurs de VarOrignal
                        }
         gotoxy (1,ligne - 4); 
    	 cout<<"Joueur deux veuillez trouver la combinaison";
         gotoxy (55,ligne - 2);
    	 cout<<"Bien place";
         gotoxy (70,ligne - 2); 
    	 cout<<"Mal place";
     
        do {
        	for(i=0;i<5;i++){
        		VarCopie[i] = VarOriginal[i] ; // VarCopie prend les valeurs de VarOrignal
            }
            gotoxy(1,ligne); // mettre une variable pour descendre d'une ligne à chaque fois
            cout<<"Dechiffrer le code secret :";
     
            for(i=0;i<5;i++){ // permet de saisir nos valeurs
            	VarEssai[i] = SaisieCouleur(30+i*4,ligne);
            }
            afficheValeur(59,ligne, calculBP(VarEssai, VarCopie)); // afficher le nombre de coup bien placer
            afficheValeur(74,ligne, calculMP(VarEssai, VarCopie)); // affiche le nombre de coup mal plcer
            nbessai ++;
            ligne ++;
        }while (calculBP(VarEssai, VarCopie) != 5);
     
        if (nbessai <= 5 ) { // affiche une phrase de fin
            gotoxy(1,ligne + 1);
    		cout<<"Bravo, vous avez reussi en " << nbessai << " coups !";
        					}else{ if (nbessai <= 10) {
          							gotoxy(1,ligne + 1);
    								cout<<"correct, vous avez reussi en " << nbessai << " coups !";
                                        				}else{
                                            				gotoxy(1,ligne + 1);
    														cout<<"decevant, vous avez reussi en " << nbessai << " coups !";
                                        						}
            					}		
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Problème pour Coder la fonction vlookup/recherchev en VBA
    Par alexandra1989 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/02/2012, 19h54
  2. Réponses: 4
    Dernier message: 23/10/2011, 22h45
  3. [XL-2007] problème pour coder un programme en VBA
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/12/2010, 10h00
  4. Problèmes pour coder la mise en page
    Par laurent_diep dans le forum VBA Word
    Réponses: 8
    Dernier message: 01/10/2009, 20h46
  5. [VBA-E] Problème pour coder une boucle
    Par lord-asriel dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/03/2007, 10h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo