Mini jeu en "c" (probleme)

Fermé
RainMaker - 5 sept. 2007 à 21:57
 titi - 6 sept. 2007 à 11:28
Bonjour,

Alors comme le dernier post que j'ai écris, je suis débutant en "c" ici suite au tutoriel d'apprentissage que je suis , j'ai du crée un jeu (plus ou moin) donc le pc choisis un chiffre aléatoire et le joueur doit trouver je chiffre.

Bon jusque la aucun probleme, mais j'ai voulu améliorer mon jeu en ajoutant des niveaux ( facile : trouver en 20 essais; moyen : trouver en 15 essais; difficile en 10 essais)

donc j'ai commencé a faire le code, tous va bien sauf quant j'ai mit la boucle général pour que les joueurs puisse recommencer une partie !

Donc j'explique clairement le probleme :

Lorsque la partie est finie et gagné (donc le joueur a trouver dans le nombre d'essais limiter) , la devrai apparaitre un message demandant si on veux recommencé une partie ou non ( si oui le menu des niveaux réapparai) , mais le message ne s'affiche pas et il recommence la partie, alors on rentre quelque chiffre au hasard et la, ça fonctionne, le message apparait...

Mais si on perd la partie le message s'affiche correctement

Donc je voudrais que lorsque le joueur gagne sa partie que le message lui demandant si il veut continué ou non s'affiche correctement !

Voici mon code :

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

int main(int argc, char *argv[])
{
    long nombreMystere = 0, nombreEntre = 0, coup = 0, menu = 0, choix = 0, compteur = 0, boucle = 0;
    const long MAX = 100, MIN = 1;


    
    printf("\t\t==============================================\n\t\t==== Bienvenu au jeu du ''Plus ou moins'' ====\n\t\t==============================================\n\n");
    printf("\t\t\t\t-------------------\n\t\t\t\t--- Instruction ---\n\t\t\t\t-------------------\n\n\n\nLe but de ce jeu est de trouver le chiffre entre 1 et 100 qui a ete aleatoirement choisi par l'ordinateur.");
   
       while (boucle = 1)
{
    
    srand(time(NULL));
    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
   
    printf("\n\nNiveau : \n\n1. Facile    : Trouvez le chiffre mystere en 20 coup maximum\n\n2. Moyen     : Trouvez le chiffre mystere en 15 coup maximum\n\n3. Difficile : Trouvez le chiffre mystere en 10 coup maximum  \n\n Quelle niveau desirez-vous ?   ");
    scanf("%ld", &menu);
    
   switch (menu)
{
          case 1 :
          while (compteur <= 20)
{
    compteur++;
    printf("\nQuelle est le chiffre mystere ?   ");
    scanf("%ld", &nombreEntre);
    
    if (nombreEntre < nombreMystere)
{
    printf("\n\t ***Et non ces plus***\n");
}
    else if (nombreEntre > nombreMystere)
{
    printf("\n\t ***Et non ces moin***\n");
}
    else
{
    printf("\n________________________________________________________________________________\n");
    printf("\n\n\t**** Woaw bien joue, le nombre mystere etait %ld ****", nombreEntre);
    printf("\n\n\t\t**** Tu as reussi en %ld essais ****", compteur);
    break;
}
}


    case 2 :
    while (compteur <= 15)
{  
    compteur++;
    printf("\nQuelle est le chiffre mystere ?   ");
    scanf("%ld", &nombreEntre);
    
    if (nombreEntre < nombreMystere)
{
    printf("\n\t ***Et non ces plus***\n");
}
    else if (nombreEntre > nombreMystere)
{
    printf("\n\t ***Et non ces moin***\n");
}
    else
{
    printf("\n________________________________________________________________________________\n");
    printf("\n\n\t**** Woaw bien joue, le nombre mystere etait %ld ****", nombreEntre);
    printf("\n\n\t\t**** Tu as reussi en %ld essais ****", compteur);
    break;
}       
}

        case 3 :
        while (compteur <= 10)
{
                 compteur++;
    printf("\nQuelle est le chiffre mystere ?   ");
    scanf("%ld", &nombreEntre);
    
    if (nombreEntre < nombreMystere)
{
    printf("\n\t ***Et non ces plus***\n");
}
    else if (nombreEntre > nombreMystere)
{
    printf("\n\t ***Et non ces moin***\n");
}
    else
{
    printf("\n________________________________________________________________________________\n");
    printf("\n\n\t**** Woaw bien joue, le nombre mystere etait %ld ****", nombreEntre);
    printf("\n\n\t\t**** Tu as reussi en %ld essais ****", compteur);
    break;
}
} 


    printf("\n\ndesirez-vous faire une nouvelle partie ? ?\n\n1. Oui\n2. Non\n\nVotre choix : ");
    scanf("%ld", &boucle);
    
    if (boucle == 1) 
{
    printf("\n\nQuelle niveau desirez-vous ?   ");
    printf("\n\n");
}

    if (boucle != 1) 
{   
     
    printf("\n\n Merci d'avoir joue avec moi, a plus tard pour d'autre test");
    printf("\n\n=== by rainmaker ===");
    printf("\n\n");
    system("PAUSE");
    return 0;
}
}
}

  system("PAUSE");	
  return 0;               
}



Merci d'avance !
Et j'aimerais réelement trouver une réponse afin de passer au chapitre suivant.
A voir également:

2 réponses

maxwells Messages postés 25 Date d'inscription lundi 3 janvier 2005 Statut Membre Dernière intervention 24 juin 2008 1
6 sept. 2007 à 08:40
Salut à toi RainMaker,
Le problème que tu as est simple.
Tu as créé une boucle pour chaque niveau (While compteur <= 20)
et lorsque le joueur trouve le nombre, la variable compteur remplie forcément la condition de la boucle. il faut donc que tu donne une valeur supérieur à 20 (moi j'ai mis 999 mais 21 suffit) à ta variable compteur après avoir affiché le message de fin de partie(partie gagnée).
Puis, lorsque tu réaffiche le message de sélection de niveau après que le joueur ai accepter de rejouer, il faut réinitialiser la variable compteur à 0.

Voilà ton code modifié et corrigé :

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

int main(int argc, char *argv[])
{
	long nombreMystere = 0, nombreEntre = 0, coup = 0, menu = 0, choix = 0, compteur = 0, boucle = 0;
	const long MAX = 100, MIN = 1;



	printf("\t\t==============================================\n\t\t==== Bienvenu au jeu du ''Plus ou moins'' ====\n\t\t==============================================\n\n");
	printf("\t\t\t\t-------------------\n\t\t\t\t--- Instruction ---\n\t\t\t\t-------------------\n\n\n\nLe but de ce jeu est de trouver le chiffre entre 1 et 100 qui a ete aleatoirement choisi par l'ordinateur.");

	while (boucle = 1)
	{

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

		printf("\n\nNiveau : \n\n1. Facile    : Trouvez le chiffre mystere en 20 coup maximum\n\n2. Moyen     : Trouvez le chiffre mystere en 15 coup maximum\n\n3. Difficile : Trouvez le chiffre mystere en 10 coup maximum  \n\n Quelle niveau desirez-vous ?   ");
		scanf("%ld", &menu);

		switch (menu)
		{
			case 1 :
			while (compteur <= 20)
			{
				compteur++;
				printf("\nQuelle est le chiffre mystere ?   ");
				scanf("%ld", &nombreEntre);

				if (nombreEntre < nombreMystere)
				{
					printf("\n\t ***Et non ces plus***\n");
				}
				else if (nombreEntre > nombreMystere)
				{
					printf("\n\t ***Et non ces moin***\n");
				}
				else
				{
					printf("\n________________________________________________________________________________\n");
					printf("\n\n\t**** Woaw bien joue, le nombre mystere etait %ld ****", nombreEntre);
					printf("\n\n\t\t**** Tu as reussi en %ld essais ****", compteur);
					compteur =999;
					break;
				}
			}


			case 2 :
			while (compteur <= 15)
			{
				compteur++;
				printf("\nQuelle est le chiffre mystere ?   ");
				scanf("%ld", &nombreEntre);

				if (nombreEntre < nombreMystere)
				{
					printf("\n\t ***Et non ces plus***\n");
				}
				else if (nombreEntre > nombreMystere)
				{
					printf("\n\t ***Et non ces moin***\n");
				}
				else
				{
					printf("\n________________________________________________________________________________\n");
					printf("\n\n\t**** Woaw bien joue, le nombre mystere etait %ld ****", nombreEntre);
					printf("\n\n\t\t**** Tu as reussi en %ld essais ****", compteur);
					compteur=999;
					break;
				}       
			}

			case 3 :
			while (compteur <= 10)
			{
				compteur++;
				printf("\nQuelle est le chiffre mystere ?   ");
				scanf("%ld", &nombreEntre);

				if (nombreEntre < nombreMystere)
				{
					printf("\n\t ***Et non ces plus***\n");
				}
				else if (nombreEntre > nombreMystere)
				{
					printf("\n\t ***Et non ces moin***\n");
				}
				else
				{
					printf("\n________________________________________________________________________________\n");
					printf("\n\n\t**** Woaw bien joue, le nombre mystere etait %ld ****", nombreEntre);
					printf("\n\n\t\t**** Tu as reussi en %ld essais ****", compteur);
					compteur=999;
					break;
				}
			} 


			printf("\n\ndesirez-vous faire une nouvelle partie ? ?\n\n1. Oui\n2. Non\n\nVotre choix : ");
			scanf("%ld", &boucle);

			if (boucle == 1) 
			{
                compteur=0;
				printf("\n\nQuelle niveau desirez-vous ?   ");
				printf("\n\n");
			}

			if (boucle != 1) 
			{   

				printf("\n\n Merci d'avoir joue avec moi, a plus tard pour d'autre test");
				printf("\n\n=== by rainmaker ===");
				printf("\n\n");
				system("PAUSE");
				return 0;
			}
		}
	}

	system("PAUSE");	
	return 0;               
}


Voilà c'est un bug qui n'est pas forcément visible dès le premier coup d'oeil
Voilà j'espère que mes explications sont claires.
@+
0
tres bon code bien presenter instancier
doux l'importance d'avoir un code claire et detaillier pour voir les bugs possible
bye bye
0