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
|
#include <stdio.h>
#include <string.h>
#include "input.h"
void pendu(const char *);
void affichageMot(const char *);
char saisieLettre(const char *);
char *verifLettre(const char,const char *, const char *, char *);
int partieFinie(const char *,const char *,const int);
void epilogue(const char *,const int);
int main(int argc, char **argv)
{
char mot[30];
char phrase[] = "Entrez le mot à rechercher (max. 30 caractères)";
while (!userInput(phrase, mot, 30))
{
printf("Une erreur s'est produite ... ");
}
pendu(mot);
return 0;
}
/*************************************************************************
* Nom : pendu() *
*-----------------------------------------------------------------------*
* Fonction : Jeu du pendu. *
*-----------------------------------------------------------------------*
* Paramètres : mot → Le mot à deviner. *
*-----------------------------------------------------------------------*
* Valeur de retour : *
************************************************************************/
void pendu(const char *mot)
{
/* Déclaration des variables */
char lettre, propose[26], ok[30], test[30], copieTest[30];
int fini, i, mauvRep, cptLettreDejaProposee;
/* Initialisation des variables */
lettre = ' ';
mauvRep = 0;
cptLettreDejaProposee = 0;
for (i = 0; i < strlen(mot); i++)
{
test[i] = '-';
}
test[i] = '\0';
fini = 0;
while (!fini)
{
affichageMot(test);
lettre = saisieLettre(propose);
cptLettreDejaProposee++;
propose[cptLettreDejaProposee-1] = lettre;
strncpy(ok, verifLettre(lettre, mot, test, copieTest), 30);
if (strcmp(ok, test) == 0)
{
mauvRep++;
}
else
{
strncpy(test, ok, 30);
/* strncpy ne plaçant pas un null byte de terminaison en cas de source
plus longue que la destination, il est préférable de le faire. */
ok[29]= '\0';
}
fini = partieFinie(test, mot, mauvRep);
}
affichageMot(test);
epilogue(mot, fini);
}
void affichageMot(const char *test)
{
printf("%s\n",test);
}
char saisieLettre(const char *propose)
{
char lettre[2];
char phrase[] = "Entrez une lettre de l'alphabet (et une seule)";
while (!userInput(phrase, lettre, 1) || !(lettre[0] >= 97 && lettre[0] <= 122) || strchr(propose, lettre[0]))
{
printf("Erreur ... ");
}
return lettre[0];
}
char *verifLettre(const char lettre, const char *mot, const char *test, char *copieTest)
{
int i = 0;
strncpy(copieTest, test, 30);
while (mot[i] != '\0')
{
if (lettre == mot[i])
{
copieTest[i] = lettre;
}
i++;
}
return copieTest;
}
int partieFinie(const char *test, const char *mot, const int mauvRep)
{
int etatPartie = 0;
if (strcmp(test, mot) == 0)
{
etatPartie = 1;
}
else if (mauvRep > 5)
{
etatPartie = 2;
}
return etatPartie;
}
void epilogue(const char *mot,const int fini)
{
if (fini)
{
printf("Bravo, vous avez gagne !");
}
else
{
printf("Perdu ! Le mot qu'il fallait deviner était %s.", mot);
}
} |
Partager