diff --git a/00_Alternate_Languages/44_Hangman/C/dictionary.txt b/00_Alternate_Languages/44_Hangman/C/dictionary.txt new file mode 100644 index 00000000..ddf7a59f --- /dev/null +++ b/00_Alternate_Languages/44_Hangman/C/dictionary.txt @@ -0,0 +1,100 @@ +harm +retire +principle +tile +biology +show +reporter +profound +prestige +hardship +supplementary +abundant +firm +preparation +mother +welfare +broadcast +virgin +bloody +shaft +bird +buy +passion +south +slant +hesitate +leak +ride +contempt +banner +hurt +disaster +ranch +damage +conceive +environmental +outside +apathy +temple +arrange +hour +tone +intelligence +soup +bishop +fool +chase +snub +develop +domination +cry +distant +poem +implication +rally +assertive +anxiety +home +bear +execute +century +solo +cathedral +terminal +integration +mastermind +pen +X-ray +match +ceremony +stop +linger +slow +desert +superior +tender +debt +criticism +rehabilitation +finish +jest +scream +piece +mask +approach +sequence +negotiation +to +traffic +midnight +aspect +dull +concession +citizen +conception +instrument +compartment +responsibility +resist +withdraw \ No newline at end of file diff --git a/00_Alternate_Languages/44_Hangman/C/main.c b/00_Alternate_Languages/44_Hangman/C/main.c new file mode 100644 index 00000000..5ad8e43d --- /dev/null +++ b/00_Alternate_Languages/44_Hangman/C/main.c @@ -0,0 +1,137 @@ +#include +#include +#include +#include +#define MAX_WORDS 100 + +//check if windows or linux for the clear screen +#ifdef _WIN32 +#define CLEAR "cls" +#else +#define CLEAR "clear" +#endif + +/** + * @brief Prints the stage of the hangman based on the number of wrong guesses. + * + * @param stage Hangman stage. + */ +void print_hangman(int stage){ + switch (stage){ + case 0: + printf("----------\n"); + printf("| |\n"); + printf("|\n"); + printf("|\n"); + printf("|\n"); + printf("|\n"); + break; + case 1: + printf("----------\n"); + printf("| |\n"); + printf("| O\n"); + printf("| |\n"); + printf("|\n"); + printf("|\n"); + break; + case 2: + printf("----------\n"); + printf("| |\n"); + printf("| o\n"); + printf("| /|\n"); + printf("|\n"); + printf("|\n"); + break; + case 3: + printf("----------\n"); + printf("| |\n"); + printf("| o\n"); + printf("| /|\\\n"); + printf("|\n"); + printf("|\n"); + break; + case 4: + printf("----------\n"); + printf("| |\n"); + printf("| o\n"); + printf("| /|\\\n"); + printf("| /\n"); + printf("|\n"); + break; + case 5: + printf("----------\n"); + printf("| |\n"); + printf("| o\n"); + printf("| /|\\\n"); + printf("| / \\\n"); + printf("|\n"); + break; + default: + break; + } +} + +/** + * @brief Picks and return a random word from the dictionary. + * + * @return Random word + */ +char* random_word_picker(){ + //generate a random english word + char* word = malloc(sizeof(char) * 100); + FILE* fp = fopen("dictionary.txt", "r"); + srand(time(NULL)); + if (fp == NULL){ + printf("Error opening dictionary.txt\n"); + exit(1); + } + int random_number = rand() % MAX_WORDS; + for (int j = 0; j < random_number; j++){ + fscanf(fp, "%s", word); + } + fclose(fp); + return word; +} + + + + +void main(void){ + char* word = malloc(sizeof(char) * 100); + word = random_word_picker(); + char* hidden_word = malloc(sizeof(char) * 100); + for (int i = 0; i < strlen(word); i++){ + hidden_word[i] = '_'; + } + hidden_word[strlen(word)] = '\0'; + int stage = 0; + int wrong_guesses = 0; + int correct_guesses = 0; + char* guess = malloc(sizeof(char) * 100); + while (wrong_guesses < 6 && correct_guesses < strlen(word)){ + CLEAR; + print_hangman(stage); + printf("%s\n", hidden_word); + printf("Enter a guess: "); + scanf("%s", guess); + for (int i = 0; i < strlen(word); i++){ + if (strcmp(guess,word) == 0){ + correct_guesses = strlen(word); + } + else if (guess[0] == word[i]){ + hidden_word[i] = guess[0]; + correct_guesses++; + } + } + if (strchr(word, guess[0]) == NULL){ + wrong_guesses++; + } + stage = wrong_guesses; + } + if (wrong_guesses == 6){ + printf("You lose! The word was %s\n", word); + } + else { + printf("You win!\n"); + } +} \ No newline at end of file