1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291
| #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#ifndef bool // si non définit, définit boolean
#define bool // est-ce que je devrais pas indiquer un "int" quelques parts?
#define TRUE 1
#define FALSE 0
#endif // !boolean
//déclaration des fonctions secondaires
void CopFichier(FILE *fileBuffer);
int DispTitle(void);
int MenuLvl(void);
void ChooseLvl(int *MIN, int *MAX);
int YourNumb(const int MIN, const int MAX);
int TestNumb(int myNumb, const int nbrMystere);
void ScoreTab(const int nbrMystere, int compteur);
void GameMstBx(const int MIN, const int MAX);
int MenuRestart(void);
bool RestartGame(void);
void PauseApp(void);
// ==================== FONCTION MAIN ====================
int main() {
int status = 0;
bool continuerPartie = FALSE;
//declaration des constantes
int MIN, MAX;
int *pMIN, *pMAX;
pMIN = &MIN;
pMAX = &MAX;
//initialisation du générateur de nombre aléatoire
srand(time(NULL));
// affichage du titre du jeux
status = DispTitle();
//stop le programme en cas d'erreur
if (status == 1) return 1;
//Boucle de partie
do
{
//choix du niveau de jeux
void ChooseLvl(int pMIN, int pMAX)
//début de la partie
GameMstBx(MIN, MAX);
//recommencer une partie
} while ((continuerPartie = RestartGame()) == TRUE);
// Pause avant la fin du programme
PauseApp();
//fin du programme
return 0;
}
// ==================== FONCTION SECOND ====================
// imprime écran le contenu du buffer
void CopFichier(FILE *fileBuffer) {
// déclaration des variable
char copyStr[257 + 1];
//impression du contenu du document
while (fgets(copyStr, sizeof(copyStr), fileBuffer) != NULL)
printf("%s", copyStr);
}
// fonction affichant le titre:
int DispTitle(void) {
// déclaration des pointeurs
char *filename = "./title.txt";
FILE *fileBuffer;
// ouverture vérification du flux
if ((fileBuffer = fopen(filename, "r")) == NULL) {
fprintf(stderr, "Erreur - Echec de l'ouverture du fichier %s en mode lecture!", filename);
// retour valeur sentinelle - une erreur s'est produite
return 1;
}
//Impression écran du message
fputs("Bienvenu dans \n",stdout);
CopFichier(fileBuffer);
fputs("\n\n", stdout);
// fermeture du flux
fclose(fileBuffer);
// retour valeur sentinelle - tout c'est bien passé
return 0;
}
//fonction affichant le menu
int MenuLvl(void) {
//initialisation des variables
char entreeCl[10 + 1];
int choixLvl = 1, status;
fputs("Choississez le niveau de votre partie: \n", stdout);
fputs("1. Facile\n", stdout);
fputs("2. Moyen\n", stdout);
fputs("3. Difficile\n", stdout);
while (1)
{
fputs("Votre choix : ", stdout);
fgets(entreeCl, 10 + 1, stdin);
status = sscanf(entreeCl, "%d", &choixLvl);
// "if" casse la boucle, si les conditions sont remplies
if (status == 1 && choixLvl >= 1 && choixLvl <= 3) break;
// message d'erreur s'affichant si la boucle "if" n'est pas activé
fputs("Entree incorrect - Entrez le choix 1, 2 ou 3.\n", stdout);
}
return choixLvl;
}
//fonction menu permettant de choisir son niveau
void ChooseLvl(int *pMIN, int *pMAX) {
switch (MenuLvl())
{
case 1:
printf("Vous avez choisi le niveau de difficulté : Facile");
*pMIN = 1;
*pMAX = 10;
break;
case 2:
printf("Vous avez choisi le niveau de difficulté : Moyen");
*pMIN = 1;
*pMAX = 100;
break;
case 3:
printf("Vous avez choisi le niveau de difficulté : Difficile");
*pMIN = 1;
*pMAX = 1000;
break;
default:
printf("Vous avez choisi le niveau de difficulté : Facile");
*pMIN = 1;
*pMAX = 10;
break;
}
}
// fonction demandant la réponse
int YourNumb(const int MIN, const int MAX) {
char retourCl[10 + 1];
int myNumb, status;
while (1)
{
printf("Entrez un nombre entre %d et %d : ", MIN, MAX);
fgets(retourCl, 10 + 1, stdin);
status = sscanf(retourCl, "%d", &myNumb);
// "if" casse la boucle, si ses conditions sont remplies
if (status == 1 && myNumb >= MIN && myNumb <= MAX) break;
// message d'erreur s'affichant si la boucle "if" n'est pas activé
fputs("Entree incorrect - Entrez un nombre compris entre 0 et 100!\n", stdout);
}
return myNumb;
}
//fonction donnant un indice
int TestNumb(int myNumb, const int nbrMystere) {
if (myNumb < nbrMystere)
{
fputs("C'est plus!\n", stdout);
return 0;
}
else if (myNumb > nbrMystere)
{
fputs("C'est moins!\n", stdout);
return 0;
}
else
{
fputs("Bravo! vous avez trouvez le nombre mystere\n", stdout);
return 1;
}
}
//fonction affichant le résultat du joueur
void ScoreTab(const int nbrMystere, int compteur) {
fputs("===== RESULTAT DE PARTIE =====\n", stdout);
printf("Le nombre mystere etait : %d \n", nbrMystere);
printf("Nombre de tour: %d \n", compteur);
}
//fonction commençant la partie
void GameMstBx(const int MIN,const int MAX) {
// playerAnswer - variable stockant la réponse du joueur
// nbrMystere - variable stockant le nombre généré aléatoirement
int playerAnswer, nbrMystere;
// gameWin - variable définissant la condition du jeux (1 = gagné)
// compteur - variable comptant le nombre de tour
int gameWin = 0, compteur = 0;
//attribution d'un nombre généré aléatoirement
nbrMystere = (rand() % (MAX - MIN + 1)) + MIN;
//boucle de partie
do
{
//compte le nombre de tour
compteur++;
//fonction récupérant la réponse du joueur
playerAnswer = YourNumb(MIN, MAX);
//fonction testant la réponse du joueur
gameWin = TestNumb(playerAnswer, nbrMystere);
} while (gameWin == 0);
// fonction affichant les résultats de partie
ScoreTab(nbrMystere, compteur);
}
//fonction affichant le menu pour recommencer une partie
int MenuRestart(void) {
//initialisation des variables
char entreeCl[10 + 1];
int rePartie = 1, status;
fputs("Voulez-vous recommencer une partie: \n", stdout);
fputs("1. OUI\n", stdout);
fputs("2. NON\n", stdout);
while (1)
{
fputs("Votre choix : ", stdout);
fgets(entreeCl, 10 + 1, stdin);
status = sscanf(entreeCl, "%d", &rePartie);
// "if" casse la boucle, si les conditions sont remplies
if (status == 1 && rePartie >= 1 && rePartie <= 2) break;
// message d'erreur s'affichant si la boucle "if" n'est pas activé
fputs("Entree incorrect - Entrez le choix 1 ou 2.\n", stdout);
}
return rePartie;
}
// fonction permettant de recommencer la partie
bool RestartGame(void) {
bool statusG;
switch (MenuRestart())
{
case 1:
fputs("Début d'une nouvelle partie!\n", stdout);
statusG = TRUE;
break;
case 2:
fputs("Au revoir!\n", stdout);
statusG = FALSE;
break;
default:
fputs("Au revoir!\n", stdout);
statusG = FALSE;
break;
}
return statusG;
}
// fonction de pause du programme - demande une validation pour continuer
void PauseApp(void) {
do {
fputs("Appuyez sur 'Entree' pour terminer le programme. \n", stdout);
} while (getchar() != '\n');
} |
Partager