Pour tous ceux qui cherche la solution aux amélioration du jeu "Plus ou Moins".
Voici la solution :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//Ecrit par buzzromain
int main(int argc, char *argv[])
{
printf("=== PLUS OU MOINS ===\n\n");
printf("Le but du jeu est de deviner le nombre mystere !\n\n");
int nombreMystere = 0, nombreEntre = 0, nombreCoups = 0, continuerPartie = 1, niveauDifficulte = 0, MAX = 1, modejeu = 0;
const int MIN = 1;
do
{
nombreCoups = 0;
printf("=== MENU ===\n");
printf("Choisissez un mode de jeu : \n");
printf("1. Mode solo\n");
printf("2. Mode multijoueur\n");
do
{
printf("Votre choix ? ");
scanf("%d", &modejeu);
}while(modejeu < 1 || modejeu > 2);
switch(modejeu)
{
case 1:
srand(time(NULL));
printf("----------------\n");
break;
case 2:
printf("\nChoisissez un nombre a faire deviner a votre adversaire : ");
scanf("%d", &nombreMystere);
}
if(modejeu == 1)
{
printf("Choisissez un niveau de difficulte : \n");
printf("1. Niveau facile : Entre 1 et 100\n");
printf("2. Niveau moyen : Entre 1 et 1000\n");
printf("3. Niveau difficile : Entre 1 et 10000\n");
do
{
printf("Votre choix ? ");
scanf("%d", &niveauDifficulte);
}while(niveauDifficulte < 1 || niveauDifficulte > 3);
printf("-----------------\n");
if(niveauDifficulte == 1)
{
MAX = 100;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
}
else if(niveauDifficulte == 2)
{
MAX = 1000;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
}
else if(niveauDifficulte == 3)
{
MAX = 10000;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
}
}
system("cls");
printf("\n");
printf("Devinez le nombre mystere !\n");
do
{
nombreCoups++;
printf("Quel est le nombre ? ");
scanf("%d", &nombreEntre);
if(nombreEntre < nombreMystere)
{
printf("C'est plus !\n");
}
else if(nombreEntre > nombreMystere)
{
printf("C'est moins !\n");
}
else
{
printf("\nBravo, vous avez trouve le nombre mystere en %d coups\n", nombreCoups);
}
}while(nombreEntre != nombreMystere);
printf("\n------------------------------------\n");
printf("Souhaitez-vous refaire une partie ?\n");
printf("1. Oui\n");
printf("2. Non\n");
printf("Votre choix ? ");
scanf("%d", &continuerPartie);
printf("-------------------------------------\n\n");
}while(continuerPartie == 1);
return 0;
}
Mettez des commentaire dans le code source puis poster de nouveau le code source commenté sur ce sujet et j'éditerai le sujet pour mettre le code source final. Merci
- Edité par buzzromain le 2 mai 2014 à 15:31:35
dis moi tu fais comment pour poster ton code de cette maniere c'est a dire avec le fond noir et les couleur et tout....cela m'aiderai car pour poster un code sur le forum je ne sais faire que le copier/coller merci d'avance !
Salut ! Lorsque tu postes une réponse, il y a une icône </> qui s'appelle "code".
bonjour pour ceux que ca interesse j'ai coder le jeu avec une version multi ou le but est de trouver le nombre mystere avant l'autre joueur (le mode solo avec le choix de la difficulter son inclu )jusqu'ici tout a l'air de fonctionner mais comme je debute je serais heureux d'apprendre de vos remarques et conseils
voici une proposition de solution au Plus ou Moins amélioré
pour les débutants qui le veulent !
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "jeu.c"
int main()
{
printf("\n");
printf("**************************************\n");
printf("********LE JEU DU PLUS OU MOINS*******\n");
printf("********Ecrit par Jean Dechanel*******\n");
printf("**************************************\n\n\n");
int MAX = 0, MIN = 0, nombre = 0;
int nombreEntre = 0, nombreMystere = 0, rejouerPartie = 0, compteurCoup = 0, coupMax = 10, modeJeu = 0, niveauJeu = 0;
srand(time(NULL));
do
{
printf("\n");
printf("Menu MODE DE JEU\n");
printf("1. Mode Solo\n2. Mode Multi\n");
do
{
printf("Votre choix ? ");
scanf("%d", &modeJeu);
}while(modeJeu < 1 || modeJeu > 2);
switch(modeJeu)
{
case 1: printf("Bienvenu au mode Solo !\n");
printf("\n");
printf("Menu NIVEAU DE JEU\n");
printf("1. Facile\n2. Moyen\n3. Difficile\n");
do
{
printf("Votre choix ? ");
scanf("%d", &niveauJeu);
}while(niveauJeu < 1 || niveauJeu > 3);
switch(niveauJeu)
{
case 1: coupMax = 15; MAX =100; MIN =1;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Facile !\n");
printf("Entrez un nombre entre 1 et 100\n");
break;
case 2: coupMax = 10; MAX =1000; MIN =101;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Moyen !\n");
printf("Entrez un nombre entre 101 et 1000\n");
break;
case 3: coupMax = 7; MAX =10000; MIN =1001;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Difficile !\n");
printf("Entrez un nombre entre 1001 et 10000\n");
break;
default:
printf("Erreur, choix non disponible !");
break;
}
do //debut de la boucle du jeu
{
printf("\n");
printf("Attention il vous reste seulement %d coups !!!\n", coupMax);
printf("Quel est le nombre? : ");
scanf("%d", &nombreEntre);
compteurCoup++;
coupMax--;
if(nombreEntre > nombreMystere)
printf("C'est moins!\n");
else if(nombreEntre < nombreMystere)
printf("C'est plus!\n");
else
{
printf("\n");
printf("Bravo, vous avez trouve le nombre mystere en %d coups !!!\n\n", compteurCoup);
}
if (coupMax == 0 && nombreMystere != nombreEntre )
{
printf("\n");
printf ("DÉSOLÉ, vous avez perdu car vous n'avez plus de coups a jouer !!!\n\n");
}
}while(nombreEntre != nombreMystere && coupMax != 0);
break;
case 2: printf("Bienvenu au mode Multi\n");
printf("\n");
printf("NIVEAU DE JEU\n");
printf("Choisissez un niveau de jeu s'il vous plait !\n");
printf("1. Facile\n2. Moyen\n3. Difficile\n");
do
{
printf("Votre choix ? ");
scanf("%d", &niveauJeu);
}while(niveauJeu < 1 || niveauJeu > 3);
printf("\n");
printf("Entrez le nombreMystere ! ");
scanf("%d", &nombreMystere);
printf("\n");
switch(niveauJeu)
{
case 1: coupMax = 15; MAX =100; MIN =1;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Facile !\n");
printf("Entrez un nombre entre 1 et 100\n");
break;
case 2: coupMax = 10; MAX = 1000; MIN =101;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Moyen !\n");
printf("Entrez un nombre entre 101 et 1000\n");
break;
case 3: coupMax = 7; MAX = 10000; MIN = 1001;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Difficile !\n");
printf("Entrez un nombre entre 1001 et 10000\n");
break;
default:
printf("Erreur, choix non disponible !");
break;
}
do //debut de la boucle du jeu
{
printf("\n");
printf("Attention il vous reste seulement %d coups !!!\n", coupMax);
printf("Quel est le nombre? : ");
scanf("%d", &nombreEntre);
compteurCoup++;
coupMax--;
if(nombreEntre > nombreMystere)
printf("C'est moins!\n");
else if(nombreEntre < nombreMystere)
printf("C'est plus!\n");
else
{
printf("\n");
printf("Bravo, vous avez trouve le nombre mystere en %d coups !!!\n\n", compteurCoup);
}
if (coupMax == 0 && nombreMystere != nombreEntre )
{
printf("\n");
printf ("DÉSOLÉ, vous avez perdu car vous n'avez plus de coups a jouer !!!\n\n");
}
}while(nombreEntre != nombreMystere && coupMax != 0);
break;
default: printf("Erreur, choix non disponible !\n");
break;
}
system("CLS");
printf("Voulez vous rejouer une autre partie?\n ");
printf("1. Oui\n2. Non\n");
do
{
printf("Votre choix? ");
scanf("%d", &rejouerPartie);
}while(rejouerPartie < 1 || rejouerPartie > 2);
}while(rejouerPartie == 1);
printf("\n");
printf("Partie terminee !!!\n\n\n");
return 0;
}
Si le but est de recevoir des commentaires sur votre code, en voici un sur l'aspect général :
vous devriez utiliser des fonctions pour pouvoir découper votre code et éviter à la fois des méthodes de plusieurs centaines de lignes et du code copier/coller identique à quelques paramètres près.
(Sinon normalement, en plus d'éviter de poster sur un post qui date de longtemps, on dit bonjour, et on évite d'écrire en majuscule).
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "jeu.c"
int main()
{
debutPartie();
int MAX = 0, MIN = 0, nombre = 0;
int nombreEntre = 0, nombreMystere = 0, rejouerPartie = 0, compteurCoup = 0, coupMax = 10, modeJeu = 0, niveauJeu = 0;
srand(time(NULL));
do
{
printf("\n");
printf("Menu MODE DE JEU\n");
printf("1. Mode Solo\n2. Mode Multi\n");
do
{
printf("Votre choix ? ");
scanf("%d", &modeJeu);
}while(modeJeu < 1 || modeJeu > 2);
switch(modeJeu)
{
case 1: printf("Bienvenu au mode Solo !\n");
printf("\n");
printf("Menu NIVEAU DE JEU\n");
printf("1. Facile\n2. Moyen\n3. Difficile\n");
do
{
printf("Votre choix ? ");
scanf("%d", &niveauJeu);
}while(niveauJeu < 1 || niveauJeu > 3);
switch(niveauJeu)
{
case 1: coupMax = 15; MAX =100; MIN =1;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Facile !\n");
printf("Entrez un nombre entre 1 et 100\n");
break;
case 2: coupMax = 10; MAX =1000; MIN =101;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Moyen !\n");
printf("Entrez un nombre entre 101 et 1000\n");
break;
case 3: coupMax = 7; MAX =10000; MIN =1001;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Difficile !\n");
printf("Entrez un nombre entre 1001 et 10000\n");
break;
default:
printf("Erreur, choix non disponible !");
break;
}
do //debut de la boucle du jeu
{
printf("\n");
printf("Attention il vous reste seulement %d coups !!!\n", coupMax);
printf("Quel est le nombre? : ");
scanf("%d", &nombreEntre);
compteurCoup++;
coupMax--;
if(nombreEntre > nombreMystere)
printf("C'est moins!\n");
else if(nombreEntre < nombreMystere)
printf("C'est plus!\n");
else
{
printf("\n");
printf("Bravo, vous avez trouve le nombre mystere en %d coups !!!\n\n", compteurCoup);
}
if (coupMax == 0 && nombreMystere != nombreEntre )
{
printf("\n");
printf ("DÉSOLÉ, vous avez perdu car vous n'avez plus de coups a jouer !!!\n\n");
}
}while(nombreEntre != nombreMystere && coupMax != 0);
break;
case 2: printf("Bienvenu au mode Multi\n");
printf("\n");
printf("NIVEAU DE JEU\n");
printf("Choisissez un niveau de jeu s'il vous plait !\n");
printf("1. Facile\n2. Moyen\n3. Difficile\n");
do
{
printf("Votre choix ? ");
scanf("%d", &niveauJeu);
}while(niveauJeu < 1 || niveauJeu > 3);
printf("\n");
printf("Entrez le nombreMystere ! ");
scanf("%d", &nombreMystere);
printf("\n");
switch(niveauJeu)
{
case 1: coupMax = 15; MAX =100; MIN =1;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Facile !\n");
printf("Entrez un nombre entre 1 et 100\n");
break;
case 2: coupMax = 10; MAX = 1000; MIN =101;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Moyen !\n");
printf("Entrez un nombre entre 101 et 1000\n");
break;
case 3: coupMax = 7; MAX = 10000; MIN = 1001;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Difficile !\n");
printf("Entrez un nombre entre 1001 et 10000\n");
break;
default:
printf("Erreur, choix non disponible !");
break;
}
do //debut de la boucle du jeu
{
printf("\n");
printf("Attention il vous reste seulement %d coups !!!\n", coupMax);
printf("Quel est le nombre? : ");
scanf("%d", &nombreEntre);
compteurCoup++;
coupMax--;
if(nombreEntre > nombreMystere)
printf("C'est moins!\n");
else if(nombreEntre < nombreMystere)
printf("C'est plus!\n");
else
{
printf("\n");
printf("Bravo, vous avez trouve le nombre mystere en %d coups !!!\n\n", compteurCoup);
}
if (coupMax == 0 && nombreMystere != nombreEntre )
{
printf("\n");
printf ("DÉSOLÉ, vous avez perdu car vous n'avez plus de coups a jouer !!!\n\n");
}
}while(nombreEntre != nombreMystere && coupMax != 0);
break;
default: printf("Erreur, choix non disponible !\n");
break;
}
system("CLS");
printf("Voulez vous rejouer une autre partie?\n ");
printf("1. Oui\n2. Non\n");
do
{
printf("Votre choix? ");
scanf("%d", &rejouerPartie);
}while(rejouerPartie < 1 || rejouerPartie > 2);
}while(rejouerPartie == 1);
printf("\n");
printf("Partie terminee !!!\n\n\n");
return 0;
}
Voici ce que j'entends par découper le code en utilisant des fonctions :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define SOLO 1
#define MULTI 2
typedef enum { false, true } bool;
typedef struct NiveauJeu NiveauJeu;
struct NiveauJeu {
char nomNiveau[10];
int min;
int max;
int coupMax;
};
NiveauJeu niveaux[] = {
{ "Facile", 0, 100, 15 },
{ "Moyen", 0, 1000, 10 },
{ "Difficile", 0, 10000, 7 }
};
void about() {
printf("\n");
printf("**************************************\n");
printf("********LE JEU DU PLUS OU MOINS*******\n");
printf("********Ecrit par Jean Dechanel*******\n");
printf("**************************************\n\n\n");
}
int demanderModeJeu() {
int modeJeu;
printf("\n");
printf("Menu MODE DE JEU\n");
printf("1. Mode Solo\n2. Mode Multi\n");
do {
printf("Votre choix ? ");
scanf("%d", &modeJeu);
} while(modeJeu < 1 || modeJeu > 2);
return modeJeu;
}
NiveauJeu demanderNiveauJeu() {
int choice;
printf("\n");
printf("Menu NIVEAU DE JEU\n");
printf("1. Facile\n2. Moyen\n3. Difficile\n");
do {
printf("Votre choix ? ");
scanf("%d", &choice);
} while(choice < 1 || choice > 3);
return niveaux[choice - 1];
}
bool rejouerPartie() {
int rejouerPartie;
printf("\n\n\n\n\n\n");
printf("Voulez vous rejouer une autre partie?\n");
printf("1. Oui\n2. Non\n");
do
{
printf("Votre choix? ");
scanf("%d", &rejouerPartie);
} while(rejouerPartie < 1 || rejouerPartie > 2);
return rejouerPartie == 1;
}
int choixNombreMystereAleatoire(NiveauJeu niveauJeu) {
return (rand() % (niveauJeu.max - niveauJeu.min + 1)) + niveauJeu.min;
}
int demanderNombreMystere(NiveauJeu niveauJeu) {
int nombreMystere;
printf("\n");
do {
printf("Entrez le nombreMystere entre %d et %d ! ", niveauJeu.min, niveauJeu.max);
scanf("%d", &nombreMystere);
} while (nombreMystere < niveauJeu.min || nombreMystere > niveauJeu.max);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
return nombreMystere;
}
int demanderNombre(int nbCoupsRestants) {
int nombreSaisi;
printf("\n");
printf("Attention il vous reste seulement %d coups !!!\n", nbCoupsRestants);
printf("Quel est le nombre? : ");
scanf("%d", &nombreSaisi);
return nombreSaisi;
}
int main() {
about();
srand(time(NULL));
do {
int modeJeu = demanderModeJeu();
printf("Bienvenu au mode %s !\n", modeJeu == SOLO ? "Solo" : "Multi");
NiveauJeu niveauJeu = demanderNiveauJeu();
printf("Bienvenu au niveau %s !\n", niveauJeu.nomNiveau);
int nbCoupsRestants = niveauJeu.coupMax;
int nombreMystere = modeJeu == SOLO ? choixNombreMystereAleatoire(niveauJeu) : demanderNombreMystere(niveauJeu);
printf("Entrez un nombre entre %d et %d\n", niveauJeu.min, niveauJeu.max);
int nombreSaisi;
do {
nombreSaisi = demanderNombre(nbCoupsRestants);
nbCoupsRestants--;
if (nombreSaisi > nombreMystere) {
printf("C'est moins!\n");
} else if(nombreSaisi < nombreMystere) {
printf("C'est plus!\n");
}
} while (nombreSaisi != nombreMystere && nbCoupsRestants > 0);
printf("\n");
if (nombreSaisi == nombreMystere) {
printf("Bravo, vous avez trouve le nombre mystere en %d coups !!!\n\n", (niveauJeu.coupMax-nbCoupsRestants));
} else {
printf ("DÉSOLÉ, vous avez perdu car vous n'avez plus de coups a jouer !!!\n\n");
}
} while(rejouerPartie());
printf("\n");
printf("Partie terminee !!!\n\n\n");
return 0;
}
Mon code n'est sans doute pas super terrible, ça fait longtemps que je n'ai pas fait de c, mais l'idée est là. Il faut essayer d'utiliser des méthodes qui indique bien ce qu'elle font et éviter tout copier coller.
Il vaudrait utiliser la fonction principale de cette manière :
[...]
int main(void)
{
[...]
return 0;
}
Car tu initialise les arguments, mais tu ne les utilises pas (unused parameters).
Également pour la ligne 13 j'aurais plutôt mis une constante de définition :
[...]
#define MIN 1
[...]
Parce que tout simplement ça ne prend pas d'espace en mémoire (tu n'utilise pas une case mémoire pour stocker un entier). C'est le préprocesseur qui se chargera de remplacer cette valeur aux endroits où tu mets tes MIN. En gros, c'est comme si tu mettais cette valeur en dur partout, sauf que c'est le pauvre préprocesseur qui le fait à ta place. Il est quand même sympa celui là ...
Et j'aurais aussi fait une fonction pour récupérer un entier du stdin. Pour pouvoir ensuite tester l'entrée, même si c'est un '\n' directement (si le joueur s'est trompé en appuyant trop vite). De plus, si tu essaie de taper bonjour pendant la sélection du mode de joueurs, tu t'appercevras qu'il y a un souci (en fait ne test pas, tu vas rentrer dans une boucle infinie). Et j'imagine que c'est le cas pour les autres fonctions scanf().
Pour ton system("cls"), ça ne marchera que sous Windows. Sous Pomme et Unix/Linux, ça ne fonctionnera pas. Donc si tu veux un code portable, je te conseille de rajouter ça avant ta fonction principale :
Et pourquoi ne pas tester que le nombre rentré est bien dans l'intervalle MIN - MAX ?
Enfin, je te donne un exemple sous Unix avec system("clear"), mais en réalité, il vaut mieux l'éviter. Préfère utiliser un fork() avec un execl() plutôt qu'un system().
void debutPartie()
{
printf("\n");
printf("**************************************\n");
printf("********LE JEU DU PLUS OU MOINS*******\n");
printf("********Ecrit par Jean Dechanel*******\n");
printf("**************************************\n\n\n");
}
void partieSolo()
{
int coupMax = 0, nombreEntre = 0, nombreMystere = 0, compteurCoup = 0;
int modeJeu = 0, niveauJeu = 0, MAX = 0, MIN = 0;
printf("\n");
printf("Menu NIVEAU DE JEU\n");
printf("1. Facile\n2. Moyen\n3. Difficile\n");
do
{
printf("Votre choix ? ");
scanf("%d", &niveauJeu);
}while(niveauJeu < 1 || niveauJeu > 3);
switch(niveauJeu)
{
case 1: coupMax = 15; MAX =100; MIN =1;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Facile !\n");
printf("Entrez un nombre entre 1 et 100\n");
break;
case 2: coupMax = 10; MAX =1000; MIN =101;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Moyen !\n");
printf("Entrez un nombre entre 101 et 1000\n");
break;
case 3: coupMax = 7; MAX =10000; MIN =1001;
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bienvenu au niveau Difficile !\n");
printf("Entrez un nombre entre 1001 et 10000\n");
break;
default:
printf("Erreur, choix non disponible !");
break;
}
do //debut de la boucle du jeu
{
printf("\n");
printf("Attention il vous reste seulement %d coups !!!\n", coupMax);
printf("Quel est le nombre? : ");
scanf("%d", &nombreEntre);
compteurCoup++;
coupMax--;
if(nombreEntre > nombreMystere)
printf("C'est moins!\n");
else if(nombreEntre < nombreMystere)
printf("C'est plus!\n");
else
{
printf("\n");
printf("Bravo, vous avez trouve le nombre mystere en %d coups !!!\n\n", compteurCoup);
}
if (coupMax == 0 && nombreMystere != nombreEntre )
{
printf("\n");
printf ("DÉSOLÉ, vous avez perdu car vous n'avez plus de coups a jouer !!!\n\n");
}
}while(nombreEntre != nombreMystere && coupMax != 0);
}
void PartieMulti()
{
int coupMax = 0, nombreEntre = 0, nombreMystere = 0, compteurCoup = 0;
int modeJeu = 0, niveauJeu = 0, MAX = 0, MIN = 0;
printf("\n");
printf("NIVEAU DE JEU\n");
printf("Choisissez un niveau de jeu s'il vous plait !\n");
printf("1. Facile\n2. Moyen\n3. Difficile\n");
do
{
printf("Votre choix ? ");
scanf("%d", &niveauJeu);
}while(niveauJeu < 1 || niveauJeu > 3);
printf("\n");
printf("Entrez le nombreMystere ! ");
scanf("%d", &nombreMystere);
printf("\n");
switch(niveauJeu)
{
case 1: coupMax = 15; MAX = 100; MIN = 1;
printf("Bienvenu au niveau Facile !\n");
printf("Entrez un nombre entre 1 et 100\n");
break;
case 2: coupMax = 10; MAX = 1000; MIN = 101;
printf("Bienvenu au niveau Moyen !\n");
printf("Entrez un nombre entre 101 et 1000\n");
break;
case 3: coupMax = 7; MAX = 10000; MIN = 1001;
printf("Bienvenu au niveau Difficile !\n");
printf("Entrez un nombre entre 1001 et 10000\n");
break;
default:
printf("Erreur, choix non disponible !");
break;
}
do //debut de la boucle du jeu
{
printf("\n");
printf("Attention il vous reste seulement %d coups !!!\n", coupMax);
printf("Quel est le nombre? : ");
scanf("%d", &nombreEntre);
compteurCoup++;
coupMax--;
if(nombreEntre > nombreMystere)
printf("C'est moins!\n");
else if(nombreEntre < nombreMystere)
printf("C'est plus!\n");
else
{
printf("\n");
printf("Bravo, vous avez trouve le nombre mystere en %d coups !!!\n\n", compteurCoup);
}
if (coupMax == 0 && nombreMystere != nombreEntre )
{
printf("\n");
printf ("DÉSOLÉ, vous avez perdu car vous n'avez plus de coups a jouer !!!\n\n");
}
}while(nombreEntre != nombreMystere && coupMax != 0);
}
Maintenant si tu regardes ton code, tu dois voir que les méthodes "partieSolo()" et "partieMulti()" sont très similaires.
Il est donc très dommage d'avoir deux méthodes, cela signifie que chaque fois que tu corriges un truc dans l'une il faudra aussi le corriger dans l'autre.
Pour un petit exemple comme cela, ce n'ai pas très grave. Mais sur une grosse application va rapidement être source d'erreur. On corrigera à un endroit sans corriger l'autre, les méthodes vont diverger de plus sans raison réelle, et de plus pour une personne qui découvre le code, il lui est plus difficile de comprendre ce qu'il change entre le mode multi et le mode solo.
Je t'invite à regarder le code que j'ai posté il y a un peu plus d'une heure où je montre comment il est possible de factoriser tout cela pour avoir un main unique qui fonctionne aussi bien dans le mode solo que dans le mode multi.
salut, j'ai besoin d'etre guide dans la resolution de cet exercice
Créez une fonction maximumTableau qui aura pour rôle de remettre à 0 toutes les cases du tableau ayant une valeur supérieure à un maximum. Cette fonction prendra en paramètres le tableau ainsi que le nombre maximum autorisé (valeurMax). Toutes les cases qui contiennent un nombre supérieur à valeurMax doivent être mises à 0. Prototype : void maximumTableau(int tableau[], int tailleTableau, int valeurMax);
#include <stdio.h>
#include <stdlib.h>
/*Créez une fonction maximumTableau qui aura pour rôle de remettre à 0 toutes les cases du tableau ayant une valeur supérieure à un maximum.
Cette fonction prendra en paramètres le tableau ainsi que le nombre maximum autorisé (valeurMax).
Toutes les cases qui contiennent un nombre supérieur à valeurMax doivent être mises à 0.
Prototype :
void maximumTableau(int tableau[], int tailleTableau, int valeurMax); */
void maximumTableau(int tableau[], int tailleTableau, int valeurMax);
int main()
{
int tableau[5] = {1,2,3,4,5};
int i;
maximumTableau(tableau, 5, 3);
for(i = 0; i < 5; i++)
{
printf("%d\n", tableau[i]);
}
return 0;
}
void maximumTableau(int tableau[], int tailleTableau, int valeurMax)
{
int i;
if(valeurMax == 3)
{
for(i = 0; i < tailleTableau; i++)
{
tableau[i+valeurMax] = 0;
}
}
}
nouveau sur ce site depuis à peine une semaine, je me suis lancé, en tant que pur débutant, dans la programmation en langage C. J'ai donc commencé le cours "Programmer en Langage C" il y a quelques jours.
Me voilà arrivé à ce fameux Test du jeu du Plus ou Moins et si ça fonctionne "Plus ou Moins" correctement, je me confronte tout de même aujourd'hui à un petit soucis.
Je vais essayer d'expliquer clairement le problème rencontré à l'heure d'aujourd'hui et ensuite, si vous le voulez, vous examinerez mon code pour, qui sait, m'aider à trouver mon/mes erreurs.
Lorsque l'on lance le jeu, vous avez le choix entre le mode SOLO et le mode MULTI (2 joueurs).
Par contre, à l'heure actuelle, je n'ai pas encore programmé un niveau de difficulté. Je n'en suis pas encore là.
Du coup, c'est soit on joue en solo soit en multi sans difficulté particulière. Le mode SOLO fonctionne parfaitement, aucun problème à signaler. Par contre, je rencontre un petit soucis avec le mode MULTI. Voici une petite description des étapes du mode MULTI.
Mode MULTI (2 joueurs) :
1) Le jeu demande dans un premier temps au Joueur 1 d'enregistrer un nombre mystère (ce fameux nombre à deviner).
2) Via "scanf" le joueur 1 donne donc une valeur à "NombreMystere2" que le joueur 2 devra deviner.
3) Le jeu demande donc au Joueur 2 de saisir le nombre à deviner, ce qu'il fait.
4) Ensuite, une suite de conditions aideront le joueur à se rapprocher du nombre mystère par des "c'est plus" / "c'est moins", jusqu'à ce que le joueur trouve.
5) Ca y est ! On a trouvé !!! Le nombre à trouver était "20".
Lorsque l'on a l'immense chance (lol) de trouver le nombre mystère, le jeu nous félicite à sa manière et nous propose de rejouer (ici, on rejoue directement en mode multi sans choix de repasser en mode solo, on reste donc dans la partie uniquement MULTI)
Et c'est ici que les problèmes commencent...
Lorsque l'on accepte de rejouer une partie, le jeu demande comme en début de partie à ce que le joueur 1 enregistre un chiffre mystère mais là, si vous mettez par exemple "20" alors que "20" était le nombre à trouver dans la partie précédente (celle que je vous ai détaillée juste avant), le jeu ne l'accepte pas et remets la phrase qui demande "d'enregistrer un nombre au joueur 1" à chaque fois que l'on essaiera d'enregistrer le nombre "20". Par contre, si vous mettez 15, 16 ou 17 ou tout autre nombre différent du nombre trouvé dans la partie précédente le jeu se poursuivra parfaitement.
Du coup, je me suis dit que quelque part dans mes codes, je devais simplement "réinitialiser" le NombreMystere2 à 0 avant que la boucle ne reprenne du début.
J'ai donc décidé d'insérer la ligne "NombreMystere2 = 0;" (comme je l'ai fait avec le compteur de coups).
Malheureusement, ça n'est pas fonctionnel, et je n'ai pas encore eu la logique pour savoir pourquoi il ne l'acceptait pas.
J'ai été placer mon "NombreMystere2 = 0;" dans le dernier "else if" du mode Multi, juste en dessous de "Compteur = 0;".
Mais maintenant, lorsque l'on recommence une partie (la première partie se passe toujours parfaitement bien), le jeu ne revient plus à "Joueur 1 enregistrer un nombre mystere", il passe directement à "Joueur 2 devinez le chiffre mystere", du coup, je n'ai pas eu la possibilité de changer la variable "NombreMystere2" via le Joueur 1 et par conséquent celle-ci reste sur 0 de par le code "NombreMystere2 = 0;" que j'ai été ajouter pour palier au 1er problème évoqué au début de ce roman.
Ma question est de savoir pourquoi, juste en ajoutant un code qui permet uniquement de remettre la valeur du nombre mystère à 0 en fin de code, le jeu décide de ne plus revenir au tour du Joueur 1 comme la logique le voudrait, mais de passer directement au tour du Joueur 2 qui doit finalement deviner un nombre qui n'est autre que 0 puisque le Joueur 1 n'a pas eu la possibilité d'enregistrer le nombre qu'il aurait souhaité.
J'espère avoir été assez clair, prenez en compte que je suis un débutant de quelques jours seulement et que je ne connais pas encore tous les codes qu'il est possible d'utiliser (ça viendra avec le temps et l'apprentissage) et que je ne veux pas brûler les étapes. En gros, si une aimable personne venait à pouvoir m'aider à trouver mon erreur, j'aimerais que ça soit dans les conditions d'un débutant, dans le sens où je voudrais éviter d'avoir à utiliser des codes qui sont réservés aux plus avancés et que par conséquent je ne pourrai pas comprendre à mon niveau.
Je remercie d'avance les personnes qui auront pris de leur temps pour lire ce fameux roman qu'est le mien et je les remercie³ s'il s'avère qu'ils peuvent me donner un petit coup de main à ma compréhension.
Kevin
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int MAX = 100, MIN = 1, NombreEntre = 0, NombreMystere1 = 0, NombreMystere2 = 0, ContinuerPartie = 1, Compteur = 0, ModeJeu = 0;
printf("----- Le plus ou moins -----\n\n");
printf("1. Mode Solo\n");
printf("2. Mode Multi\n\n");
scanf("%d", &ModeJeu);
if (ModeJeu == 1) // Mode de Jeu Solo
{
while (ContinuerPartie)
{
srand(time(NULL));
NombreMystere1 = (rand() % (MAX - MIN + 1)) + MIN;
while (NombreEntre != NombreMystere1)
{
Compteur++;
printf("Quel est le nombre a deviner ? \n\n");
scanf("%d", &NombreEntre);
if (NombreEntre < NombreMystere1)
{
printf("\nC'est plus !\n\n");
}
else if (NombreEntre > NombreMystere1)
{
printf("\nC'est moins !\n\n");
}
else if (NombreEntre == NombreMystere1)
{
printf("\nBRAVO !!! Tu as trouve le nombre mystere en %d coup(s) SOLO !\n\n", Compteur);
Compteur = 0; // Ici, je remets le Compteur à zéro car si l'on décide de rejouer directement, il continue d'additionner les coups avec ceux de la partie précédente.
printf("Voulez vous rejouer ?\n\n");
printf("1. Oui\n");
printf("0. Non\n");
scanf("%d", &ContinuerPartie);
}
}
}
}
if (ModeJeu == 2) // Mode de Jeu Multi
{
while (ContinuerPartie)
{
printf("\nJoueur 1, veuillez enregistrer un nombre mystere : ");
scanf("%d", &NombreMystere2);
while (NombreEntre != NombreMystere2)
{
Compteur++;
printf("\nJoueur 2, quel est le nombre a deviner ? \n\n");
scanf("%d", &NombreEntre);
if (NombreEntre < NombreMystere2)
{
printf("\nC'est plus !\n\n");
}
else if (NombreEntre > NombreMystere2)
{
printf("\nC'est moins !\n\n");
}
else if (NombreEntre == NombreMystere2)
{
printf("\nBRAVO !!! Tu as trouve le nombre mystere en %d coup(s) MULTI !\n\n", Compteur);
Compteur = 0; // Ici, je remets le Compteur à zéro car si l'on décide de rejouer directement, il continue d'additionner les coups avec ceux de la partie précédente.
NombreMystere2 = 0; // Comme expliqué plus haut, sans ça, NombreMystere2 garde la valeur précédente en mémoire et n'accepte pas qu'on puisse remettre le même nombre.
Salut, j'attend les critiques pour pouvoir améliorer ma solution. Merci !
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (int argc, char *argv[])
{
int nombreMystere = 0, nombreEntre = 0, nombreDeCoups = 1;
int continuerPartie = 1, modeJeux = 0, difficulte = 0;
int MAX = 100, MIN = 1;
printf("==== JEUX DU PLUS OU MOINS ====");
printf("\n\n");
printf("Voulez vous jouer en SOLO ou a DEUX ?\n");
printf("\nTapez 1 pour le mode 1 joueur ou 2 pour le mode deux joueurs : ");
scanf("%d", &modeJeux);
printf("\nDifficulter\n");
printf("1. Facile (Entre 1 et 100)\n");
printf("2. Difficile (Entre 1 et 1000)\n");
printf("3. Tres difficile (Entre 1 et 10000)\n\n");
printf("Choisisez la difficulte: Entrez 1, 2 ou 3 : ");
scanf("%d", &difficulte);
if(difficulte == 1)
{
MAX = 100;
}
if(difficulte == 2)
{
MAX = 1000;
}
if(difficulte == 3)
{
MAX = 10000;
}
printf("\n");
while(continuerPartie)
{
srand(time(NULL));
if(modeJeux == 1)
{
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
}
if(modeJeux == 2)
{
printf("Joueur 1 : Veuillez entrer le nombre mystere a trouver : ");
scanf("%d", &nombreMystere);
printf("\n");
}
while(nombreEntre != nombreMystere)
{
printf("Quel est le nombre mystere ? ");
scanf("%d", &nombreEntre);
if(nombreEntre < nombreMystere)
{
printf("C'est plus !\n");
}
else if(nombreEntre > nombreMystere)
{
printf("C'est moins !\n");
}
else
{
printf("\nBravo, vous avez trouve le nombre mystere en %d coups!\n\n", nombreDeCoups);
printf("Voulez vous contunier la partie ?\n");
printf("Tapez 1 pour oui et 0 pour non : ");
scanf("%d", &continuerPartie);
printf("\n");
if(continuerPartie == 1)
{
nombreDeCoups = 0;// Pour initialiser le conmpteur nombreDeCoups à 0 lorsqu'on continu la partie
}
}
nombreDeCoups++;
}
}
return 0;
}
voici ma version des améliorations au TP plus ou moins en langage C :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char** argv) {
int nombreSaisi = 0, nombreMystere = 0, compteurCoups = 0, continuerPartie = 1,
nombreJoueurs = 1, nombreMaximum = 100, niveauDifficulte = 1;
const int MIN = 1;
printf("Bienvenue dans ce mini-jeu de plus ou moins\n");
printf("Vous souhaitez jouer... donc bon jeu\n\n");
do {
do {
printf("Choisissez le niveau de difficulté :\n");
printf("1. Entre 1 et 100\n");
printf("2. Entre 1 et 1000\n");
printf("3. Entre 1 et 10000\n");
scanf("%d", &niveauDifficulte);
} while ( (niveauDifficulte < 1) || (niveauDifficulte > 3) );
switch(niveauDifficulte) {
case 1: nombreMaximum = 100; break;
case 2: nombreMaximum = 1000; break;
case 3: nombreMaximum = 10000; break;
}
do {
printf("Voulez-vous jouer contre l'ordinateur ou à deux ?\n");
printf("1. Contre l'ordinateur\n");
printf("2. À deux\n");
scanf("%d", &nombreJoueurs);
} while ( (nombreJoueurs < 1) || (nombreJoueurs > 2) );
if (1 == nombreJoueurs) {
srand( time(NULL) );
nombreMystere = ( rand() % (nombreMaximum - MIN + 1) ) + MIN;
} else {
do {
printf("Choisissez un nombre entre %d et %d :\n", MIN, nombreMaximum);
scanf("%d", &nombreMystere);
} while ( (nombreMystere < MIN) || (nombreMystere > nombreMaximum) );
}
do {
compteurCoups++;
printf("Quel est le nombre ? ");
scanf("%d", &nombreSaisi);
if (nombreSaisi > nombreMystere) {
printf("C'est moins !\n\n");
} else if (nombreSaisi < nombreMystere) {
printf("C'est plus !\n\n");
} else {
printf ("Bravo, vous avez trouvé le nombre mystère en %d coups !!!\n\n", compteurCoups);
compteurCoups = 0;
}
} while (nombreSaisi != nombreMystere);
do {
printf("Voulez-vous rejouer ?\n");
printf("0. Non\n");
printf("1. Oui\n");
scanf("%d", &continuerPartie);
} while ( (continuerPartie < 0) || (continuerPartie > 1) );
} while (continuerPartie);
return 0;
}
Qu'est-ce que vous en pensez ? Est-ce que vous avez des idées d'amélioration ?
svp je voudrais qu'on m'aide pour un code qui genere un nombre entre 1 et 100 et demande a l'ordinateur de le deviner a chaque essai de l'ordinateur
il vous demande si c'est (+-=) entre plus apres chaque nombre deviner la machine vous demandera (+-=)jusqu'a ce que vous entrer = pour dire que c'est la bonne reponse et le code affichera "gagner en nbre de coups" .
Les booléens ça existent ! Ne met plus jamais var == 1 ou var == 0 si cette var stocke un état du programme. Utilise plutôt un booléen si l'état est binaire ou alors une énumération s'il peut prendre plus de valeur que 2 et que ça à plus de sens. Les define j'évite pour ce genre de cas car les bool et énum sont meilleurs.
Un chapitre entier devrait être rajouté (au début) dans le cours de C sur ce sujet ...
Enfin un
const int MIN = 1
N'a absolument rien à faire dans un code !!! On utilise pas le mot const pour déclarer une constante, on l'utilise pour dire qu'on ne modifiera pas la variable (un pointeur par exemple) mais la valeur 1 ?! Un define est bien plus approprié ici.
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération