Partage
  • Partager sur Facebook
  • Partager sur Twitter

Amélioration du jeu C+C-

Sujet résolu
Anonyme
16 juin 2020 à 0:23:16

Bonjour à toutes et à tous! 

J'ai commencé le cours sur la programmation en langage C il y a quelque jour et j'en suis au cours "Amélioration du jeu c'est plus, c'est moins". 

Dans ce cours, l'auteur nous propose 3 améliorations possible à notre programme : 

  • Mettre un compteur 
  • Permettre de choisir un niveau de difficulté 
  •  Faire recommencer le jeu une fois la partie terminé. 

J'ai réussi les 3 objectifs mais une idée m'est venu! Utiliser le compteur pour limiter la partie (pas très révolutionnaire^^). Mais c'est la que je rencontre le problème... En effet, mon compteur n'est pas pris en compte :( 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, const char * argv[])
{

    int nombreEntre = 0, nombreMystere = 0;
    int MAX = 0;
    int newGame = 1;
    int compteur = 0;
    const int MIN = 1;
    
    // Message de bienvenue
    
    printf("-------------------------------\n");
    printf("Bienvenue dans le JEU C+C-! \n");
    printf("-------------------------------\n");
   
    // boucle permettant de recommencer les parties
    
    do
    {
    // Présentation des niveaux
    printf("Niveau 1 : Le nombre mystère se situe entre 1 et 100, vous n'êtes pas limité par un nombre d'essaie \n");
    printf("Niveau 2 : Le nombre mystère se situe entre 1 et 200, vous êtes limité à 20 essaie \n");
    printf("Niveau 3 : Le nombre mystère se situe entre 1 et 300, vous êtes limité à 10 essaie \n");
    
    // Demande du niveau de jeu
    
    printf("Alors? Quel niveau choisisez vous? \n");
    scanf("%d", &MAX);
    
    switch (MAX)
    {
        case 1:
            MAX = 100;
            compteur = 100;
            break;
        case 2:
            MAX = 200;
            compteur = 20;
            break;
        case 3:
            MAX = 300;
            compteur = 10;
            break;
        default:
            printf("Vous avez choisi un niveau qui n'existe pas, veuillez recommencer");
            break;
    }
    
    printf("Très bien! vous avez choisi le niveau %d, Bonne chance à vous! \n", MAX);
    
    // On lance le nombre mystère
    
    srand(time(NULL));
    nombreMystere = (rand() % (MAX - MIN + 1) + MIN);
        
       do
       {
        do
        {
            printf("Quel est, selon vous, le nombre mystère ? \n");
            scanf("%d", &nombreEntre);
            
            if (nombreEntre > nombreMystere)
                printf("C'est moins \n");
            
            else if (nombreEntre < nombreMystere)
                printf("C'est plus \n");
            
            else if (nombreEntre != nombreMystere)
                compteur--;
            
            else
                printf("Bravo ! Vous avez trouvé le nombre mystère ! \n\n");
        } while (nombreEntre != nombreMystere);
           printf("désolé, vous n'avez plus aucun essaie \n\n");
       }while (compteur = 0);
        
        printf("Voulez vous recommencer une nouvelle partie ? Tapez 0 pour 'non' et 1 pour 'oui' \n\n");
        scanf("%d", &newGame);
        
    }while (newGame = 1);
   
    return 0;
}

J'ai essayé d'autre façon pour faire prendre en compte le compteur ; 

do
        {
            printf("Quel est, selon vous, le nombre mystère ? \n");
            scanf("%d", &nombreEntre);
            
            if (nombreEntre > nombreMystere)
                compteur--;
                printf("C'est moins \n");
            
            else if (nombreEntre < nombreMystere)
                compteur--;
                printf("C'est plus \n");
                       
            else
                printf("Bravo ! Vous avez trouvé le nombre mystère ! \n\n");
        } while (nombreEntre != nombreMystere || compteur = 0 );

Mais la, c'est tout le programme qui ne marche pas... 

Du coup, je viens demander votre aide ^^merci d'avance ! 

PS : quand j'insère le code, on ne me propose pas le langage C donc j'ai mis C#... je sais pas si ça va être compréhensible :/ 


-
Edité par AbcAbc6 16 juin 2020 à 1:02:24

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2020 à 2:31:06

Salut !

C'est cool de chercher à aller plus loin que ce qui est demandé, on voit pas souvent ça ! Ton code est aussi très propre, on ne galère pas quand on veut savoir à quel entité une accolade est associée.

Si j'ai bien compris le problématique: tu veux ajouter un compteur à ton programme qui te permettrait d'établir un plafond d'essai de réponse à ta partie. La technique des do/while dans les do/while ça porte à confusion, il faut réfléchir un minimum pour comprendre le code et ce qu'un développeur aime c'est de lire un code sans avoir à réfléchir. Alors, voici le modèle que je te propose:

Point d'entrée:
  Initialisation du jeu...
  COMPTEUR_ESSAIS -> 0
  PLAFOND_ESSAIS  -> 20

  Boucle du jeu:
    Boucle des essais:
      Si COMPTEUR_ESSAIS est égal à PLAFOND_ESSAIS:
        Stoooooop !
      Sinon:
        Incrémenter COMPTEUR_ESSAIS de 1

  Sortie du jeu...

Voilà ! Ca parait peut-être un peu naïf, mais ça fait probablement le taffe sans avoir à se casser la tête dans des tas de boucles.

Pour t'expliquer un peu ce pseudo-code (à ma sauce): Le programme est composé de deux boucle, la première sert à relancer une partie en cas de demande, la deuxième sert à redonner une chance de trouver la valeur générée. Dans la deuxième boucle, il y a une instruction "if" (située à la fin de la boucle do/while) qui détermine si la valeur de la variable représentant le nombre de parties jouées est égale à la valeur de la variable qui représente le plafond de parties jouées, si ce n'est pas le cas, on y ajoute 1, et tout recommence.

PS: Le langage qui se rapproche syntaxiquement le plus du C, c'est le C++ (qui en est le cousin le plus proche, avec Objective-C).

-
Edité par Daimyo_ 16 juin 2020 à 2:34:19

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2020 à 10:16:06

Salut,

Pour information, tes boucles do...while sont fausses.
Pour rappel une simple = est une affectation, pour faire une comparaison il faut utiliser un ==

De plus, cette ligne ne sert a rien :

else if (nombreEntre != nombreMystere)
                compteur--;

Vu qu'avant tu testes si ton nombreEntre est supérieur ou inférieur a nombreMystere, quand tu arrives a ce if, il est forcément égal. Donc tu n'entreras jamais dans ce if.

Encore autre chose, srand ne doit être appeler qu'une seule fois dans le programme, sors le de ta boucle.

-
Edité par ironwolf151 16 juin 2020 à 10:19:21

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2020 à 10:36:24

Lignes 80 et 85 il y a une erreur, une erreur classique... (Oups, ironwolf151 l'a déjà signalé.)

-
Edité par robun 16 juin 2020 à 10:37:11

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
16 juin 2020 à 11:43:02

Bonjour Daimyo ! 

Merci pour tes encouragements !

Si je comprends bien, je dois faire une autre boucle, une boucle qui agit sur les compteurs? Cependant, je ne sais pas trop ou les placer :o.

Je n'ai pas encore eu le temps de taper le code mais je ferai plusieurs essaie cet aprem et je t'enverrai mes ébauches ! 

Encore Merci !

Bonjour Ironwolf151 et robun! 

Merci d'avoir pris le temps de revérifier mon code ! et oui, effectivement, une petite erreur de débutant ^^" j'ai encore du mal avec les doubles égal :D 

Du coup, je vais tenter le même code, en modifiant ça et voir si ça marche ! Néanmoins, en re-regardant, je m'aperçois que le code que j'ai taper ne correspond pas à ce que je veux faire... en effet, ici, dès que mon compteur est égal à 0, je ne recommence pas une nouvelle partie, mais la même, avec le même 'nombreMystère'... Ma boucle doit permettre de changer le nombre mystère une fois que le compteur arrive à 0..

-
Edité par Anonyme 16 juin 2020 à 11:47:00

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2020 à 11:49:30

À ta place je corrigerais déjà les deux erreurs des lignes 80 et 85. Ce sera plus rapide, et je soupçonne que ces deux erreurs expliquent pourquoi ça ne marchait pas car, par ailleurs, ton algorithme a l'air correct à première vue (tu as bien une boucle sur les compteurs à l'intérieur d'une boucle sur les parties, tu as donc déjà mis en place le schéma proposé par Daimyo).

(Ah, tu as complété ton message pendant que je tapais le mien. En effet tu n'utilises pas la bonne condition, ce serait probablement quelque chose comme « while (compteur > 0) » puisque ce que tu appelles 'compteur' est en réalité le nombre de tentatives restantes. Par contre il me semble que l'ordre des 'while' est correct et que tu vas bien jouer une nouvelle partie, avec un nouveau nombre mystère, une fois que le « compteur » est mis à 0.)

-
Edité par robun 16 juin 2020 à 11:54:30

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2020 à 11:50:17

> Si je comprends bien, je dois faire une autre boucle

Pas vraiment, là, les boucles ne sont d'aucune utilité. Ce qu'on veut faire c'est une simple vérification avec une instruction "if".

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
16 juin 2020 à 14:34:27

Désolé pour les messages qui se poste et se re-poste sur le forum ^^" je suis pas encore habitué à son utilisation haha... 

Du coup, j'ai eu un peu de temps pour tester quelque modification cet aprem ! 

1er conclusion, cette méthode ne marche pas, même quand le (compteur = 0) est modifié en (compteur == 0)  : 

// le début du code n'est pas modifié et est identique à celui du premier post 
// On lance le nombre mystère

        
    srand(time(NULL));
    nombreMystere = (rand() % (MAX - MIN + 1) + MIN);

        do
        {
            printf("Quel est, selon vous, le nombre mystère ? \n");
            scanf("%d", &nombreEntre);
            compteur --;
            
            if (nombreEntre > nombreMystere && compteur != 0)
                printf("C'est moins et vous et il vous reste %d essaie \n", compteur);
            
            else if (nombreEntre < nombreMystere && compteur != 0 )
                printf("C'est plus et vous et il vous reste %d essaie \n", compteur);
            
            else if (nombreEntre == nombreMystere && compteur != 0); 
                printf("bravo ! vous avez trouvé le nombre mystère \n\n ");
            
            else     // <------ ici, l'IDE me met "Expected Expression" 
                printf("désolé, vous avez perdu ");
                       
        }while (nombreMystere != nombreEntre && compteur == 0);
    
   
    printf("Voulez vous recommencer une nouvelle partie ? Tapez 0 pour 'non' et 1 pour 'oui' \n\n");
    scanf("%d", &newGame);
        
    }while (newGame = 1);
    
    return 0;
}

Daimyo, je testerai la tienne ce soir, il faut que j'étudie un peu plus la structure ^^ je me perds un peu aussi dans mes boucles "do... while..." x)  

-
Edité par Anonyme 16 juin 2020 à 15:10:51

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2020 à 16:03:30

Forcément.

Alors, tu as toujours un problème avec le == ... (cf: ligne 31 avec le newGame = 1)

Concernant ta modification, elle ne risque pas de fonctionner en effet.
Si je lis ta condition tu dis:

"On boucle tant que NombreMystere est différent de NombreEntre ET tant que le compteur est égal 0"

Ce n'est pas ce que tu souhaites faire je pense, a mon avis tu veux boucler tant que NombreMystere est différent de NombreEntre ET tant que compteur est supérieur a 0. Non ?

De plus, pourquoi avoir rajouté tous les "&& compteur != 0" dans tes conditions ?
ils ne servent a rien, la condition de ta boucle devrait se charger de ça et non tes if a cet endroit.
Une fois fait et sorti de ta boucle il faudra juste verifier compteur pour savoir si tu dois afficher ton message de defaite ou non.

Je te laisse traduire ça en code et corriger le newGame = 1 ;)

-
Edité par ironwolf151 16 juin 2020 à 16:06:34

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2020 à 16:54:27

DavidU3 a écrit:

1er conclusion, cette méthode ne marche pas, même quand le (compteur = 0) est modifié en (compteur == 0)  :

Relis mon deuxième message, j'avais signalé qu'il ne faut pas le comparer ainsi mais autrement...

En fait, je crois qu'il fallait juste rectifier cette erreur. Ton premier programme était déjà tout près de la solution.

-
Edité par robun 16 juin 2020 à 16:57:11

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
16 juin 2020 à 21:58:35

Je reviens vers vous pour votre méthode robun et ironwolf à... presque marché ! (j'ai changé la comparaison du while (while (compteur != 0)) 

Je suis donc revenu sur mon premier code et corrigé les erreurs:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(int argc, const char * argv[])
{
 
    int nombreEntre = 0, nombreMystere = 0;
    int MAX = 0;
    int newGame = 1;
    int compteur = 0;
    const int MIN = 1;
     
    // Message de bienvenue
     
    printf("-------------------------------\n");
    printf("Bienvenue dans le JEU C+C-! \n");
    printf("-------------------------------\n");
    
    // boucle permettant de recommencer les parties
     
    do
    {
    // Présentation des niveaux
    printf("Niveau 1 : Le nombre mystère se situe entre 1 et 100, vous n'êtes pas limité par un nombre d'essaie \n");
    printf("Niveau 2 : Le nombre mystère se situe entre 1 et 200, vous êtes limité à 20 essaie \n");
    printf("Niveau 3 : Le nombre mystère se situe entre 1 et 300, vous êtes limité à 10 essaie \n");
     
    // Demande du niveau de jeu
     
    printf("Alors? Quel niveau choisisez vous? \n");
    scanf("%d", &MAX);
     
    switch (MAX)
    {
        case 1:
            MAX = 100;
            compteur = 100;
            break;
        case 2:
            MAX = 200;
            compteur = 20;
            break;
        case 3:
            MAX = 300;
            compteur = 10;
            break;
        default:
            printf("Vous avez choisi un niveau qui n'existe pas, veuillez recommencer");
            break;
    }
     
    printf("Très bien! vous avez choisi le niveau %d, Bonne chance à vous! \n", MAX);
     
    // On lance le nombre mystère
   
    srand(time(NULL));
    nombreMystere = (rand() % (MAX - MIN + 1) + MIN);
         
        do
        {
            printf("Quel est, selon vous, le nombre mystère ? \n");
            scanf("%d", &nombreEntre);
            compteur --;
            
            if (compteur == 0)
                printf("il ne vous reste plus aucun essaie, vous avez perdu la partie... \n\n");
             
            else if (nombreEntre > nombreMystere)
                printf("C'est moins \n et il vous reste %d essaie \n", compteur);
             
            else if (nombreEntre < nombreMystere)
                printf("C'est plus \n et il vous reste %d essaie  \n", compteur);
             
            else
                printf("Bravo ! Vous avez trouvé le nombre mystère ! \n\n");
        } while (compteur != 0 || nombreEntre != nombreMystere);
          
         
        printf("Voulez vous recommencer une nouvelle partie ? Tapez 0 pour 'non' et 1 pour 'oui' \n\n");
        scanf("%d", &newGame);
         
    }while (newGame == 1);
    
    return 0;
}

Néanmoins, si je restais à ma précédente version : 

  • Une fois arrivé à 0 essaie, le programme me sort " C'est plus/moins, il vous reste -1 essaie", allant dans les négatifs 
J'ai donc changé mon programme 
  • J'ai rajouté la première ligne, mettant une autre phrase quand le compteur attend 0. Néanmoins, il n'affiche qu'une phrase sans mettre fin au programme...
  • Dans la boucle do... while, j'ai donc rajouté "compteur !=0". Et la, ça marche! une fois que le compteur arrive à 0, mon programme me sort "voulez vous refaire une autre partie : oui / non". Mais... autre problème... maintenant, lorsque je tape le bon nombre, ma boucle ne sort plus et continuer à me demander inlassablement le même nombre mystère et me félicitant à chaque fois pour le même nombre 

En gros, la mon problème, c'est que lorsqu'il arrive a nombre mystère == nombre entrée, il ne veut plus sortir de la boucle. 

Néanmoins, le résultat me satisfait à moitié ^^parce que pour sortir de la boucle, une fois après avoir trouvé le bon nombre, il me suffit de le retaper jusqu'à que le compteur arrive à 0 et je sors de la boucle ^^

bon c'est pas ouf, mais je commence le langage C (et la programmation) et je pense que j'ai fixé un objectif un peu trop compliqué par rapport à mes connaissances/maitrise du langage... 

En tout cas, merci à vous tous ! 

PS : je pense que dans le while, on ne peut mettre qu'une condition pour sortir de la boucle, lorsque je tape :

  • while (compteur != 0); dès que le compteur arrive à 0 ça sort de la boucle 
  • while (nombreEntre != nombreMystere); dès que j'arrive au nombre mystère, ça sort de la boucle 
  • mais quand je met : while (nombreEntre != nombreMystere || compteur != 0); la ça marche pour la première condition qui est tapé. CAD que si je met nombre !=, c'est le nombre qui est pris en compte. Si je met compteur en premier, c'est le compteur qui est pris en compte... 

-
Edité par Anonyme 16 juin 2020 à 22:07:00

  • Partager sur Facebook
  • Partager sur Twitter
16 juin 2020 à 23:04:53

Hello,

Ligne 77: c'est and, et pas or (&& au lieu de ||)

Et pour le choix du niveau, si je réponds mal, le programme continue

Edit:

1) srand() ne s'exécute qu'une seule fois, en début de programme

2) indente convenablement ton code

-
Edité par edgarjacobs 16 juin 2020 à 23:09:09

  • Partager sur Facebook
  • Partager sur Twitter

On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

17 juin 2020 à 23:44:52

Bonjour. Vu que yu aimes bien te prendre la tête (un peu comme moi ^^) je vais te donner des conseils.

Moi personnellement j'utiliserai une boucle while (parce que j'aime bien ce type de boucle mais tu peux le faire avec un autre type de boucle) dans laquelle je mettrai la condition dir

  • Partager sur Facebook
  • Partager sur Twitter

Il n'y a pas de mauvaises inventions, juste des mauvaises pratiques.

Anonyme
18 juin 2020 à 9:40:32

Bonjour edgarjacobs et GalipetteCendrée ! 

Merci pour vos conseils ! Néanmoins j'ai "abandonné" (mis de coté plutôt^^) ce programme je poursuis le cours ^^ je reviendrai dessus quand j'aurai plus de connaissance :D! Je garde donc vos conseils bien au chaud pour pouvoir les tester plus tard ! 

PS : que veut dire "indente" stp ? j'ai fait une petite recherche et apparemment, ça à l'air de désigner la syntaxe du code mais je ne suis pas sûr xD 

  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2020 à 10:12:15

L'indentation c'est faire en sorte que toutes accolades soient alignés correctement.
Ca facilite grandement la lecture pour les autres, mais aussi et surtout, pour toi même. Ca te permet d'éviter des erreurs de syntaxes un peu bêtes.

// Bien indenté
int func()
{
   int iMaVar = 0;
   if (iMaVar == 0)
   {
      return 1;
   }
   return 0;
}

// Mal indenté
int func()
{
   int iMaVar = 0;
   if (iMaVar == 0)
{
   return 1;
     }
   return 0;
    }

Concernant ton code que tu laisses de coté, c'est ton choix, mais au moment ou le cours t'a donné cet exercice a faire tu avais toutes les connaissances necessaire.

En l'occurence avancer dans le cours ne t'apportera rien de vital a la résolution de cet exercice, revoir les cours précédents oui en revanche vu que tes lacunes semblaient plutôt sur des choses que tu as déjà vu.

  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2020 à 10:37:48

Je trouve que DavidU3 a raison de poursuivre. Normalement, avec les remarques d'edgarjacobs, il doit avoir un programme qui fonctionne. Que faire de plus ? Il y a des choses à faire en plus, pourquoi pas, mais après avoir vu le chapitre sur les fonctions.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
18 juin 2020 à 14:05:32

Merci pour les précisions! Je vais aller modifier ça de suite

Pour ce qui est du programme, tout ce qui est demandé, j’y suis parvenue, c’est-a-dire: 

- Faire une boucle

- Initier un compteur de coup 

- Mettre en place un niveau de difficulté

La chose sur laquelle je bloque concerne une amélioration que j’ai moi-même eu l'idée de faire!

J’y ai consacré une journée et je n’arrivais même plus à relire mon code :/ (en partie a cause de ma mauvaise « indentation » ^^). J’ai donc préféré le mettre de côté histoire de prendre un peu de recul! Je pense que c’est une erreur de débutant qui fait bloquer mon programme mais je n’ai plus le recul nécessaire pour y travailler dessus...

Mais j’y reviendrai! Ça c’est sûr !  

  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2020 à 14:17:48

La méthode de la condition qui vérifie si le nombre max d'essais est atteint, dans la "dernière" boucle m'a l'air plutôt simple...
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
18 juin 2020 à 18:00:42

Enfin ça marche !! 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(int argc, const char * argv[])
{
 
    int nombreEntre = 0, nombreMystere = 0;
    int MAX = 0;
    int newGame = 1;
    int compteur = 0;
    int partieMax = 0;
    const int MIN = 1;
     
    // Message de bienvenue
     
    printf("-------------------------------\n");
    printf("Bienvenue dans le JEU C+C-! \n");
    printf("-------------------------------\n");
    
    // boucle permettant de recommencer les parties
     
    do
    {
    // Présentation des niveaux
    printf("Choisissez votre niveau : \n\n");
    printf("Niveau 1 : Le nombre mystère se situe entre 1 et 100, vous n'êtes pas limité par un nombre d'essaie \n");
    printf("Niveau 2 : Le nombre mystère se situe entre 1 et 200, vous êtes limité à 20 essaie \n");
    printf("Niveau 3 : Le nombre mystère se situe entre 1 et 300, vous êtes limité à 10 essaie \n");
     
    // Demande du niveau de jeu
     
    printf("Alors? Quel niveau choisisez vous? \n");
    scanf("%d", &MAX);
     
    switch (MAX)
    {
        case 1:
            MAX = 100;
            partieMax = 100;
            break;
        case 2:
            MAX = 200;
            partieMax = 20;
            break;
        case 3:
            MAX = 1000;
            partieMax = 5;
            break;
        default:
            printf("Vous avez choisi un niveau qui n'existe pas, veuillez recommencer");
            break;
    }
     
    printf("Très bien! vous avez choisi le niveau %d, Bonne chance à vous! \n", MAX);
     
    // On lance le nombre mystère
   
    srand(time(NULL));
    nombreMystere = (rand() % (MAX - MIN + 1) + MIN);

    
        do
        {
            printf("Quel est, selon vous, le nombre mystère ? \n");
            scanf("%d", &nombreEntre);
            compteur ++;
            
             
            if (nombreEntre > nombreMystere)
                printf("C'est moins \n c'est votre : %d essaie \n", compteur);
        
            else if (nombreEntre < nombreMystere)
                printf("C'est plus \n  c'est votre : %d essaie \n", compteur);
            
             
            else
                printf("Bravo ! Vous avez trouvé le nombre mystère ! \n\n");
        } while (nombreMystere != nombreEntre && compteur != partieMax);
         
        printf("Voulez vous recommencer une nouvelle partie ? Tapez 0 pour 'non' et 1 pour 'oui' \n\n");
        scanf("%d", &newGame);
         
    }while (newGame == 1);
    
    return 0;
}

Je suis revenu sur le premier conseil de Daimyo qui proposait de définir un plafond maximum d'essaie au lieu de faire comme je le faisais depuis le début, c'est à dire un compteur qui tend vers 0 ! Avec vos corrections et les derniers conseils edgarjacobs (le && au lieu du ||) mon programme marche enfin ! 

C'est à dire:  

  • une fois le nombre trouvé, il me propose une nouvelle partie
  • une fois le nombre d'essaie == au nombre de partie max , il me propose également une nouvelle partie ! 

Maintenant, il me reste à modifier le problème dans les choix de difficulté (quand on sélectionne un lvl > 3, le programme continue) 

  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2020 à 18:11:57

DavidU3 a écrit:

Maintenant, il me reste à modifier le problème dans les choix de difficulté (quand on sélectionne un lvl > 3, le programme continue) 

Il suffit d'entourer les lignes 33 à 53 d'une boucle. Je te laisse chercher....

Edit: l'indentation, c'est pas encore ça. As-tu suivi le lien que je t'ai donné pour avoir des exemples ?

-
Edité par edgarjacobs 18 juin 2020 à 18:20:05

  • Partager sur Facebook
  • Partager sur Twitter

On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

Anonyme
18 juin 2020 à 18:18:24

int main(int argc, const char * argv[])
{
 
    int nombreEntre = 0, nombreMystere = 0;
    int MAX = 0;
    int newGame = 1;
    int compteur = 0;
    int partieMax = 0;
    int messageDeNiveau = 0;
    const int MIN = 1;
     
    // Message de bienvenue
     
printf("-------------------------------\n");
printf("Bienvenue dans le JEU C+C-! \n");
printf("-------------------------------\n");
    
    // boucle permettant de recommencer les parties
     
do
{
    // Présentation des niveaux
printf("Choisissez votre niveau : \n\n");
printf("Niveau 1 : Le nombre mystère se situe entre 1 et 100, vous n'êtes pas limité par un nombre d'essaie \n");
printf("Niveau 2 : Le nombre mystère se situe entre 1 et 200, vous êtes limité à 20 essaie \n");
printf("Niveau 3 : Le nombre mystère se situe entre 1 et 300, vous êtes limité à 10 essaie \n");
     
    // Demande du niveau de jeu
do
{
printf("Alors? Quel niveau choisisez vous? \n");
scanf("%d", &MAX);


    switch (MAX)
    {
        case 1:
            messageDeNiveau = 1;
            MAX = 100;
            partieMax = 100;
            break;
            
        case 2:
            messageDeNiveau = 2;
            MAX = 200;
            partieMax = 20;
            break;
            
        case 3:
            messageDeNiveau = 3;
            MAX = 300;
            partieMax = 10;
            break;
            
        default:
            printf("Vous avez choisi un niveau qui n'existe pas, veuillez recommencer \n");
            break;
    }
}while (MAX < 1 && MAX > 3);

printf("Très bien! vous avez choisi le niveau %d, vous avez donc %d essaie! Bonne chance à vous! \n", messageDeNiveau, partieMax);

J'en ai aussi profité pour rajouter la variable Message de niveau car quand on tape, par exemple 3, il affichait "vous avez choisi le niveau 300" 
Du coup, je suis arrivé à bout de ce premier programme ! Merci à vous tous pour votre aide ! :) 
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2020 à 18:25:50

Ta boucle est fausse. C'est or et pas and (|| au lieu de &&)... hé oui, c'est l'inverse de l'autre. Dans l'autre tu fais un test sur des ! conditions.

Tu vas devoir revoir l'algèbre de Boole :)

-
Edité par edgarjacobs 18 juin 2020 à 18:26:30

  • Partager sur Facebook
  • Partager sur Twitter

On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

Anonyme
18 juin 2020 à 18:39:58

Arf oui ! effectivement ça m'apprendra a mettre un programme sans tester avant ^^ parce qu'en testant, je voyais que ça marchait pas et j'allais venir enlever la balise résolu xD 

Pas simplement "revoir" l'algèbre mais "réapprendre" voire "apprendre" :D 

  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2020 à 19:25:14

Tu ne reinitialise jamais ton compteur.

Donc si tu recommences une partie, compteur a gardé sa valeur de la partie précédente.

  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2020 à 20:07:51

> Je suis revenu sur le premier conseil de Daimyo qui proposait de définir un plafond maximum d'essaie au lieu de faire comme je le faisais depuis le début, c'est à dire un compteur qui tend vers 0 !

C'était pourtant une bonne idée. Voir un compteur qui baisse et se rapproche de 0, ça a un côté ludique, je trouve. Par exemple il me semble que dans les jeux où l'on attribue des points de vie, ça marche avec ce système : le jeu affiche le nombre de vies restantes, pas le nombre de vies gaspillées.

-
Edité par robun 18 juin 2020 à 21:16:52

  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2020 à 20:10:47

robun a écrit:

C'était pourtant une bonne idée. Voir un compteur qui baisse et se rapproche de 0, ça a un côté ludique, je trouve. Par exemple il me semble que dans les jeux où l'on attribue des points de vue, ça marche avec ce système : le jeu affiche le nombre de vies disponibles, pas le nombre de vies gaspillées.

-
Edité par robun il y a moins de 30s


+1

Je ne suis pas gamer, mais je suis certain que je préférerais lire "il vous reste 5 balles" plutôt que "vous avez tirés 495 balles"

-
Edité par edgarjacobs 18 juin 2020 à 20:14:51

  • Partager sur Facebook
  • Partager sur Twitter

On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

23 juin 2020 à 0:03:24

C'est dommage parce que je trouve que tu t'étais découragé assez vite (1 journée). Moi pour améliorer le jeu "Plus ou Moins" par exemple j'y ai passé 4-5 jours en faisant plus d'amélioration que ce qui proposait et je pense que ça m'a bien fait avancé. Je trouve ça dommage mais après tout le monde n'a pas la même notion du codage. Moi c'est vrai que j'aimerai bien faire  des grandes choses (je pense comme la pluart) donc voila je me force un peu même si j'aime ça mais si toi c'est juste pour programer le dimanche et kiffé c'est pas dramatique en soit c'est même plutôt cool
  • Partager sur Facebook
  • Partager sur Twitter

Il n'y a pas de mauvaises inventions, juste des mauvaises pratiques.

23 juin 2020 à 3:40:26

Hello ! Il ne sert pas de persévérer quand on n'a pas les connaissances requises pour accomplir une mission. Je parie qu'avec des exemples et des morceaux de code divers, l'OP aurait mieux compris son erreur/problème qu'en restant sur cet exercice. Qu'on ait une certaine notion de la programmation ou qu'on en ait une autre, la façon dont on s'accroche à un exercice n'est que très peu représentative de l'ambition réelle d'une personne. Il se peut que l'OP ait lui aussi de grands projets en préparation.
  • Partager sur Facebook
  • Partager sur Twitter