fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6. struct Settings { // Struct for settings
  7. int maxAttempts;
  8. int Hint;
  9. int attemptsLevel;
  10. };
  11. int mainMenu() { // Main menu function
  12. int setting_num;
  13. char option_confirmation;
  14. Start: // Label for goto statement
  15. printf("\e[1;1H\e[2J"); // Clear screen
  16. printf(" HANGMAN \n");
  17. printf("**********************************************\n");
  18. printf("* *\n");
  19. printf("* Menu *\n");
  20. printf("* *\n");
  21. printf("* 1. Player VS. Player *\n");
  22. printf("* 2. Player VS. Computer *\n");
  23. printf("* 3. Settings *\n");
  24. printf("* 4. Exit *\n");
  25. printf("* *\n");
  26. printf("* *\n");
  27. printf("**********************************************\n");
  28. printf("\n");
  29. printf("Choose your option: ");
  30. scanf("%d", &setting_num);
  31. if (setting_num < 1 || setting_num > 4) {
  32. printf("ERROR: option not available\n");
  33. printf("Choose another option: ");
  34. scanf("%d", &setting_num);
  35. }
  36. printf("Are you choosing option %d? y/n: ", setting_num);
  37. scanf(" %c", &option_confirmation);
  38. if (option_confirmation != 'y') {
  39. goto Start;
  40. }
  41. printf("\e[1;1H\e[2J"); //Clear screen
  42. return setting_num; // Setting number is returned to main
  43. }
  44. void pvpStringGrab(char phrase[100]) { // Function to grab a word/phrase from another player
  45. char trash[100];
  46. fgets(trash, 100, stdin); //Clear stdin
  47. char confirmPhrase='n';
  48. while (confirmPhrase!='y') {
  49. int validPhrase = 1;
  50. printf("Player 2, please enter a word/phrase: ");
  51. fgets(phrase, 100, stdin);
  52. phrase[strlen(phrase)-1] = '\0'; //Remove newline character from fgets
  53. for (int i = 0; i < strlen(phrase); i++) {
  54. phrase[i] = toupper(phrase[i]);
  55. }
  56. for (int i = 0; i < strlen(phrase); i++) {
  57. if ((!((phrase[i]>=65 && phrase[i]<=90) || phrase[i]==32)) || (phrase[i]==32 && phrase[i+1]==32)) { //Check if character is not a letter or space, or if there are multiple spaces in a row
  58. validPhrase = 0;
  59. }
  60. }
  61. if (validPhrase==0 || strlen(phrase)==0 || phrase[0]==32 || phrase[strlen(phrase)-1]==32) { //Check if input is invalid by validPhrase, empty, or starts/ends with a space
  62. printf("Invalid/Empty input. Please enter a word/phrase with only letters and only 1 space between words.\n");
  63. } else {
  64. printf("\e[1;1H\e[2J"); //Clear screen
  65. printf("You entered: %s. Is that correct? (y/n): ", phrase);
  66. scanf("%c", &confirmPhrase);
  67. while(getchar()!='\n'); //Prevent newline from being read as next input
  68. }
  69. }
  70. }
  71. void fileStringGrab(char phrase[100]) { // Function to grab a word/phrase from a file
  72. srand(time(NULL)); //The seed for the random number generator because rand() is not random
  73. FILE *categoryFilePointer; //for not having chances of messing up the code categoryFilePointer is used for the words.txt file
  74. categoryFilePointer = fopen("words.txt", "r");
  75. if (categoryFilePointer == NULL) {
  76. printf("File does not exist, make sure all files are placed in the root directory.\n");
  77. exit(1);
  78. }
  79. int categoryCount = 0;
  80. char counterChar[100];
  81. while (fgets(counterChar, 100, categoryFilePointer) != NULL) {
  82. categoryCount++;
  83. }
  84. fclose(categoryFilePointer);
  85. categoryFilePointer = fopen("words.txt", "r");
  86. int randomLine = (rand() % (categoryCount+1));
  87. for (int i = 0; i < randomLine; i++) {
  88. fgets(counterChar, 100, categoryFilePointer);
  89. }
  90. if (counterChar[strlen(counterChar)-1] == '\n') { //Ensure no newline characters
  91. counterChar[strlen(counterChar)-1] = '\0';
  92. }
  93. strcpy(phrase, counterChar); //Copy the word/phrase from the file to the phrase variable
  94. for (int i = 0; i < strlen(phrase); i++) {
  95. phrase[i] = toupper(phrase[i]);
  96. }
  97. fclose(categoryFilePointer);
  98. char trash[100];
  99. fgets(trash, 100, stdin); //Clear stdin
  100. }
  101. void printHangman(int attempts, int maxAttempts) { // Function to print
  102. int result=0;
  103. if (maxAttempts == 8) {
  104. result=(attempts);
  105. } else if (maxAttempts == 6) {
  106. if (attempts == 0) {
  107. result=1;
  108. } else if (attempts == 1) {
  109. result=2;
  110. } else {
  111. result=(attempts+2);
  112. }
  113. } else if (maxAttempts == 4) {
  114. result=(attempts*2);
  115. }
  116. switch (result) {
  117. case 0:
  118. printf("* --- *\n");
  119. printf("* | *\n");
  120. printf("* | *\n");
  121. printf("* | *\n");
  122. printf("* ------ *\n");
  123. break;
  124. case 1:
  125. printf("* ---| | *\n");
  126. printf("* | *\n");
  127. printf("* | *\n");
  128. printf("* | *\n");
  129. printf("* ------ *\n");
  130. break;
  131. case 2:
  132. printf("* ---|-| *\n");
  133. printf("* | *\n");
  134. printf("* | *\n");
  135. printf("* | *\n");
  136. printf("* ------ *\n");
  137. break;
  138. case 3:
  139. printf("* ---|-| *\n");
  140. printf("* | O *\n");
  141. printf("* | *\n");
  142. printf("* | *\n");
  143. printf("* ------ *\n");
  144. break;
  145. case 4:
  146. printf("* ---|-| *\n");
  147. printf("* | O *\n");
  148. printf("* | / *\n");
  149. printf("* | *\n");
  150. printf("* ------ *\n");
  151. break;
  152. case 5:
  153. printf("* ---|-| *\n");
  154. printf("* | O *\n");
  155. printf("* | /| *\n");
  156. printf("* | *\n");
  157. printf("* ------ *\n");
  158. break;
  159. case 6:
  160. printf("* ---|-| *\n");
  161. printf("* | O *\n");
  162. printf("* | /|\\ *\n");
  163. printf("* | *\n");
  164. printf("* ------ *\n");
  165. break;
  166. case 7:
  167. printf("* ---|-| *\n");
  168. printf("* | O *\n");
  169. printf("* | /|\\ *\n");
  170. printf("* | / *\n");
  171. printf("* ------ *\n");
  172. break;
  173. case 8:
  174. printf("* ---|-| *\n");
  175. printf("* | O *\n");
  176. printf("* | /|\\ *\n");
  177. printf("* | / \\ *\n");
  178. printf("* ------ *\n");
  179. break;
  180. }
  181. }
  182. int mainGame(char word[100], int maxAttempts, int hint) {
  183. char guessedLetters[50]; //created an array to store already guessed letters
  184. char letterBank[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //Letter bank displayed to user
  185. char input[100]; //variable to store user input
  186. int attempts = 0; //variable to keep track of number of attempts
  187. int errorMsg = 0; //variable to store error message
  188. for (int i = 0; i < strlen(word); i++) {
  189. if (word[i] == ' ') {
  190. guessedLetters[i] = ' ';
  191. } else {
  192. guessedLetters[i] = '_';
  193. }
  194. }
  195. guessedLetters[strlen(word)] = '\0';
  196. int alreadyGuessed = 0;
  197. int usedHint = 0;
  198. while (strcmp(word, guessedLetters) != 0 && attempts < maxAttempts) {
  199. printf("\e[1;1H\e[2J"); //Clear screen
  200. printf(" HANGMAN \n");
  201. printf("**********************************************\n");
  202. if (hint){
  203. if (attempts == 3 && usedHint == 0){
  204. char hintLetter = word[rand()%strlen(word)];
  205. while (strchr(guessedLetters, hintLetter) != NULL){ //ensure no already guessed letters are given as hint
  206. hintLetter = word[rand()%strlen(word)];
  207. }
  208. printf("* Free letter: %c *\n", hintLetter);
  209. usedHint = 1;
  210. } else {
  211. printf("* *\n");
  212. }
  213. } else {
  214. printf("* *\n");
  215. }
  216. if (alreadyGuessed == 1) {
  217. printf("* You already guessed that letter. Try again *\n");
  218. alreadyGuessed = 0;
  219. } else {
  220. printf("* *\n");
  221. }
  222. printHangman(attempts, maxAttempts);
  223. printf("* %s *\n", letterBank);
  224. printf("* Word: %-36s *\n", guessedLetters);
  225. printf("* *\n");
  226. printf("**********************************************\n");
  227. printf("Please enter a letter/phrase: ");
  228. fgets(input, 100, stdin);
  229. input[strlen(input)-1] = '\0'; //Remove newline character from fgets
  230. for (int i = 0; i < strlen(input); i++) {
  231. input[i] = toupper(input[i]);
  232. }
  233. printf("%s", input); //Clear screen
  234. if (strlen(input) > 1) {
  235. if (strcmp(word, input) == 0) {
  236. strcpy(guessedLetters, word);
  237. return 1;
  238. } else {
  239. attempts++;
  240. }
  241. } else {
  242. char letter = input[0];
  243. if (strchr(letterBank, letter) == NULL) { //ran loop to ensure that the input letter user put is not repeated
  244. alreadyGuessed = 1;
  245. } else {
  246. int correctGuess = 0; //variable to store number of correct guesses
  247. for (int i = 0; i < strlen(word); i++) {
  248. if (word[i] == letter) {
  249. guessedLetters[i] = letter;
  250. correctGuess = 1; //if guess is correct, the variable correctGuess is incremented by 1
  251. }
  252. }
  253. letterBank[letter-65] = ' '; //removes the letter from the letter bank
  254. if (!correctGuess) {
  255. attempts++; //else the variable attempts is incremented by 1
  256. }
  257. }
  258. }
  259. }
  260. printf("\n");
  261. if (attempts < maxAttempts) {
  262. return 1;
  263. } else {
  264. return 0;
  265. }
  266. }
  267. void printResult(int result, char word[100]) {
  268. printf("\e[1;1H\e[2J"); //Clear screen
  269. printf(" HANGMAN \n");
  270. printf("**********************************************\n");
  271. printf("* *\n");
  272. if (result) {
  273. printf("* You Win! You guessed the word/phrase! *\n");
  274. printHangman(0,8);
  275. } else {
  276. printf("* You lose! You ran out of attempts. *\n");
  277. printHangman(8, 8);
  278. }
  279. printf("* The word/phrase was *\n");
  280. printf("* Word: %-36s *\n", word);
  281. printf("* *\n");
  282. printf("**********************************************\n");
  283. int choice;
  284. printf("Enter 1 to exit (any other number to continue): ");
  285. scanf("%d", &choice);
  286. if (choice == 1) {
  287. exit(0);
  288. }
  289. }
  290. void settingsMenu(struct Settings *settings) {
  291. int setting_num;
  292. char option_confirmation;
  293. Start: // Label for goto statement
  294. printf("\e[1;1H\e[2J"); // Clear screen
  295. printf(" HANGMAN \n");
  296. printf("**********************************************\n");
  297. printf("* *\n");
  298. printf("* Settings *\n");
  299. printf("* *\n");
  300. printf("* 1. Attempt Difficulty: %d *\n", settings->attemptsLevel);
  301. printf("* 2. Hint Enabled: %d *\n", settings->Hint);
  302. printf("* 3. Back *\n");
  303. printf("* *\n");
  304. printf("* *\n");
  305. printf("* *\n");
  306. printf("**********************************************\n");
  307. printf("\n");
  308. printf("Choose your option: ");
  309. scanf("%d", &setting_num);
  310. if (setting_num < 1 || setting_num > 4) {
  311. printf("ERROR: option not available\n");
  312. printf("Choose another option: ");
  313. scanf("%d", &setting_num);
  314. }
  315. printf("Are you choosing option %d? y/n: ", setting_num);
  316. scanf(" %c", &option_confirmation);
  317. if (option_confirmation != 'y') {
  318. goto Start;
  319. }
  320. switch (setting_num)
  321. {
  322. case 1:
  323. int attemptsLevel;
  324. printf("Enter the difficulty level (1-3, Low/Medium/High): ");
  325. scanf("%d", &attemptsLevel);
  326. while (attemptsLevel < 1 || attemptsLevel > 3) {
  327. printf("ERROR: option not available\n");
  328. printf("Choose another option: ");
  329. scanf("%d", &attemptsLevel);
  330. }
  331. if (attemptsLevel == 1) {
  332. settings->maxAttempts = 8;
  333. } else if (attemptsLevel == 2) {
  334. settings->maxAttempts = 6;
  335. } else if (attemptsLevel == 3) {
  336. settings->maxAttempts = 4;
  337. }
  338. settings->attemptsLevel = attemptsLevel;
  339. break;
  340. case 2:
  341. int hint;
  342. printf("Enable hint? (1 for yes, 0 for no): ");
  343. scanf("%d", &hint);
  344. while (hint < 0 || hint > 1) {
  345. printf("ERROR: option not available\n");
  346. printf("Choose another option: ");
  347. scanf("%d", &hint);
  348. }
  349. settings->Hint = hint;
  350. break;
  351. default:
  352. break;
  353. }
  354. printf("%d %d %d", settings->maxAttempts, settings->Hint, settings->attemptsLevel);
  355. }
  356. int main() {
  357. srand(time(NULL)); //The seed for the random number generator because rand() is not random
  358. struct Settings settings = {6, 1, 2}; // Default settings
  359. while (1) {
  360. int setting_num = mainMenu();
  361. char stringToGuess[100];
  362. char trash[100];
  363. int result;
  364. switch (setting_num) {
  365. case 1:
  366. pvpStringGrab(stringToGuess);
  367. result = mainGame(stringToGuess, settings.maxAttempts, settings.Hint);
  368. printResult(result, stringToGuess);
  369. break;
  370. case 2:
  371. fileStringGrab(stringToGuess);
  372. result = mainGame(stringToGuess, settings.maxAttempts, settings.Hint);
  373. printResult(result, stringToGuess);
  374. break;
  375. case 3:
  376. settingsMenu(&settings);
  377. break;
  378. case 4:
  379. exit(0);
  380. return 0;
  381. default:
  382. exit(0);
  383. break;
  384. }
  385. }
  386. return 0;
  387. }
Success #stdin #stdout 0.03s 25888KB
stdin
Standard input is empty
stdout
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <time.h>
struct Settings { // Struct for settings
    int maxAttempts;
    int Hint;
    int attemptsLevel;
};
int mainMenu() { // Main menu function
    int setting_num;
    char option_confirmation;
Start: // Label for goto statement
    printf("\e[1;1H\e[2J"); // Clear screen
    printf("                    HANGMAN                   \n");
    printf("**********************************************\n");
    printf("*                                            *\n");
    printf("*                    Menu                    *\n");
    printf("*                                            *\n");
    printf("*           1. Player VS. Player             *\n");
    printf("*           2. Player VS. Computer           *\n");
    printf("*           3. Settings                      *\n");
    printf("*           4. Exit                          *\n");
    printf("*                                            *\n");
    printf("*                                            *\n");
    printf("**********************************************\n");
    printf("\n");
    printf("Choose your option: ");
    scanf("%d", &setting_num);
    if (setting_num < 1 || setting_num > 4) {
        printf("ERROR: option not available\n");
        printf("Choose another option: ");
        scanf("%d", &setting_num);
    }
    printf("Are you choosing option %d? y/n: ", setting_num);
    scanf(" %c", &option_confirmation);
    if (option_confirmation != 'y') {
        goto Start;
    }
    printf("\e[1;1H\e[2J"); //Clear screen
    return setting_num; // Setting number is returned to main
}
void pvpStringGrab(char phrase[100]) { // Function to grab a word/phrase from another player
    char trash[100];
    fgets(trash, 100, stdin); //Clear stdin
    char confirmPhrase='n';
    while (confirmPhrase!='y') {
        int validPhrase = 1;
        printf("Player 2, please enter a word/phrase: ");
        fgets(phrase, 100, stdin);
        phrase[strlen(phrase)-1] = '\0'; //Remove newline character from fgets
        for (int i = 0; i < strlen(phrase); i++) {
            phrase[i] = toupper(phrase[i]);
        }
        for (int i = 0; i < strlen(phrase); i++) {
            if ((!((phrase[i]>=65 && phrase[i]<=90) || phrase[i]==32)) || (phrase[i]==32 && phrase[i+1]==32)) { //Check if character is not a letter or space, or if there are multiple spaces in a row
                validPhrase = 0;
            }
        }
        if (validPhrase==0 || strlen(phrase)==0 || phrase[0]==32 || phrase[strlen(phrase)-1]==32) { //Check if input is invalid by validPhrase, empty, or starts/ends with a space
            printf("Invalid/Empty input. Please enter a word/phrase with only letters and only 1 space between words.\n");
        } else {
            printf("\e[1;1H\e[2J"); //Clear screen
            printf("You entered: %s. Is that correct? (y/n): ", phrase);
            scanf("%c", &confirmPhrase);
            while(getchar()!='\n'); //Prevent newline from being read as next input
        }
    }
}
void fileStringGrab(char phrase[100]) { // Function to grab a word/phrase from a file
    srand(time(NULL)); //The seed for the random number generator because rand() is not random
    FILE *categoryFilePointer; //for not having chances of messing up the code categoryFilePointer is used for the words.txt file
    categoryFilePointer = fopen("words.txt", "r");
    if (categoryFilePointer == NULL) {
        printf("File does not exist, make sure all files are placed in the root directory.\n");
        exit(1);
    }
    int categoryCount = 0;
    char counterChar[100];
    while (fgets(counterChar, 100, categoryFilePointer) != NULL) {
        categoryCount++;
    }
    fclose(categoryFilePointer);
    categoryFilePointer = fopen("words.txt", "r");
    int randomLine = (rand() % (categoryCount+1));
    for (int i = 0; i < randomLine; i++) {
        fgets(counterChar, 100, categoryFilePointer);
    }
    if (counterChar[strlen(counterChar)-1] == '\n') { //Ensure no newline characters
        counterChar[strlen(counterChar)-1] = '\0';
    }
    strcpy(phrase, counterChar); //Copy the word/phrase from the file to the phrase variable
    for (int i = 0; i < strlen(phrase); i++) {
        phrase[i] = toupper(phrase[i]);
    }
    fclose(categoryFilePointer);
    char trash[100];
    fgets(trash, 100, stdin); //Clear stdin
}
void printHangman(int attempts, int maxAttempts) { // Function to print
    int result=0;
    if (maxAttempts == 8) {
        result=(attempts);
    } else if (maxAttempts == 6) {
        if (attempts == 0) {
            result=1;
        } else if (attempts == 1) {
            result=2;
        } else {
            result=(attempts+2);
        } 
    } else if (maxAttempts == 4) {
        result=(attempts*2);
    }
    switch (result) {
        case 0:
            printf("*                   ---                      *\n");
            printf("*                   |                        *\n");
            printf("*                   |                        *\n");
            printf("*                   |                        *\n");
            printf("*                   ------                   *\n");
            break;
        case 1:
            printf("*                   ---| |                   *\n");
            printf("*                   |                        *\n");
            printf("*                   |                        *\n");
            printf("*                   |                        *\n");
            printf("*                   ------                   *\n");
            break;
        case 2:
            printf("*                   ---|-|                   *\n");
            printf("*                   |                        *\n");
            printf("*                   |                        *\n");
            printf("*                   |                        *\n");
            printf("*                   ------                   *\n");
            break;
        case 3:
            printf("*                   ---|-|                   *\n");
            printf("*                   |   O                    *\n");
            printf("*                   |                        *\n");
            printf("*                   |                        *\n");
            printf("*                   ------                   *\n");
            break;
        case 4:
            printf("*                   ---|-|                   *\n");
            printf("*                   |   O                    *\n");
            printf("*                   |  /                     *\n");
            printf("*                   |                        *\n");
            printf("*                   ------                   *\n");
            break;
        case 5:
            printf("*                   ---|-|                   *\n");
            printf("*                   |   O                    *\n");
            printf("*                   |  /|                    *\n");
            printf("*                   |                        *\n");
            printf("*                   ------                   *\n");
            break;
        case 6:
            printf("*                   ---|-|                   *\n");
            printf("*                   |   O                    *\n");
            printf("*                   |  /|\\                   *\n");
            printf("*                   |                        *\n");
            printf("*                   ------                   *\n");
            break;
        case 7:
            printf("*                   ---|-|                   *\n");
            printf("*                   |   O                    *\n");
            printf("*                   |  /|\\                   *\n");
            printf("*                   |  /                     *\n");
            printf("*                   ------                   *\n");
            break;
        case 8:
            printf("*                   ---|-|                   *\n");
            printf("*                   |   O                    *\n");
            printf("*                   |  /|\\                   *\n");
            printf("*                   |  / \\                   *\n");
            printf("*                   ------                   *\n");
            break;
    }
}
int mainGame(char word[100], int maxAttempts, int hint) {
    char guessedLetters[50]; //created an array to store already guessed letters
    char letterBank[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //Letter bank displayed to user
    char input[100]; //variable to store user input
    int attempts = 0; //variable to keep track of number of attempts
    int errorMsg = 0; //variable to store error message
    for (int i = 0; i < strlen(word); i++) {
        if (word[i] == ' ') {
            guessedLetters[i] = ' ';
        } else {
            guessedLetters[i] = '_';
        }
    }
    guessedLetters[strlen(word)] = '\0';
    int alreadyGuessed = 0;
    int usedHint = 0;
    while (strcmp(word, guessedLetters) != 0 && attempts < maxAttempts) {
        printf("\e[1;1H\e[2J"); //Clear screen
        printf("                    HANGMAN                   \n");
        printf("**********************************************\n");
        if (hint){
            if (attempts == 3 && usedHint == 0){
                char hintLetter = word[rand()%strlen(word)];
                while (strchr(guessedLetters, hintLetter) != NULL){ //ensure no already guessed letters are given as hint
                    hintLetter = word[rand()%strlen(word)];
                }
                printf("*               Free letter: %c               *\n", hintLetter);
                usedHint = 1;
            } else {
                printf("*                                            *\n");
            }
        } else {
            printf("*                                            *\n");
        }
        if (alreadyGuessed == 1) {
            printf("* You already guessed that letter. Try again *\n");
            alreadyGuessed = 0;
        } else {
            printf("*                                            *\n");
        }
        printHangman(attempts, maxAttempts);
        printf("*         %s         *\n", letterBank);
        printf("* Word: %-36s *\n", guessedLetters);
        printf("*                                            *\n");
        printf("**********************************************\n");
        printf("Please enter a letter/phrase: ");
        fgets(input, 100, stdin);
        input[strlen(input)-1] = '\0'; //Remove newline character from fgets
        for (int i = 0; i < strlen(input); i++) {
            input[i] = toupper(input[i]);
        }
        printf("%s", input); //Clear screen
        if (strlen(input) > 1) {
            if (strcmp(word, input) == 0) {
                strcpy(guessedLetters, word);
                return 1;
            } else {
                attempts++;
            }
        } else {
            char letter = input[0];
            if (strchr(letterBank, letter) == NULL) {    //ran loop to ensure that the input letter user put is not repeated
                alreadyGuessed = 1;
            } else {
                int correctGuess = 0;  //variable to store number of correct guesses 
                for (int i = 0; i < strlen(word); i++) {
                    if (word[i] == letter) {
                        guessedLetters[i] = letter;
                        correctGuess = 1; //if guess is correct, the variable correctGuess is incremented by 1
                    }
                }
                letterBank[letter-65] = ' '; //removes the letter from the letter bank
                if (!correctGuess) {
                    attempts++; //else the variable attempts is incremented by 1
                }
            }
        }
    }
    printf("\n");
    if (attempts < maxAttempts) {
        return 1;
    } else {
        return 0;
    }
}
void printResult(int result, char word[100]) {
    printf("\e[1;1H\e[2J"); //Clear screen
    printf("                    HANGMAN                   \n");
    printf("**********************************************\n");
    printf("*                                            *\n");
    if (result) {
        printf("*    You Win! You guessed the word/phrase!   *\n");
        printHangman(0,8);
    } else {
        printf("*     You lose! You ran out of attempts.     *\n");
        printHangman(8, 8);
    }
    printf("*             The word/phrase was            *\n");
    printf("* Word: %-36s *\n", word);
    printf("*                                            *\n");
    printf("**********************************************\n");
    int choice;
    printf("Enter 1 to exit (any other number to continue): ");
    scanf("%d", &choice);
    if (choice == 1) {
        exit(0);
    }
}
void settingsMenu(struct Settings *settings) {
    int setting_num;
    char option_confirmation;
Start: // Label for goto statement
    printf("\e[1;1H\e[2J"); // Clear screen
    printf("                    HANGMAN                   \n");
    printf("**********************************************\n");
    printf("*                                            *\n");
    printf("*                   Settings                 *\n");
    printf("*                                            *\n");
    printf("*           1. Attempt Difficulty: %d         *\n", settings->attemptsLevel);
    printf("*           2. Hint Enabled: %d               *\n", settings->Hint);
    printf("*           3. Back                          *\n");
    printf("*                                            *\n");
    printf("*                                            *\n");
    printf("*                                            *\n");
    printf("**********************************************\n");
    printf("\n");
    printf("Choose your option: ");
    scanf("%d", &setting_num);
    if (setting_num < 1 || setting_num > 4) {
        printf("ERROR: option not available\n");
        printf("Choose another option: ");
        scanf("%d", &setting_num);
    }
    printf("Are you choosing option %d? y/n: ", setting_num);
    scanf(" %c", &option_confirmation);
    if (option_confirmation != 'y') {
        goto Start;
    }
    switch (setting_num)
    {
    case 1:
        int attemptsLevel;
        printf("Enter the difficulty level (1-3, Low/Medium/High): ");
        scanf("%d", &attemptsLevel);
        while (attemptsLevel < 1 || attemptsLevel > 3) {
            printf("ERROR: option not available\n");
            printf("Choose another option: ");
            scanf("%d", &attemptsLevel);
        }
        if (attemptsLevel == 1) {
            settings->maxAttempts = 8;
        } else if (attemptsLevel == 2) {
            settings->maxAttempts = 6;
        } else if (attemptsLevel == 3) {
            settings->maxAttempts = 4;
        }
        settings->attemptsLevel = attemptsLevel;
        break;
    case 2:
        int hint;
        printf("Enable hint? (1 for yes, 0 for no): ");
        scanf("%d", &hint);
        while (hint < 0 || hint > 1) {
            printf("ERROR: option not available\n");
            printf("Choose another option: ");
            scanf("%d", &hint);
        }
        settings->Hint = hint;
        break;
    default:
        break;
    }
    printf("%d %d %d", settings->maxAttempts, settings->Hint, settings->attemptsLevel);
}
int main() {
    srand(time(NULL)); //The seed for the random number generator because rand() is not random
    struct Settings settings = {6, 1, 2}; // Default settings
    while (1) {
        int setting_num = mainMenu();
        char stringToGuess[100];
        char trash[100];
        int result;
        switch (setting_num) {
        case 1:
            pvpStringGrab(stringToGuess);
            result = mainGame(stringToGuess, settings.maxAttempts, settings.Hint);
            printResult(result, stringToGuess);
            break;
        case 2:
            fileStringGrab(stringToGuess);
            result = mainGame(stringToGuess, settings.maxAttempts, settings.Hint);
            printResult(result, stringToGuess);
            break;
        case 3:
            settingsMenu(&settings);
            break;
        case 4:
            exit(0);
            return 0;
        default:
            exit(0);
            break;
        }
    }
    return 0;
}