globalement je ne vois pas de choses qui empêcherait ton programme de fonctionner, mais si tu veux j'ai quelques propositions d'amélioration :
- Quand tu demandes un choix à l'utilisateur, comme par exemple le mode de jeu, je te proposes d'utiliser des boucles do... while pour supprimer le choix par défaut et l'obliger à choisir une des options que tu lui proposes.
- Ligne 95 et ligne 129 tu peux mettre des else if à la place des if et ligne 103 tu peux mettre un else si tu mets des boucles comme j'ai proposé avant ou un else if si tu n'en mets pas. Ce n'est qu'un détail mais ça fera lire une condition en moins à ton programme.
- Pourquoi mettre une variable MIN si elle vaut forcément 0?
- Cette fois c'est juste du gain de temps pour toi, à la place de compteur = compteur + 1, tu peux mettre compteur++
- Ligne 110, bonne initiative mais tu as oublié le cas où on entre un nombre négatif
Voilà, je pense avoir dit tout ce que j'ai vu !
ps : petit chipotage, ligne 107 et 116, il y a des fautes de frappe
bien joué, les suggestions de Buschiix sont perinentes, pour ma part je rajouterais juste que en guise "d'entrainement", tu pourrais découper ton code en plusieurs fonctions, c'est une bonne habitude à prendre, par exemple une fonction qui s'occupe d'afficher le message de lancement du jeu, une fonction qui demande la difficulté, une fonction qui contient le coeur du jeu, etc...
En gros, quand tu utilises un if, ton programme va vérifié si la condition est vraie ou fausse.
Si la condition est fausse, il va regarder s'il y a un else (ou else if), si oui il va regarder si sa condition est vraie ou fausse, s'il n'y en a pas il va juste continuer à lire le programme.
Et du coup, si la première condition, le 'if', est vraie, il ne va juste pas lire les else if ou/et else qui suivent.
Dans ton cas, quoi qu'il arrive, il va lire les deux if, donc quoi qu'il arrive il va lire au moins deux conditions. Mais si tu mets un else if, dès le moment ou la première condition sera vrai, il ne lira pas la deuxième.
Après le changement va être extrêmement minime, tu ne verras pas de différence en terme de temps d'exécution, mais si un jour il te viens l'envie de faire une boucle qui s'exécute 1 million de fois avec des conditions à l'intérieur, ça fera la différence.
Bonjhour je reviens vers vous, je suis entrain de rajouter des fonction et vue que jsuis pas doué ahaha
beh ma fonction choixmode fonctionne enfin plus ou moins XD
elle demande bien le choix au joueur, mais une fois le choix de l'utilisateur pris en compte elle saute tout le jeux et affiche bravo tu a gagné....
j'ai besoin d'aide <3
ci dessous mon main.c et ma fonction .h
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "Menu.h"
#include "difficulte.h"
#include "mode.h"
int main (int argc, char** argv )
{
//editer mes variable ici//////////////////////////////////////////
int nombrejoueur = 0;
int nombreMystere = 0, nombreEntre = 0;
int MAX = 0, MIN = 0;
int compteur = 0;
int rejouer = 1;
int difficulte = 0;
// int mode = 0;
int choix = 0;
Menu(); // Fonction affichage Menu
while (rejouer == 1)
{
//Menu Choix du mode
choixmode(choix);
// mode = choix;
/* switch (mode)
{
case 1:
printf("Vous avez Choisi Vs IA\n\n");
break;
case 2:
printf("Vous avez choisi PvP\n\n");
break;
default:
printf("Vous avez choisi le mode par default Vs IA\n\n");
mode = 1;*/
if (choix == 1)
{
//choix de la dificulté//
printf("\n*Selectionne ta dificulté:*\n");
printf("\n1.Facile\n");
printf("\n2.Intermediaire\n");
printf("\n3.dificile\n");
scanf("%d", &difficulte);
switch (difficulte)
{
case 1:
MAX = 10;
break;
case 2:
MAX = 100;
break;
case 3:
MAX = 1000;
break;
default:
printf("par default\n\n");
MAX = 10;
}
//Initialisation du Nombre Mystere
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("\n\n**Choisi un nombre entre 0 et %d\n", MAX);
// Boucle du Nombre Mystere
while (nombreMystere != nombreEntre)
{
compteur = compteur+1;
scanf("%d", &nombreEntre);
if (nombreEntre > nombreMystere)
{
printf("\n**C'est moins,\n**Choisi un nouveaux nombre:\n");
}
else if (nombreEntre < nombreMystere)
{
printf("\n**C'est plus,\n**Choisi un nouveaux nombre:\n");
}
}
}
if (choix == 2)// Mode 2 joueurs
{
printf("\nJoureur 1 Choisi un Nombre entre 1 et 1000\n\n");
scanf("%d", &nombrejoueur);
while (nombrejoueur > 1000)// Boucle pour empécher le troll ou le plantage
{
printf("\nBanane c'est entre 1 et 1000\n");
scanf("%d", &nombrejoueur);
}
printf("\nJoueur 2 trouvre le nombre Mystère! entre 1 et 1000\n\n");
while (nombrejoueur != nombreEntre)//Boucle du nombre Mystere
{
compteur = compteur+1;
scanf("%d", &nombreEntre);
if (nombreEntre > nombrejoueur)
{
printf("\n**C'est moins,\n**Choisi un nouveaux nombre:\n");
}
else if(nombreEntre < nombrejoueur)
{
printf("\n**C'est plus,\n**Choisi un nouveaux nombre:\n");
}
}
}
// Message de fin + Restart
printf("\n\n====BRAVO Tu as Gagné====\n\nEn %d coups\n\n", compteur);
compteur = 0;
printf("tu veux rejoué?\n-Oui Tape 1\n-Non Tape 0\nAlors? :...");
scanf("%d", &rejouer);
if (rejouer == 1);
printf("\nc'est reparti\n\n");
}
return 0;
}
int choixmode(int choix){
//Menu Choix du mode
printf("\nMode VS IA\n*Tape 1\nMode PVP\n*Tape 2\n");
scanf("%d", &choix);
switch (choix)
{
case 1:
printf("Vous avez Choisi Vs IA\n\n");
break;
case 2:
printf("Vous avez choisi PvP\n\n");
break;
default:
printf("Vous avez choisi le mode par default Vs IA\n\n");
choix = 1;
}
return choix;
}
1) la fonction ne faitrrien de la valeur du paramètre qu'elle reçoit
2) le choix est retourné par la fonction.
Donc dans la fonction, ça devrait être une variable locale (qui peut s'appeler choix ou autrement, c'est sans importance. Sauf que choix, c'est mieux comme nom que truc ou machin. Enfin "mode" ça serait mieux, parce que ce qui est retourné est un mode [*] )
int choix_mode(void) {
int mode;
...
return mode;
}
[*] trouver un bon nom pour une variable, c'est important, et difficile au début.
- Edité par michelbillaud 27 février 2020 à 16:49:47
tu devrais faire ce qu'à écrit magma : au lieu de juste executer ta fonction choixmode() tu devrais faire choix = choimode(); sans cela ta fonction renvoie une valeur que tu n'utilise pas, le choix dans ton main reste a zero et donc tu ne rentres dans aucun de tes if, du coup paf ca va directement à la fin.
Merci pour vos réponsses, ça fonctionne je viens de comprendre toute la logique enfin jusqu'aux prochaines sueur ahahah
main.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "Menu.h"
#include "difficulte.h"
#include "mode.h"
int main (int argc, char** argv )
{
//editer mes variable ici//////////////////////////////////////////
int nombrejoueur = 0;
int nombreMystere = 0, nombreEntre = 0;
int MAX = 0, MIN = 0;
int compteur = 0;
int rejouer = 1;
int difficulte = 0;
int mode = 0;
Menu(); // Fonction affichage Menu
while (rejouer == 1)
{
mode = choixmode();
if (mode == 1)
{
//choix de la dificulté//
printf("\n*Selectionne ta dificulté:*\n");
printf("\n1.Facile\n");
printf("\n2.Intermediaire\n");
printf("\n3.dificile\n");
scanf("%d", &difficulte);
switch (difficulte)
{
case 1:
MAX = 10;
break;
case 2:
MAX = 100;
break;
case 3:
MAX = 1000;
break;
default:
printf("par default\n\n");
MAX = 10;
}
//Initialisation du Nombre Mystere
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("\n\n**Choisi un nombre entre 0 et %d\n", MAX);
// Boucle du Nombre Mystere
while (nombreMystere != nombreEntre)
{
compteur = compteur+1;
scanf("%d", &nombreEntre);
if (nombreEntre > nombreMystere)
{
printf("\n**C'est moins,\n**Choisi un nouveaux nombre:\n");
}
else if (nombreEntre < nombreMystere)
{
printf("\n**C'est plus,\n**Choisi un nouveaux nombre:\n");
}
}
}
if (mode == 2)// Mode 2 joueurs
{
printf("\nJoureur 1 Choisi un Nombre entre 1 et 1000\n\n");
scanf("%d", &nombrejoueur);
while (nombrejoueur > 1000)// Boucle pour empécher le troll ou le plantage
{
printf("\nBanane c'est entre 1 et 1000\n");
scanf("%d", &nombrejoueur);
}
printf("\nJoueur 2 trouvre le nombre Mystère! entre 1 et 1000\n\n");
while (nombrejoueur != nombreEntre)//Boucle du nombre Mystere
{
compteur = compteur+1;
scanf("%d", &nombreEntre);
if (nombreEntre > nombrejoueur)
{
printf("\n**C'est moins,\n**Choisi un nouveaux nombre:\n");
}
else if(nombreEntre < nombrejoueur)
{
printf("\n**C'est plus,\n**Choisi un nouveaux nombre:\n");
}
}
}
// Message de fin + Restart
printf("\n\n====BRAVO Tu as Gagné====\n\nEn %d coups\n\n", compteur);
compteur = 0;
printf("tu veux rejoué?\n-Oui Tape 1\n-Non Tape 0\nAlors? :...");
scanf("%d", &rejouer);
if (rejouer == 1);
printf("\nc'est reparti\n\n");
}
return 0;
}
fonction.h
int choixmode(){
int mode = 0;
//Menu Choix du mode
printf("\nMode VS IA\n*Tape 1\nMode PVP\n*Tape 2\n");
scanf("%d", &mode);
switch (mode)
{
case 1:
printf("Vous avez Choisi Vs IA\n\n");
break;
case 2:
printf("Vous avez choisi PvP\n\n");
break;
default:
printf("Vous avez choisi le mode par default Vs IA\n\n");
mode = 1;
}
return mode;
}
Faut pas s'inquiéter, c'est normal de patauger. Au bout d'une dizaine d'années, ça ira un peu mieux.
Jspr ne pas attendre 10 ans avant de devenir une machine du code ahahah
TP Plus ou moin Besoin de Corretion?
× 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.