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 :

Besoin d'aide pour la programmation d'un mastermind en C++


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 34
    Points : 46
    Points
    46
    Par défaut Besoin d'aide pour la programmation d'un mastermind en C++
    Bonjour à tous,
    je suis en train de coder un jeu du style mastermind en C++ qui s’exécute sur la console.
    La version du programme où il faut ré-exécuter le programme après chaque saisie de l'utilisateur jusqu'à la bonne combinaison marche. Cependant, j'ai essayé de faire en sorte que le joueur puisse entrer plusieurs combinaisons sans devoir exécuter le programme après chaque saisie ce qui a échoué.
    Je suis un véritable novice en C++ et je n'ai encore accès qu'à peu d'outils, les recherches sur internet se sont donc trouvées infructueuses.

    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
    /* We are here trying to create a game like a mastermind, the aim is to find the combination compose of four numbers beetween 0 and 9.
    The player enters 4 numbers:
    If the number appears in the secret combination but his position is wrong: it's a white pawn.
    If the number appears in the secret combination and his position is right: it's a red pawn.  
    So we should get this:
    Enter a random entire (a seed):
    15
     
    Enter a combination of numbers separated by a space.
    1 6 5 4 a
     
    Red pawns: 1        White pawns : 2 
     
    Enter a combination of numbers separated by a space.
    ...*/
     
     
    #include "std_lib_facilities.h"
     
    int main()
    try{
     
      int seed = 0;
      cout << "Enter a random entire(a seed):\n";
      cin >> seed;
     
      srand(seed);                  // Seed for the secret combination
     
    Vector<int> code(4);
    code[0]=randint(10);
    code[1]=randint(10);	    // The combination that we have to find
    code[2]=randint(10);
    code[3]=randint(10);
     
    Vector<int> answ(4);        // Combination written by the user
     
     
     
    int red = 0;             // red pawns
    int white = 0;             //white pawns
    int a = 0;
     
     
    for( int w=0; w<15; ++w){
     
    cout << "Enter a combination of numbers separated by a space.\n";
     
     
    while (cin >> a) {
      answ.push_back(a);                                 // The user's combination
      if (a>9 or a<0){
        error("Number has to be beetween 0 and 9");
      }
    }
     if (answ.size()!=4){
       error("Combination composed of 4 numbers");
     }
     
      for(int m=0; m<4; ++m){                           // Represents numbers written by the user
        for(int i=0; i<4; ++i){                         // Represents numbers of the secret combination
          if(answ[m] == code[i] and m == i){
    	++white;                              
          }
     
          else if (answ[m]==code[i]){
    	++ white;
          }
        }
      }
     
      if (red == 4){
        cout << "You won!\n";                         //End of the game if four red pawns
        break;
      }
     
      else{
      cout << "Red pawns: " << red << "           White pawns: " << white << '\n';
       for( int c=0; c<5; ++c){      
        answ.pop_back(); 
      }  
      red = 0;                               // new combination from user, so at the beginning:
      white = 0;                              //0 red pawns and 0 white pawns
      }
     
     
     
    }
     
    return 0;
    }
     
     
    catch(exception& e){
      cout << "Exception: "<< e.what() << '\n';
      return 1;
    }
     
    catch(...){
      cout << "Oops unknown exception.\n";
      return 2;  
    }
    A cause de la gestion des erreurs le programme affiche:
    Enter a random entire:
    15
    Enter a combination of numbers separated by a space.
    1 2 3 4 a
    Red: 0 White: 1
    Enter a combination of numbers separated by a space.
    Exception: Combination composed of 4 numbers.


    Merci d'avance .

    PS:j'espère ne pas m'être trompé de forum.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    sans entrer dans les détails, parce que j'ai pas tout lu, tu as déjà beaucoup d'erreurs.
    Vector<int> answ(4); crée un vector de 4 éléments, à priori initialisés à 0.
    Et tu te contentes de faire un push_back dessus pour chaque entier, qu'il soit valide ou pas.
    Donc forcément
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (answ.size()!=4){
       error("Combination composed of 4 numbers");
     }
    provoquera toujours l'erreur.

    Prends l'habitude de limiter au maximum la portée de tes variables.
    Pour le reste, un mastermind ne devrait pas être trop difficile, et je pense qu'il existe au moins 1M de sources différentes pour y arriver sur le net.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 34
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup!
    Effectivement, je ne m'étais pas rendu compte que j'avais déjà quatre cases dans mon Vector et que je passais à 8 cases.

    Mais je me suis rendu compte que le programme ne redemande pas les valeurs à l’utilisateur à cet endroit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for( int w=0; w<15; ++w){
     
    cout << "Enter a combination of numbers separated by a space.\n";
     
     
    while (cin >> a) {
    et passe directement à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error("Combination composed of 4 numbers");
    (Cette instruction suit le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (cin >> a) {
      answ.push_back(a);                                 // The user's combination
      if (a>9 or a<0){
        error("Number has to be beetween 0 and 9");
      }
    )

    quand je viens juste de supprimer les cases de mon Vector qui est alors de taille zéro et que je ne peux pas remplir de nouveau.

    N'y a-t-il pas une instruction qui permette de forcer le programme à réactuliser une variable selon ce que rentre l'utilisateur.

    J'ai tenté les instructions system("PAUSE") et cin.get() qui n'ont pas fonctionné sûrement inappropriées ici.

    Merci d'avance!

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

Discussions similaires

  1. Besoin d'aide pour un programme de PGCD
    Par Shapsed dans le forum C
    Réponses: 4
    Dernier message: 23/09/2007, 15h06
  2. besoin d'aide pour mon programme
    Par pouyoudu17 dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 28/05/2007, 22h18
  3. Réponses: 4
    Dernier message: 24/04/2007, 10h18
  4. [débutant] besoin d'aide pour un programme
    Par acdchornet dans le forum C++
    Réponses: 12
    Dernier message: 26/10/2006, 22h32
  5. [Free Pascal] Besoin d'aide pour un programme
    Par ricomix dans le forum Free Pascal
    Réponses: 3
    Dernier message: 04/06/2006, 17h01

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