Amelioration du jeu du pendu
Bonjour,
J'ai un entretien d'embauche la semaine prochaine dans une boite faisant de la programation embarque.
Je viens tout juste d'avoir mon diplome, je n'ai aucune experience dans ce domaine.
D'apres ce que j'ai lu, la gestion de la memoire est tres critique.
Voici un petit jeu du pendu que j'ai fait, je souhaiterai savoir quelles modification je peux y apporter.
Merci
PS: Si certains d'entre vous peuvent me donner quelques conseille general je suis preneur egalement. Merci
Code:
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
| #include <stdio.h> //Include necessaire pour les E/S
#include <stdlib.h>
#include <ctype.h>
#include <time.h> //include necessaire pour la gestion du temps (rand-time)
#include <string.h>
#include "dico.h"
char* copiemodif(char* ,char* );
char lireCaractere();
int nombreAleatoire(int nombreMax);
int main(int argc, char* argv[])
{
char essais = 10; //Variable definissan le nombre d'essais de l'utilisateur
FILE* fichier = NULL; //Fichier dans lequel se trouve des mots que l'on va prendre au hasard et qu'il faudra trouver
char _Buf[10] = ""; // Chaine de caracteres contenant un mot a trouver. par exemple "voiture"
char resultat[10] = ""; // Chaine de caracteres affichant a l'ecran le mot a trouver par exemple "v***ur*"(pour voiture)
char* caractereRenvoye = NULL;
/* L'ordinateur choisi un mot du fichier dico */
fichier = fopen("dico.txt", "r");//On ouvre un fichier en lecture uniquement
if (fichier)//on verifie la validite de notre pointeur
{
int index = 0;
while (fgets(_Buf, 10, fichier)) // Dans cette boucle, nous comptons le nombre de mots qui se trouvent dans le fichier
++index;
fseek(fichier, 0, SEEK_SET);// On replace le curseur a l'origine
int indexeMot = nombreAleatoire(index); //On choisi un nombre au hasard inferieur ou egal au nombre de mots se trouvant dans le fichier
index = 1;
do{ // cette boucle nous renvoie le mot corespondant au chiffre tombe par hasard, il est stocke dans _Buff
fgets(_Buf, 10, fichier);
index++;
}while(index<indexeMot);
copiemodif(resultat,_Buf); // fonction qui remplace chaque lettre du mot par le caractere '*'
fclose(fichier);//Ferme le fichier
}
else
printf("l'ouverture de dico.txt a echoue\n");
/* On interroge l'utilisateur */
char c='*';
while(essais && strcmp(_Buf,resultat)) //Tant que le nombre d'essais maximal n'est pas atteind, ou que le mot n'a pas ete trouve
{
char flag=0;
printf("Vous avez %d essais\n",essais);
printf("Veuillez entrer une lettre: ");
c=lireCaractere();
for (int i = 0; _Buf[i] != NULL; i++)
if(_Buf[i] == c)
{
flag = 1;
*(resultat +i) = _Buf[i];
}
if (!flag)//flag nous sert pour ne pas decrementer le nombre d'essai si l'utilisateur a entre une lettre valide
essais--;
printf("%s\n",resultat);
}
essais ? printf("Felicitation!!\n") : printf("Perdu!!\n") ;
system("Pause");
return 0;
}
/* Fonctions necessaire a la realisation du pendu */
int nombreAleatoire(int nombreMax)
{
srand(time(NULL));
return (rand() % nombreMax);
}
char lireCaractere()
{
char caractere = 0;
caractere = getchar(); // On lit le premier caractère
caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
// On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
while (getchar() != '\n') ;
return caractere; // On retourne le premier caractère qu'on a lu
}
char* copiemodif(char* resultat,char* _Buf)
{
int i=0;
char* tmp = &_Buf[0];
for (i; *tmp != NULL;i++)
{
if (*tmp == '\n')
resultat[i]='\n';
else
resultat[i]= '*';
tmp++;
}
return resultat;
} |