Le Mastermind Numerique
jeandchanel
Messages postés
135
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
je viens de terminer de coder le "Mastermind Numerique" et je publie ici le code complet pour recevoir des critiques constructives, des corrections en cas d'erreurs et des conseils de la part de vous les expert en C, merci d'avance.
Voici d'ailleurs le déroulement d'une partie en mode Solo :
MODE DE JEU
Bien vouloir choisir un mode de jeu !
1. Mode Solo
2. Mode Multi
Votre choix ? : 1
Bienvenu au mode Solo !
NIVEAU DE JEU
Bien vouloir choisir un niveau de jeu !
1. Facile
2. Moyen
3. Difficile
Votre choix ? : 1
Bienvenu au niveau Facile !
La combinaison a trouver comporte 4 chiffres
Attention, il vous reste 15 coups
Essai N°1 : 1234
Chiffre(s) bien place(s) : 0
Chiffre(s) mal place(s) : 2
Attention, il vous reste 14 coups
Essai N°2 :
je viens de terminer de coder le "Mastermind Numerique" et je publie ici le code complet pour recevoir des critiques constructives, des corrections en cas d'erreurs et des conseils de la part de vous les expert en C, merci d'avance.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <stdbool.h> #include "jeu.h" void viderBuffer(); int lire(char* chaine, int longueurChaine); long lireLong(); void debutPartie(); long demanderModeJeu(long modeJeu); Niveau demanderNiveauJeu(long choixNiveau); void nombreAleatoire(char *combinaison, Niveau niveauJeu); void combiAleatoire(char *combinaison, int nbChiffre); bool rejouerPartie(); int main() { int nbCoupsRestants = 0, nbCoups = 0, nbChiffre = 0, compteurCoups = 0; int chiffresBP = 0, chiffresMP = 0, i, j, k; char combinaison[TAILLE_MAX], combijeu[TAILLE_MAX], jeu[TAILLE_MAX]; long modeJeu = 0, choixNiveau = 0; Niveau niveauJeu; bool gagne = 0; time_t t; srand((unsigned) time(&t)); debutPartie(); do { modeJeu = demanderModeJeu(modeJeu); printf("\n\nBienvenu au mode %s !", modeJeu == SOLO ? "Solo" : "Multi"); niveauJeu = demanderNiveauJeu(choixNiveau); printf("\n\nBienvenu au niveau %s !", niveauJeu.nomNiveau); if(modeJeu == SOLO) { nbCoupsRestants = niveauJeu.coupsMax; printf("\n\nLa combinaison a trouver comporte %d chiffres", niveauJeu.nbChiffre); nombreAleatoire(combinaison, niveauJeu); for(i = 0; i < niveauJeu.coupsMax && gagne == 0 ; i++) { printf("\n\nAttention, il vous reste %d coups", nbCoupsRestants); do { printf("\n\nEssai N°%d : ", i+1); lire(jeu, TAILLE_MAX); if(strlen(jeu) != niveauJeu.nbChiffre) printf("\nEntrez %d chiffres s'il vous plait !", niveauJeu.nbChiffre); }while(strlen(jeu) != niveauJeu.nbChiffre); nbCoupsRestants--; if(!strncmp(jeu, combinaison, niveauJeu.nbChiffre)) gagne = 1; else { strcpy(combijeu, combinaison); chiffresBP = 0; chiffresMP = 0; for(j = 0; j < niveauJeu.nbChiffre; j++) { if(jeu[j] == combijeu[j]) { chiffresBP++; jeu[j] = 'B'; combijeu[j] = 'b'; } } for(j = 0; j < niveauJeu.nbChiffre; j++) { for(k = 0; k < niveauJeu.nbChiffre; k++) if(j != k && jeu[j] == combijeu[k]) { jeu[j]='M'; combijeu[k]='m'; chiffresMP++; } } printf("\n\nChiffre(s) bien place(s) : %d \n\nChiffre(s) mal place(s) : %d ", chiffresBP, chiffresMP); } } }else { do { printf("\n\nEn combien de coups jouez vous ? : "); nbCoups = lireLong(); if(nbCoups > 16) printf("\nCoups Max = 16 !"); }while(nbCoups > 16); do { printf("\n\nAvec combien de chiffres ? : "); nbChiffre = lireLong(); if(nbCoups > 6) printf("\nChiffre Max = 6 !"); }while(nbChiffre > 6); combiAleatoire(combinaison, nbChiffre); for(i = 0; i < nbCoups && gagne == 0 ; i++) { printf("\n\nAttention, il vous reste %d coups", nbCoups); nbCoups--; do { printf("\n\nEssai N°%d : ", i+1); lire(jeu, TAILLE_MAX); if(strlen(jeu) != nbChiffre) printf("\nEntrez %d chiffres s'il vous plait !", nbChiffre); }while(strlen(jeu) != nbChiffre); compteurCoups++; nbCoupsRestants = compteurCoups; if(!strncmp(jeu, combinaison, nbChiffre)) gagne = 1; else { strcpy(combijeu, combinaison); chiffresBP = 0; chiffresMP = 0; for(j = 0; j < nbChiffre; j++) { if(jeu[j] == combijeu[j]) { chiffresBP++; jeu[j] = 'B'; combijeu[j] = 'b'; } } for(j = 0; j < nbChiffre; j++) { for(k = 0; k < nbChiffre; k++) if(j != k && jeu[j] == combijeu[k]) { jeu[j]='M'; combijeu[k]='m'; chiffresMP++; } } printf("\nChiffre(s) bien place(s) : %d \nChiffre(s) mal place(s) : %d ", chiffresBP, chiffresMP); } } } if(!gagne || nbCoupsRestants == 0 ) { printf("\n\nPerdu, la bonne combinaison etait : %s !", modeJeu == SOLO ? combinaison : combinaison); printf("\n\n\n\nPartie terminee ! "); }else { printf ("\n\nBravo, vous avez trouve la bonne combinaison en %d coups !", modeJeu == SOLO ? (niveauJeu.coupsMax - nbCoupsRestants) : compteurCoups); printf("\n\n\n\nPartie terminee ! "); } }while(rejouerPartie()); return EXIT_SUCCESS; }
Voici d'ailleurs le déroulement d'une partie en mode Solo :
MODE DE JEU
Bien vouloir choisir un mode de jeu !
1. Mode Solo
2. Mode Multi
Votre choix ? : 1
Bienvenu au mode Solo !
NIVEAU DE JEU
Bien vouloir choisir un niveau de jeu !
1. Facile
2. Moyen
3. Difficile
Votre choix ? : 1
Bienvenu au niveau Facile !
La combinaison a trouver comporte 4 chiffres
Attention, il vous reste 15 coups
Essai N°1 : 1234
Chiffre(s) bien place(s) : 0
Chiffre(s) mal place(s) : 2
Attention, il vous reste 14 coups
Essai N°2 :
A voir également:
- Le Mastermind Numerique
- Télévision numérique - Guide
- Télévision numérique terrestre - Accueil - TV & Vidéo
- Pavé numérique bloqué - Guide
- Clavier numérique bloqué - Guide
- Caractère numérique - Guide
2 réponses
Salut,
Ta fonction debutPartie on ne la voit pas, tu l'as déclarée dans un autre fichier non?
Déclarer des variables globales est très déconseillé, c'est étonnant que votre prof ne vous l'ai pas dis.
Je trouve ça dommage que tu ais fais tout un bloc "moche", ce n'est pas facile/agréable à lire, tu aurais du utiliser des prototypes, c'est mieux pour toi et pour ton lecteur.
Ta fonction debutPartie on ne la voit pas, tu l'as déclarée dans un autre fichier non?
Déclarer des variables globales est très déconseillé, c'est étonnant que votre prof ne vous l'ai pas dis.
Je trouve ça dommage que tu ais fais tout un bloc "moche", ce n'est pas facile/agréable à lire, tu aurais du utiliser des prototypes, c'est mieux pour toi et pour ton lecteur.
Bonjour,
J'ai un soucis avec mon IDE (Cloud9, IDE en ligne !) . Je ne sais pas si c'est moi ou c'est l'IDE qui déconne? Enfin bon, voici le problème, je voudrais faire la compilation séparée et j'ai donc créer 02 fichiers pour mon jeu a savoir jeu.c (qui contient toutes les fonctions a utiliser dans mon jeu) et jeu.h (qui contient tous les prototypes des fonctions créer dans jeu.c) ensuite j'ai inclus le fichier jeu.h dans les fichiers jeu.c et main.c (qui s'appelle mastermind.c) voici d'ailleurs les 03 fichiers :
...Mais a ma grande surprise voici la reponse de mon IDE (Cloud9) :
Running "/home/ubuntu/workspace/Le_Mastermind2/mastermind.c"
/tmp/ccCkUGpF.o: In function `main':
mastermind.c:(.text+0x90): undefined reference to `debutPartie'
mastermind.c:(.text+0x9f): undefined reference to `demanderModeJeu'
mastermind.c:(.text+0xe7): undefined reference to `demanderNiveauJeu'
mastermind.c:(.text+0x259): undefined reference to `nombreAleatoire'
mastermind.c:(.text+0x2ad): undefined reference to `lire'
mastermind.c:(.text+0x4bd): undefined reference to `lireLong'
mastermind.c:(.text+0x4fd): undefined reference to `lireLong'
mastermind.c:(.text+0x53b): undefined reference to `combiAleatoire'
mastermind.c:(.text+0x596): undefined reference to `lire'
mastermind.c:(.text+0x831): undefined reference to `rejouerPartie'
collect2: error: ld returned 1 exit status
Process exited with code: 1
Espérant avoir posé clairement le problème, j’attends impatiemment vos réponses, merci d'avance a vous les experts du langage C.
J'ai un soucis avec mon IDE (Cloud9, IDE en ligne !) . Je ne sais pas si c'est moi ou c'est l'IDE qui déconne? Enfin bon, voici le problème, je voudrais faire la compilation séparée et j'ai donc créer 02 fichiers pour mon jeu a savoir jeu.c (qui contient toutes les fonctions a utiliser dans mon jeu) et jeu.h (qui contient tous les prototypes des fonctions créer dans jeu.c) ensuite j'ai inclus le fichier jeu.h dans les fichiers jeu.c et main.c (qui s'appelle mastermind.c) voici d'ailleurs les 03 fichiers :
//fichier jeu.h en entier pour le jeu " Mastermind Numerique " #ifndef DEF_JEU #define DEF_JEU #define SOLO 1 #define MULTI 2 typedef struct Niveau Niveau; struct Niveau { char nomNiveau[100]; int coupsMax; int nbChiffre; }; Niveau niveaux[] = { {"Facile", 15, 4}, {"Moyen", 12, 5}, {"Difficile", 10, 6} }; extern void viderBuffer(); extern int lire(char* chaine, int longueurChaine); extern long lireLong(); extern void debutPartie(); extern long demanderModeJeu(long modeJeu); extern Niveau demanderNiveauJeu(long choixNiveau); extern void nombreAleatoire(char *combinaison, Niveau niveauJeu); extern void combiAleatoire(char *combinaison, int nbChiffre); extern bool rejouerPartie(); #endif //Un extrait du fichier jeu.c pour le jeu " Mastermind Numerique " #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <stdbool.h> #include "jeu.h" void viderBuffer() { int c = 0; while(c != '\n' && c != EOF) { c = getchar(); } } //Un extrait du fichier mastermind.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <stdbool.h> #include "jeu.h" #define TAILLE_MAX 25 void viderBuffer();
...Mais a ma grande surprise voici la reponse de mon IDE (Cloud9) :
Running "/home/ubuntu/workspace/Le_Mastermind2/mastermind.c"
/tmp/ccCkUGpF.o: In function `main':
mastermind.c:(.text+0x90): undefined reference to `debutPartie'
mastermind.c:(.text+0x9f): undefined reference to `demanderModeJeu'
mastermind.c:(.text+0xe7): undefined reference to `demanderNiveauJeu'
mastermind.c:(.text+0x259): undefined reference to `nombreAleatoire'
mastermind.c:(.text+0x2ad): undefined reference to `lire'
mastermind.c:(.text+0x4bd): undefined reference to `lireLong'
mastermind.c:(.text+0x4fd): undefined reference to `lireLong'
mastermind.c:(.text+0x53b): undefined reference to `combiAleatoire'
mastermind.c:(.text+0x596): undefined reference to `lire'
mastermind.c:(.text+0x831): undefined reference to `rejouerPartie'
collect2: error: ld returned 1 exit status
Process exited with code: 1
Espérant avoir posé clairement le problème, j’attends impatiemment vos réponses, merci d'avance a vous les experts du langage C.
Ta fonction debutPartie on ne la voit pas, tu l'as déclarée dans un autre fichier non?
Il s'agit de la compilation séparée ! la fonction debutPartie() se trouve dans le fichier jeu.c