Projet ''Le Jeu des Allumettes"

Fermé
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017 - Modifié par jeandchanel le 15/08/2016 à 09:13
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017 - 22 août 2016 à 09:25
Bonjour,

J'ai un soucis avec ce jeu en construction, le mode "multi" ne s'affiche pas correctement ! Quelqu'un peut - il m'aider ? Svp !
int main(int argc, char *argv[])
{
   int modeJeu = 0, modeMenu = 0, userChoice = 0, choice;
   NiveauJeu niveauJeu = {"", 0, 0};
   debutPartie();
 do
 {
   modeJeu = demanderModeJeu();
   printf("Bienvenu au mode %s !\n", modeJeu == SOLO ? "Solo" : "Multi");

   niveauJeu = demanderNiveauJeu();
   printf("Bienvenu au niveau %s !\n", niveauJeu.nomNiveau);
   
   userChoice = modeJeu == SOLO ? menuSolo() : player1VsPlayer2();
   printf("\nVous avez choisi %s !\n", userChoice == 1 ? "HumanVSOrdi" : "Predefini(20)");
   userChoice == 1 ? ordiVsPlayer() : nbPredefini() ; 
   
   
   
   
   
 }while(rejouerPartie(choice));
   
   
  
  return EXIT_SUCCESS;
}


Voici d'ailleurs une phase de jeu, on voit bien qu'il y a des interférences !

Votre choix ? 2
Bienvenu au mode Multi !

NIVEAU DE JEU
Bien vouloir choisir un niveau de jeu !
1. Facile
2. Moyen
3. Difficile

Votre choix ? 1
Bienvenu au niveau Facile !

Salut, je suis la fonction player1VsPlayer2 et je suis en construction !
Vous avez choisi HumanVSOrdi !

J1, Nombre d'allumettes a enlever : 


A voir également:

3 réponses

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
15 août 2016 à 14:55
Bonjour,

Impossible de t'aider avec ces informations.
  • question non claire
  • code fourni ne permet pas de voir un problème
  • où est le problème dans l'exemple ?

Essaie de préciser s'il te plait.
Je tente quand même une réponse, la fonction player1VsPlayer2() retourne-t-elle la 'bonne' valeur?
0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017
17 août 2016 à 09:12
@Dalfab,

la fonction
player1VsPlayer2
est une fonction en construction! elle retourne un 1 provisoirement ! Le jeu lui même est encore en construction, je suis encore au niveau des menus mais l'affichage me déçois confère
0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017
18 août 2016 à 08:34
confère le déroulement de la partie que j'ai posté .
MODE DE JEU
Bien vouloir choisir un mode de jeu !
1. Mode Solo
2. Mode Multi

Votre choix ? 2
Bienvenu au mode Multi !

NIVEAU DE JEU
Bien vouloir choisir un niveau de jeu !
1. Facile
2. Moyen
3. Difficile

Votre choix ? 1
Bienvenu au niveau Facile !

Salut, je suis la fonction player1VsPlayer2 et je suis en construction !
Vous avez choisi HumanVSOrdi !

J1, Nombre d'allumettes a enlever : 

la ligne Vous avez choisi HumanVSOrdi ! et la ligne J1, Nombre d'allumettes a enlever : appartiennent au Mode Solo et n'ont rien a faire la !!!
0
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
Modifié par totodunet le 18/08/2016 à 10:32
salut,

je confirme que c'est pas très clair ton code.

il faudrait que tu mettes tout ton code pour mieux t'aider. Déjà on sait pas où est l'instruction qui affiche "J1, Nombre d'allumettes à enlever :"

ensuite comme ta fonction player1VsPlayer2() retourne 1, ton userChoice vaut 1 quand modeJeu != SOLO

userChoice = modeJeu == SOLO ? menuSolo() : player1VsPlayer2();


Ce qui dans le printf te fait afficher "HumanVSOrdi"


Qui ne tente rien n'a rien
0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017
18 août 2016 à 10:50
@totodunet
voici le code complet :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#define SOLO 1
#define MULTI 2

typedef enum bool bool;
enum bool
{
    TRUE, FALSE
};

typedef struct NiveauJeu NiveauJeu;
struct NiveauJeu
{
    char nomNiveau[100];
    int min;
    int max;
};

NiveauJeu niveaux[] =            
{                             
    {"Facile", 13, 100},
    {"Moyen", 13, 50},
    {"Difficile", 13, 25}
};

void viderBuffer()
{
    int c = 0;
    while(c != '\n' && c != EOF)
    {
        c = getchar();
    }
}

int lire(char* chaine, int longueurChaine)
{
     char* positionEntree = NULL;
    
    if(fgets(chaine, longueurChaine, stdin) != NULL)
    {
        positionEntree = strchr(chaine, '\n');
        
        if(positionEntree != NULL)
        {
           *positionEntree = '\0';
        }return 1;
    }else
    {
       viderBuffer();
       return 0;
    }
    
}

long lireLong()
{
    char nombreTexte[100] = {0};
    if(lire(nombreTexte, 100))
    {
        return strtol(nombreTexte, NULL, 10);
    }else
    {
        viderBuffer();
        return 0;
    }
}



double lireDouble()
{
   char nombreTexte[100] = {0};
   char *positionVirgule = NULL;
   if(lire(nombreTexte, 100))
   {
       positionVirgule = strchr(nombreTexte, ',');
       if(positionVirgule != NULL)
       {
         *positionVirgule = '.';
       }return strtod(nombreTexte, NULL);
   }else
   {
      viderBuffer();
      return 0;
   }
}

void debutPartie()
{
   printf("\n"
          "**************************************\n"
          "********LE JEU DES ALLUMETTES*********\n"
          "********Code par Jean Dechanel********\n"
          "**************************************\n\n");
}

int demanderMenu()
{
    long modeMenu = 0;
    printf("\n"
           "MENU\n"
           "Bien vouloir choisir !\n"
           "1. Nombre Predefini(21)\n2. Nombre Aleatoire\n3. Fixer un Nombre\n");
    do
    {
        printf("\n"
               "Votre choix ? ");
        modeMenu = lireLong();
    }while(modeMenu < 1 || modeMenu > 2);
    
    return modeMenu; 
}

int demanderModeJeu()
{
    long modeJeu = 0;
    printf("\n"
           "MODE DE JEU\n"
           "Bien vouloir choisir un mode de jeu !\n"
           "1. Mode Solo\n2. Mode Multi\n");
    do
    {
        printf("\n"
               "Votre choix ? ");
        modeJeu = lireLong();
    }while(modeJeu < 1 || modeJeu > 2);
    
    return modeJeu;
}

NiveauJeu demanderNiveauJeu()
{
    long choixNiveau = 0;
    printf("\n"
           "NIVEAU DE JEU\n"
           "Bien vouloir choisir un niveau de jeu !\n"
           "1. Facile\n2. Moyen\n3. Difficile\n");
    do
    {
      printf("\n"
             "Votre choix ? ");
      choixNiveau = lireLong();
    }while(choixNiveau < 1 || choixNiveau > 3);
    
    return niveaux[choixNiveau - 1];
   
}

bool rejouerPartie(long choice)
{
    printf("\n"
           "Voulez-vous rejouer une autre Partie ?\n"
           "1. Oui\n2. Non\n");
    do
    {
        printf("\n"
               "Votre choix ? ");
        choice = lireLong();
    }while(choice < 1 || choice > 2);
    
    return choice == 1;
}

int menuSolo()
{
   long userChoice = 0;
   printf("\n"
          "Que voulez-vous faire ?\n"
           "1. Affronter l'Ordinateur ?\n2. Affronter l'Ordi. avec un nombre Predefini(20) ?\n");
    do
    {
        printf("\n"
               "Votre choix ? ");
        userChoice = lireLong();
    }while(userChoice < 1 || userChoice > 2);
    
    return userChoice; 
}

int ordiVsPlayer()
{
    int J1, nbAEnlever, nbDepart = rand() % 30;
    
    printf("\nJ1, Nombre d'allumettes a enlever : ");
   scanf("%d", &nbAEnlever);
   
   if(nbAEnlever == 3)
   {
     J1 = nbDepart - 3;
   }
   printf("Il reste %d\n", J1);
    return 1;
}

int nbPredefini()
{
    printf("\nTest fonction nbPredefini !");
    return 1;
}

int player1VsPlayer2()
{

    printf("\nSalut, je suis la fonction player1VsPlayer2 et je suis en construction !");
    
    
    return 1;
}

int main(int argc, char *argv[])
{
   int modeJeu = 0, modeMenu = 0, userChoice = 0, choice;
   NiveauJeu niveauJeu = {"", 0, 0};
   debutPartie();
 do
 {
   modeJeu = demanderModeJeu();
   printf("Bienvenu au mode %s !\n", modeJeu == SOLO ? "Solo" : "Multi");

   niveauJeu = demanderNiveauJeu();
   printf("Bienvenu au niveau %s !\n", niveauJeu.nomNiveau);
   
   userChoice = modeJeu == SOLO ? menuSolo() : player1VsPlayer2();
   printf("\nVous avez choisi %s !\n", userChoice == 1 ? "HumanVSOrdi" : "Predefini(20)");
   userChoice == 1 ? ordiVsPlayer() : nbPredefini() ; 
   
   
   
   
   
 }while(rejouerPartie(choice));
   
   
  
  return EXIT_SUCCESS;
}
0
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
18 août 2016 à 11:02
ok merci, ça permet de confirmer

donc comme j'ai dit plus haut, comme ta fonction player1VSPlayer2() renvoie pour l'instant 1, quand tu choisis le mode multi, tu appelles bien cette fonction et userChoice vaut obligatoirement 1
ce qui dans le printf qui suit dans le main fait afficher "Vous avez choisi HumanVSOrdi" et dans l'instruction qui suit encore appelle bien la fonction ordiVsPlayer()

// modeJeu != SOLO donc userChoice = playerVsPlayer2() (userChoice = 1)
userChoice = modeJeu == SOLO ? menuSolo() : player1VsPlayer2();
// affiche Vous avez chosis HumanVSOrdi
   printf("\nVous avez choisi %s !\n", userChoice == 1 ? "HumanVSOrdi" : "Predefini(20)");
// appel de ordiVSPlayer
   userChoice == 1 ? ordiVsPlayer() : nbPredefini() ;
0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017
Modifié par jeandchanel le 18/08/2016 à 12:23
@totodunet
Que dois je donc faire pour corriger tout ça ?
Voici ce qui se passe quand toutes les fonctions ne renvoient rien.
MODE DE JEU
Bien vouloir choisir un mode de jeu !
1. Mode Solo
2. Mode Multi

Votre choix ? 2
Bienvenu au mode Multi !

NIVEAU DE JEU
Bien vouloir choisir un niveau de jeu !
1. Facile
2. Moyen
3. Difficile

Votre choix ? 1
Bienvenu au niveau Facile !

Salut, je suis la fonction player1VsPlayer2 et je suis en construction !
Vous avez choisi Predefini(20) !

Test fonction nbPredefini !
Voulez-vous rejouer une autre Partie ?
1. Oui
2. Non

Votre choix ? 
0
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
18 août 2016 à 12:31
tu veux corriger quoi ?
0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017
18 août 2016 à 12:48
@totodunet
Que faut il faire pour que ca marche normalement ?
0
paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 25
20 août 2016 à 13:10
userChoice = modeJeu == SOLO ? menuSolo() : player1VsPlayer2();
   printf("\nVous avez choisi %s !\n", userChoice == 1 ? "HumanVSOrdi" : "Predefini(20)");
   userChoice == 1 ? ordiVsPlayer() : nbPredefini() ; 


Selon le mode du jeu, tu appelles ou la fonction menuSolo(), ou la fonction player1VsPlayer2(). La première retourne soit 1, soit 2 et la deuxième retourne toujours 1.
Je n'ai pas du tout compris la signification de ces retours (surtout dans la fonction player1VsPlayer2), mais pour lui donner une signification différente selon la fonction qui a été appelée (menuSolo() ou player1VsPlayer2()), il faut faire une condition qui englobe aussi le printf().

if (modeJeu == SOLO) {
     userChoice = menuSolo();
     printf("\nVous avez choisi %s !\n", userChoice == 1 ? "HumanVSOrdi" : "Predefini(20)");
   userChoice == 1 ? ordiVsPlayer() : nbPredefini(); 
    /* Suite du code en solo */
} else { // modeJeu == MULTI
    userChoice = player1VsPlayer2();
    printf("\nTexte à afficher après avoir appeler la fonction player1VsPlayer2(), supprimer ce printf s'il n'y a rien à afficher\n");
    /* Suite du code en multi */
}

0
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017
22 août 2016 à 09:25
Bonjour Paly2, ca marche, merci beaucoup !
0