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èmes fin d'instructions jeu du + ou du -


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Par défaut Problèmes fin d'instructions jeu du + ou du -
    Bonjour,

    je vous contacte car je débute en programmation et je suis les exercices en C d'un autre site et je coince sur le jeu du + ou du - avec ses amélioration. Mon projet compile bien, j'arrive à me déplacer entre les différents menu mais je n'arrive pas à sortir de ma fonction "difficultes", quand je lance le jeu, il tourne sans cesse. J'imagine qu'il y a une erreur au niveau de mes fins d'instructions mais je bloque vraiment.

    Merci d'avance pour votre temps et votre aide !

    voici le code :

    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
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    void menu();
    void findNbr(int MIN, int MAX, int nombreMystere);
    void multijoueurs();
    void difficultes(int level);
     
    void menu(){
    	system("cls");
    	int answerMenu = 0;
    	int nombreMystere = 0;
    	nombreMystere = (rand() % (100 - 1 + 1)) + 1;
     
    	printf("============ Menu ============ \n");
    	printf("1. Partie rapide \n");
    	printf("2. Nombre de joueurs \n");
    	printf("3. Niveaux de difficultes \n");
    	printf("============================== \n");
     
    	scanf_s("%d", &answerMenu);
     
    	if (answerMenu == 1){
    		findNbr(1,100, nombreMystere);
    	}
    	else if (answerMenu == 2){
    		multijoueurs();
    	}
    	else if (answerMenu == 3){
    		difficultes(0);
    	}
    	else {
    		menu();
    	}
    }
     
    void difficultes(int level){
    	system("cls");
    	int hardLevel = 0;
    	int nbr_mystere = 0;
     
    	do{
    		printf("choississez votre difficultes \n");
    		printf("1 - 1 a 100 \n\n");
    		printf("2 - 1 a 1000 \n\n");
    		printf("3 - 1 a 10 000\n\n");
    		printf("4 - Retour menu\n\n");
     
    		// si il y a un joueur
    		if (level == 0){
    			do {
    				scanf_s("%d \n", &hardLevel);
     
    				if (hardLevel == 1){
    					findNbr(1, 100, nbr_mystere);
    				}
    				else if (hardLevel == 2){
    					findNbr(1, 1000, nbr_mystere);
    				}
    				else if (hardLevel == 3){
    					findNbr(1, 10000, nbr_mystere);
    				}
    				else if (hardLevel == 4){
    					menu();
    				}
    				else{
    					printf("veuillez entrer une valeure correcte");
    				}
    			} while (hardLevel != 1 && hardLevel != 2 && hardLevel != 3 && hardLevel != 4);
    		}
    		// si il y a deux joueurs :
    		else if (level == 1){
    			do{
    				scanf_s("%d \n", &hardLevel);
     
    				if (hardLevel == 1){
    					printf("Choisissez le nombre a deviner : \n");
    					scanf_s("%d", &nbr_mystere);
    					findNbr(1, 100,nbr_mystere);
    				}
    				else if (hardLevel == 2){
    					scanf_s("%d", &nbr_mystere);
    					findNbr(1, 1000, nbr_mystere);
    				}
    				else if (hardLevel == 3){
    					scanf_s("%d", &nbr_mystere);
    					findNbr(1, 10000, nbr_mystere);
    				}
    				else if (hardLevel == 4){
    					menu();
    				}
    				else{
    					printf("veuillez entrer une valeure correcte");
    				}
    		} while (hardLevel != 1 && hardLevel != 2 && hardLevel != 3 && hardLevel != 4);
     
    		}
    		else{
    			printf("il y a un problème dans la matrix");
    		}
    	} while (level != 0 && level != 1);
    }
     
    void multijoueurs(){
    	system("cls");
    	int nbr_joueurs = 0;
     
    	do {
    		printf("Combien de joueurs ? \n");
    		printf("1 - Un joueur \n");
    		printf("2 - Deux joueurs \n");
    		printf("3 - Retourner au menu \n");
     
    		scanf_s("%d", &nbr_joueurs);
     
    		if (nbr_joueurs == 1){
    			difficultes(0); 
    		}
    		else if (nbr_joueurs == 2){
    			difficultes(1);
    		}
    		else if (nbr_joueurs == 3){
    			menu();
    		}
    		else{
    			printf("test else nbrjoueurs \n");
    		}
    	} while (nbr_joueurs != 1 && nbr_joueurs != 2 && nbr_joueurs != 3);
     
    }
     
     
    void findNbr(int MIN, int MAX, int nombreMystere){ 
    	system("cls");
     
    	int nombrePlayer = 0;
     
    	int compteur = 0;
    	int continuerPartie = 1;
     
    	srand(time(NULL));
     
    	while (continuerPartie) {
     
    		printf("%d \n\n", nombreMystere);
     
    		do {
    			printf("Entre un nombre : \n");
    			scanf_s("%d", &nombrePlayer);
    			compteur++;
    			if (nombrePlayer < nombreMystere){
    				printf("C'est plus, continue ! \n");
    			}
    			else if (nombrePlayer > nombreMystere){
    				printf("C'est moins, continue ! \n");
    			}
    			else {
    				printf("Bravo ! Tu as trouve en %d coup(s)! \n ", compteur);
    			}
    		} while (nombrePlayer != nombreMystere);
     
    		printf("Entrez 1 pour continuer ou 0 pour arreter  : \n");
    		scanf_s("%d", &continuerPartie);
    		if (continuerPartie == 1){
    			menu();
    		}
    		else
    			exit(EXIT_SUCCESS);
    	}
    }
     
    int main(){
     
    	menu();
    	return (0);
    }

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Rien n'altère la valeur de la variable level, présente dans la condition d'arrêt de la boucle de cette fonction qui ne contient ni break, ni goto. Comment veux-tu que la boucle s'arrête ?

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Les scanf( "%s \n", ... ); me paraissent dangeureux (l'utilisation du scanf l'est toujours), a fonction exigeant d'avoir un nombre entier, un espace et un CR.
    Une utilisation en 2 temps :
    * fgets()
    * sscanf()
    Me parait plus sécuritaire, mais il doit peut-être y avoir plus propre.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 6
    Par défaut
    Merci pour vos retours.

    Justement je n'arrive pas à trouver ce qui pourrait m'en sortir, j'ai essayé avec la même sortie que pour les deux do imbriqués mais ça ne fonctionnent pas non plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hardLevel != 1 && hardLevel != 2 && hardLevel != 3 && hardLevel != 4
    Est-ce que je dois rajouter une variable qui me permettrait de sortir de mon do ?

    Je n'ai pas encore vu fgets() et sscanf() mais du coup je vais regarder comment m'en servir, merci

  5. #5
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Nous ne pouvons pas t'aider car nous ne savons pas ce que tu cherches à obtenir.

    Je pense que le souci vient du fait que tu essaies de décrire tout le système d'une traite. J'ai conscience que c'est probablement un squelette de programme que l'on t'as donné mais vas-y plutôt progressivement : divises le problème global en sous-problèmes que tu implémentes et intègres séquentiellement ou que tu implémentes parallèlement puis fusionnes.

    Dans ton cas ça donnerait un truc comme : je veux construire un système qui affiche un menu et récupère les entrées utilisateur. Ok, donc :
    • Je commence par afficher un menu, à savoir une chaîne de caractères à plusieurs lignes. Juste ça, sans boucle. Check.
    • Je récupère une entrée utilisateur - n'importe quoi, peu importe - puis je l'affiche pour vérifier (echo).
    • J'ajoute une boucle et je compare cette entrée à une valeur spécifique qui permettra de sortir de la boucle.
    • J'écris le code qui va bien pour prendre en compte le niveau de difficulté choisi par l'utilisateur et le stocker quelque part.
    • ...
    • J'ajoute le cas multijoueur.
    • Etc...

Discussions similaires

  1. [VBScript] Problème avec fin d'instruction attendue
    Par MateoFalcon dans le forum VBScript
    Réponses: 27
    Dernier message: 21/06/2013, 10h29
  2. problème fin de string sous windows 98
    Par LAPLACE dans le forum Windows
    Réponses: 1
    Dernier message: 07/03/2006, 11h09
  3. Problème avec l'instruction IN : 16 bits retournés
    Par HadiNET dans le forum Assembleur
    Réponses: 4
    Dernier message: 11/02/2006, 17h43
  4. Problème avec une instruction OUTER /Postgres
    Par Volcomix dans le forum Langage SQL
    Réponses: 14
    Dernier message: 21/04/2004, 16h56
  5. [TASM] Problème concernant l'instruction LGDT
    Par Ninkosen dans le forum Assembleur
    Réponses: 3
    Dernier message: 15/07/2002, 19h09

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