2 Commits

Author SHA1 Message Date
83066e1704 ajout des commentaires. 2024-10-15 12:01:02 +02:00
b4f25a50b0 ajout du cooldown sur le scanf 2024-10-15 11:32:43 +02:00

50
pendu.c
View File

@@ -1,7 +1,9 @@
#include <signal.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
#include <unistd.h>
#define MAX_WORDS 14 #define MAX_WORDS 14
#define MAX_TRIES 6 #define MAX_TRIES 6
@@ -35,64 +37,38 @@ void display_hangman(int tries) {
} }
} }
/* /* this function display time out when user does nothing during 30s and verify signal*/
getWordByLength() function adds the possibility to the user to choose how many letters maximum the word to guess can contains. void sig_handler(int signum){
if (signum == SIGALRM){
Returns: printf("\ntime out\n");
A random word from the words list that correspond to the user input exit (1);
*/
const char* getWordByLength(){
int maxLetters;
printf("Difficulté - Entrez le nombre de lettres maximum à deviner : ");
scanf(" %d", &maxLetters);
const char *newWords[MAX_WORDS];
int wordsFound = 0;
for (int i = 0; i < MAX_WORDS; i++) {
if(strlen(words[i]) <= maxLetters){
newWords[wordsFound] = words[i];
wordsFound++;
}
} }
if(wordsFound==0){
return "";
}
const char *word = newWords[rand() % wordsFound];
/* SECOND WORD TO GUESS (NOT WORKING)
wordsFound = 0;
for (int i = 0; i < MAX_WORDS; i++) {
if(strlen(words[i]) <= maxLetters-strlen(word)){
newWords[wordsFound] = words[i];
wordsFound++;
}
}
if(wordsFound != 0){
word = (const char*) strcat((char *) word, newWords[rand() % wordsFound]);
}*/
return word;
} }
int main() { int main() {
srand(time(NULL)); srand(time(NULL));
const char *word = getWordByLength(); const char *word = words[rand() % MAX_WORDS];
if(word==""){
printf("Aucun mot n'a été trouvé.");
return 1;
}
int word_length = strlen(word); int word_length = strlen(word);
char guessed[word_length]; char guessed[word_length];
int tries = 0; int tries = 0;
int guessed_correctly = 0; int guessed_correctly = 0;
signal(SIGALRM,sig_handler);
for (int i = 0; i < word_length; i++) { for (int i = 0; i < word_length; i++) {
guessed[i] = '_'; guessed[i] = '_';
} }
guessed[word_length] = '\0'; guessed[word_length] = '\0';
while (tries < MAX_TRIES && guessed_correctly < word_length) { while (tries < MAX_TRIES && guessed_correctly < word_length) {
printf("\nMot à deviner : %s\n", guessed); printf("\nMot à deviner : %s\n", guessed);
display_hangman(tries); display_hangman(tries);
char guess; char guess;
alarm(30);
printf("Entrez une lettre : "); printf("Entrez une lettre : ");
alarm(30);
scanf(" %c", &guess); scanf(" %c", &guess);
int found = 0; int found = 0;