Bonjour à tous ! . pouvez vous me donner votre avis sur mon code ?
il s'agit du TP du jeu du plus ou du moins amélioré. comme il n'y a pas de correction sur le site je voulais avoir des avis. merci d'avance !
PS : je n'ai pas encore étudié les fonctions et les tableaux. je n'ai utilisé que des conditions et des boucles.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
int tentative, nbreJoueurs, difficultePartie, nbreMax, echec = 1, nouvellePartie = 1, nombreMystere, nbreTentatives = 1;
const int MIN =1;
while (nouvellePartie)
{
nbreJoueurs = 0;
difficultePartie = 0;
printf("=== Choix du nombre de joueurs ==== \n1 - 1 joueur \n2 - 2 joueurs\n");
while (!(nbreJoueurs == 1 || nbreJoueurs == 2))
{
scanf("%d", &nbreJoueurs);
if (nbreJoueurs == 1)
{
printf("Ok ! Vous venez de selectionner le mode \"1 joueur\" \n");
}
else if (nbreJoueurs == 2)
{
printf("Ok ! Vous venez de selectionner le mode \"2 joueurs\" \n");
}
else
{
printf("Je n'ai pas compris votre saisi ! Veuillez selectionner le mode de la partie svp !\n");
}
}
printf("=== Choix de la difficulte de la partie \n1 - entre 1 et 100 \n2 - entre 1 et 1000 \n3 - entre 1 et 10000\n");
while (!(difficultePartie == 1 || difficultePartie == 2 || difficultePartie == 3))
{
scanf("%d", &difficultePartie);
if (difficultePartie == 1)
{
nbreMax = 100;
}
else if (difficultePartie == 2)
{
nbreMax = 1000;
}
else if (difficultePartie ==3)
{
nbreMax = 10000;
}
else
{
printf("Je n'ai pas compris votre saisi ! Veuillez saisir votre choix svp !\n");
}
}
printf("C'est parti !\n");
if (nbreJoueurs == 1)
{
srand(time(NULL));
nombreMystere = (rand() % (nbreMax - MIN + 1)) + MIN;
}
else
{
do
{
printf("Veuillez saisir le nombre a deviner :\n");
scanf("%d", &nombreMystere);
if (!(nombreMystere > 1 && nombreMystere < nbreMax ))
{
printf("Le nombre mystere doit etre compris entre 1 et %d !\n", nbreMax);
}
} while (!(nombreMystere > 1 && nombreMystere < nbreMax));
}
printf("Veuillez saisir un nombre entre 1 et %d.\n", nbreMax);
scanf("%d", &tentative);
if (tentative == nombreMystere)
{
printf("Waw ! Quelle chance ! Vous avez trouve du premier coup !\n");
}
else
{
while (echec)
{
if (tentative > 1 && tentative < nombreMystere && tentative < nbreMax)
{
printf("C'est plus !\n");
scanf("%d", &tentative);
nbreTentatives++;
}
else if (tentative > 1 && tentative > nombreMystere && tentative < nbreMax )
{
printf("C'est moins !\n");
scanf("%d", &tentative);
nbreTentatives++;
}
else if (tentative == nombreMystere)
{
printf("Bravo ! vous avez trouve le nombre mystere en %d tentatives\n", nbreTentatives);
echec = 0;
}
else
{
printf("Le nombre doit être compris entre 1 et %d ! Veuillez recommencer ! \n", nbreMax);
scanf("%d", &tentative);
nbreTentatives++;
}
}
}
printf("Voulez vous lancer une autre partie ? Tapez 1 pour OUI et 0 pour NON !\n");
scanf("%d", &nouvellePartie);
if (nouvellePartie)
{
printf("Ok ! c'est reparti !\n");
}
else if (nouvellePartie == 0)
{
printf("Ok pas de souci ! Au revoir !\n");
}
else
{
printf("Je regrette mais je n'ai pas saisi votre reponse.. au revoir !\n");
}
}
return 0;
}
Ta variable difficultePartie va de 1 à 3 nbreMax prend les valeurs 10, 100, 1000 Après que tu te sois assuré que difficultePartie est correct, tu pourrais simplifier le code en utilisant un tableau: int tableauMax = {10, 100, 1000}; et tu feras: nbreMax = tableauMax[difficultePartie - 1]; tu feras sauter tous tes tests sur ce point. Sais-tu comment écrire des fonctions? Tu pourrais écrire une fonction qui vérifie si un nombre est dans un intervalle et tes boucles auraient l'air de ceci: do { printf( ... le message ...); scanf("%d", &nombre); } while(dansIntervalle(nombre, minimum, maximum); la fonctiion pourrait être: int dansIntervalle(valeur, inf, sup) { if(valeur >= inf && valeur <= sup) return(1); return(0); } Tu pourrais raffiner pour avoir les bons messages ... Ce serait plus complexe, mais la fonction pourrait inclure le scanf et les bons messages dans des chaînes.
Le Tout est souvent plus grand que la somme de ses parties.
Bonjour ! Merci pour votre réponse ! je n'ai pas encore étudié les tableaux (seulement les variables, conditions et fonctions pour le moment). mais je suis sure que votre commentaire me sera très utile une fois que j'aurais étudié les fonctions et les tableaux.
En passant, dans la définition et la déclaration d'une fonction, il faut déclarer les types des variables ... int dansIntervalle(int valeur, int inf, int sup) { L'idée est que tu vérifies trois variables dans ton code et de la même manière. modeDuJeu, autrePartie, difficultePartie Il y a moyen de faire la validation et la vérification dans une seule et même fonction pour sauver du code. Le printf() du message spécifique pourrait être placé juste avant l'appel. Le printf() qui dit que c'est une erreur pourrait être placé dans la fonction ainsi que le scanf - printf( ...) nombre = dansIntervalle(minimum, maximum); la fonction: int dansIntervalle(int inf, int sup) { int nombre; for(essais=0; essais<10; essais++) { scanf("%d", &nombre); if(nombre>=inf && nombre<=sup) return(nombre); printf("nombre invalide, doit se trouver entre %d et %d\n", inf, sup); } // for printf("vous avez fait trop d'erreurs, je démissionne\n"); exit(1); // requière stdlib.h } // fonction
Le Tout est souvent plus grand que la somme de ses parties.
je n'ai pas encore étudié les tableaux (seulement les variables, conditions et fonctions pour le moment)
Si tu as vu les fonctions, il faut à tout prix les utiliser : c'est pour ainsi dire le concept de base de la programmation structurée (découper un programme en sous-programmes). Bref, recommence tout !
Bonjour. je me suis trompée. je n'ai pas encore vu les fonctions. je voulais dire les boucles à la place. pour le moment je n'ai vu que les conditions et les boucles.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.