Projet ''Le Jeu des Allumettes"
jeandchanel
Messages postés
135
Date d'inscription
Statut
Membre
Dernière intervention
-
jeandchanel Messages postés 135 Date d'inscription Statut Membre Dernière intervention -
jeandchanel Messages postés 135 Date d'inscription Statut Membre Dernière intervention -
Bonjour, voici le " Jeu des allumettes ", bien vouloir tester ce code source et y apporter des critiques constructives dans le sens de l’amélioration et de plus de performances.
Donneurs de leçons s'abstenir !!!
Donneurs de leçons s'abstenir !!!
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define SOLO 1 #define MULTI 2 typedef enum bool bool; enum bool { TRUE, FALSE }; typedef struct Niveau Niveau; struct Niveau { char nomNiveau[100]; int nbDepart; }; Niveau niveaux[] = { {"Facile", 39}, {"Moyen", 27 }, {"Difficile", 13} }; void viderBuffer() { int c = 0; while(c != '\n' && c != EOF) { c = getchar(); } } int lire(char* chaine, int longueurChaine) { char* positionEntree = NULL; if(fgets(chaine, longueurChaine, stdin) != NULL) { positionEntree = strchr(chaine, '\n'); if(positionEntree != NULL) { *positionEntree = '\0'; }return 1; }else { viderBuffer(); return 0; } } long lireLong() { char nombreTexte[100] = {0}; if(lire(nombreTexte, 100)) { return strtol(nombreTexte, NULL, 10); }else { viderBuffer(); return 0; } } double lireDouble() { char nombreTexte[100] = {0}; char *positionVirgule = NULL; if(lire(nombreTexte, 100)) { positionVirgule = strchr(nombreTexte, ','); if(positionVirgule != NULL) { *positionVirgule = '.'; }return strtod(nombreTexte, NULL); }else { viderBuffer(); return 0; } } void debutPartie() { printf("\n" "**************************************\n" "********LE JEU DES ALLUMETTES*********\n" "********Code par Jean Dechanel********\n" "**************************************\n\n"); } int demanderMenu(long modeMenu) { printf("\n" "MENU\n" "Bien vouloir choisir !\n" "1. Nombre Predefini(21)\n2. Nombre Aleatoire\n3. Fixer un Nombre\n"); do { printf("\n" "Votre choix ? "); modeMenu = lireLong(); }while(modeMenu < 1 || modeMenu > 2); return modeMenu; } int demanderModeJeu(long modeJeu) { printf("\n" "MODE DE JEU\n" "Bien vouloir choisir un mode de jeu !\n" "1. Mode Solo\n2. Mode Multi\n"); do { printf("\n" "Votre choix ? "); modeJeu = lireLong(); }while(modeJeu < 1 || modeJeu > 2); return modeJeu; } Niveau demanderNiveauJeu(long choixNiveau) { printf("\n" "NIVEAU DE JEU\n" "Bien vouloir choisir un niveau de jeu !\n" "1. Facile\n2. Moyen\n3. Difficile\n"); do { printf("\n" "Votre choix ? "); choixNiveau = lireLong(); }while(choixNiveau < 1 || choixNiveau > 3); return niveaux[choixNiveau - 1]; } bool rejouerPartie(long choice) { printf("\n" "Voulez-vous rejouer une autre Partie ?\n" "1. Oui\n2. Non\n"); do { printf("\n" "Votre choix ? "); choice = lireLong(); }while(choice < 1 || choice > 2); return choice == 1; } void affichage(Niveau niveauJeu) { int i; // Cette boucle affiche les allumettes for(i = 1; i <= niveauJeu.nbDepart; i++) { printf("|"); } // Cette boucle affiche les allumettes } int menuSolo(long userChoice) { printf("\n" "Que voulez-vous faire ?\n" "1. Affronter l'Ordinateur ?\n2. Affronter l'Ordinateur avec un nombre Predefini(20) ?\n"); do { printf("\n" "Votre choix ? "); userChoice = lireLong(); }while(userChoice < 1 || userChoice > 3); return userChoice; } void level1(Niveau niveauJeu, long nbAEnlever, long k, long min, long max) { do { do { printf("\n\nJoueur, nombre d'allumettes a enlever : "); nbAEnlever = lireLong(); }while(nbAEnlever < 1 || nbAEnlever > 3); niveauJeu.nbDepart = niveauJeu.nbDepart - nbAEnlever; printf("\n" "Il reste %d allumettes ", niveauJeu.nbDepart); affichage(niveauJeu); if(niveauJeu.nbDepart == 1) { niveauJeu.nbDepart = 0; printf("\n\nBravo Joueur, vous avez Gagne !\n"); } if (niveauJeu.nbDepart > 0) { k = rand() % (max - min + 1) + min; if(niveauJeu.nbDepart == 3) k = 2; else if(niveauJeu.nbDepart == 2) k = 1; niveauJeu.nbDepart = niveauJeu.nbDepart - k ; printf("\n\nOrdinateur, nombre d'allumettes a enlever : %ld\n" "\nIl reste %d allumettes ", k, niveauJeu.nbDepart); affichage(niveauJeu); if(niveauJeu.nbDepart == 1) { niveauJeu.nbDepart = 0; printf("\n\nOrdinateur, Gagne !\n"); } } }while(niveauJeu.nbDepart > 1); } void level2(Niveau niveauJeu, long nbAEnlever, long k, long min, long max) { do { do { printf("\n\nJoueur, nombre d'allumettes a enlever : "); nbAEnlever = lireLong(); }while(nbAEnlever < 1 || nbAEnlever > 3); niveauJeu.nbDepart = niveauJeu.nbDepart - nbAEnlever; printf("\n" "Il reste %d allumettes ", niveauJeu.nbDepart); affichage(niveauJeu); if(niveauJeu.nbDepart == 1) { niveauJeu.nbDepart = 0; printf("\n\nBravo Joueur, vous avez Gagne !\n"); } if (niveauJeu.nbDepart > 0) { if (niveauJeu.nbDepart >= 19) k = rand() % (max - min + 1) + min; else if (niveauJeu.nbDepart % 2 == 0) k = 1 ; else if (niveauJeu.nbDepart % 2 == 1) k = 2 ; else if (niveauJeu.nbDepart % 2 == 0) k = 3 ; niveauJeu.nbDepart = niveauJeu.nbDepart - k ; printf ("\n\nOrdinateur, nombre d'allumettes a enlever : %ld\n" "\nIl reste %d allumettes ", k, niveauJeu.nbDepart); affichage(niveauJeu); if(niveauJeu.nbDepart == 1) { niveauJeu.nbDepart = 0; printf("\n\nOrdinateur, Gagne !\n"); } } }while(niveauJeu.nbDepart > 1); } long level3(Niveau niveauJeu, long nbAEnlever, long k) { do { do { printf("\n\nJoueur, nombre d'allumettes a enlever : "); nbAEnlever = lireLong(); }while(nbAEnlever < 1 || nbAEnlever > 3); niveauJeu.nbDepart = niveauJeu.nbDepart - nbAEnlever; printf("\n" "Il reste %d allumettes ", niveauJeu.nbDepart); affichage(niveauJeu); if(niveauJeu.nbDepart == 1) { niveauJeu.nbDepart = 0; printf("\n\nBravo Joueur, vous avez Gagne !\n"); } if (niveauJeu.nbDepart > 0) { if (niveauJeu.nbDepart == 12) k = 3 ; else if (niveauJeu.nbDepart % 2 == 1) k = 2; else if (niveauJeu.nbDepart % 2 == 0) k = 1; else if (niveauJeu.nbDepart == 2) k = 1; niveauJeu.nbDepart = niveauJeu.nbDepart - k ; printf ("\n\nOrdinateur, nombre d'allumettes a enlever : %ld\n" "\nIl reste %d allumettes ", k, niveauJeu.nbDepart); affichage(niveauJeu); if(niveauJeu.nbDepart == 1) { niveauJeu.nbDepart = 0; printf("\n\nOrdinateur, Gagne !\n"); } } }while(niveauJeu.nbDepart > 1); } void affichageAllumettes(int nbDepart) { int i; for(i = 1; i <= nbDepart; i++) { printf("|"); } } void nbPredefini(long nbDepart, long nbAEnlever, long k) { printf("\nLe nombre d'allumettes de depart est %d", nbDepart); do { do { printf("\n\nJoueur, nombre d'allumettes a enlever : "); nbAEnlever = lireLong(); }while(nbAEnlever < 1 || nbAEnlever > 3); nbDepart = nbDepart - nbAEnlever; printf("\n" "Il reste %ld allumettes ", nbDepart); affichageAllumettes(nbDepart); if(nbDepart == 1) { nbDepart = 0; printf("\n\nBravo Joueur, vous avez Gagne !\n"); } if (nbDepart != 0) { if (nbDepart == 13 && k != 0) k = 2; else if (nbDepart % 2 == 1) k = 2; else if (nbDepart % 2 == 0) k = 1; else if (nbDepart % 2 == 0) k = 3; nbDepart = nbDepart - k ; printf ("\n\nOrdinateur, nombre d'allumettes a enlever : %ld\n" "\nIl reste %ld allumettes ", k, nbDepart); affichageAllumettes(nbDepart); if(nbDepart == 1) { nbDepart = 0; printf("\n\nOrdinateur, Gagne !\n"); } } }while(nbDepart > 1); } void player1VsPlayer2(Niveau niveauJeu, long nbAEnlever) { printf("\nLe nombre d'allumettes de depart est %d", niveauJeu.nbDepart); do { do { printf("\n\nJoueur1, nombre d'allumettes a enlever : "); nbAEnlever = lireLong(); }while(nbAEnlever < 1 || nbAEnlever > 3); niveauJeu.nbDepart = niveauJeu.nbDepart - nbAEnlever; printf("\nIl reste %d allumettes ", niveauJeu.nbDepart); affichage(niveauJeu); if(niveauJeu.nbDepart == 1) { niveauJeu.nbDepart = 0; printf("\n\nBravo Joueur1, vous avez Gagne !\n"); } if(niveauJeu.nbDepart != 0) { do { printf("\n\nJoueur2, nombre d'allumettes a enlever : "); nbAEnlever = lireLong(); }while(nbAEnlever < 1 || nbAEnlever > 3); niveauJeu.nbDepart = niveauJeu.nbDepart - nbAEnlever; printf("\nIl reste %d allumettes ", niveauJeu.nbDepart); affichage(niveauJeu); } if(niveauJeu.nbDepart == 1) { niveauJeu.nbDepart = 0; printf("\n\nBravo Joueur2, vous avez Gagne !\n"); } }while(niveauJeu.nbDepart > 1); } void ordiVsPlayer(Niveau niveauJeu, long nbAEnlever, long k) { printf("\nLe nombre d'allumettes de depart est %d", niveauJeu.nbDepart); switch(niveauJeu.nbDepart) { case 39 : level1(niveauJeu, nbAEnlever, k, 1, 3); break; case 27 : level2(niveauJeu, nbAEnlever, k, 1, 3); break; case 13 : level3(niveauJeu, nbAEnlever, k); break; } } int main() { long modeJeu = 0, choixNiveau = 0, userChoice = 0, choice = 0; long nbAEnlever = 0, k = 0; Niveau niveauJeu; srand(time(NULL)); do { modeJeu = demanderModeJeu(modeJeu); printf("\nBienvenu au mode %s !\n", modeJeu == SOLO ? "Solo" : "Multi"); niveauJeu = demanderNiveauJeu(choixNiveau); printf("\nBienvenu au niveau %s !\n", niveauJeu.nomNiveau); if(modeJeu == SOLO) { userChoice = menuSolo(userChoice); printf( "\nVous avez choisi %s !\n", userChoice == 1 ? "HumanVSOrdi" : "Predefini" ); userChoice == 1 ? ordiVsPlayer(niveauJeu, nbAEnlever, k) : nbPredefini(20, nbAEnlever, k); } else { player1VsPlayer2(niveauJeu, nbAEnlever); } }while( rejouerPartie(choice) ); return 0; }
A voir également:
- Projet ''Le Jeu des Allumettes"
- 94 jeu - Télécharger - Puzzle & Réflexion
- 94 degrés jeu - Télécharger - Divers Jeux
- Filigrane projet - Guide
- Jeu des logos - Télécharger - Jeux vidéo
- Jeu zuma - Télécharger - Jeux vidéo
1 réponse
La principale critique serait de dire que ce code est très propre, très académique, qu'il fait plaisir à lire. Il y a certainement des améliorations, sur les niveaux du genre
long level(int Level, Niveau niveauJeu, long nbAEnlever, long k)
Pour s'inspirer des logiques de jeu, je lirais :
https://blogdemaths.wordpress.com/2012/06/03/devenez-le-maitre-dune-variante-du-jeu-de-nim/
Si ces remarques peuvent t'aider... ;)
long level(int Level, Niveau niveauJeu, long nbAEnlever, long k)
Pour s'inspirer des logiques de jeu, je lirais :
https://blogdemaths.wordpress.com/2012/06/03/devenez-le-maitre-dune-variante-du-jeu-de-nim/
Si ces remarques peuvent t'aider... ;)
merci, pour tes remarques je comptes bien les mettre en pratique.