#include #include #include #include #include void protokoll(); void clear_screen(); void willkommen(); int namePruefen(); void nameWaehlen(); void startauswahl(); void nameAusgeben(); void levelauswahl(); void hauptSpiel(int level); void draw_hangman(int attempts); void add_guessed_letter(char* guessed_letters, char guessed_letter); char eingabe_buchstabe(); void lade_secret_word(char* secret_word, int level, char* path); void show_letters(char secret_word[100], char guessed_letters[100]); int letter_in_secret_word(char guessed_letter, char secret_word[100]); void protokoll(){ clear_screen(); willkommen(); namePruefen(); startauswahl(); } void clear_screen() { system("clear"); // system("cls"); // fuer Windows // system("clear"); // fuer UNIX/Linux } void willkommen(){ char ENTERtxt[] = {"-Druecke ENTER zum starten-\n"}; printf("%s", ENTERtxt); getchar(); } int namePruefen() { char KonfDatei[100]; int laengeKonfDatei = 0; FILE *fp = NULL; fp = fopen("hangman.txt", "r"); if (fp == NULL) { printf("Fehler beim Öffnen der Konfigurationsdatei\n"); return 1; } else { fscanf(fp, "%s", KonfDatei); //Inhalt der KonfDatei wird ins Array gelesen while(KonfDatei[laengeKonfDatei] != 0){ //Laenge der KonfDatei wird ermittelt laengeKonfDatei++; } if(laengeKonfDatei > 14){ //mit der Laenge wird geschaut, ob ein Name gespeichert ist oder nicht fclose(fp); return 0; } else { printf("Sieht aus, als haettest du noch keinen Namen :(\n"); nameWaehlen(); fclose(fp); return 0; } } fclose(fp); } void nameWaehlen(){ char name[50]; FILE *fp = NULL; fp = fopen("hangman.txt", "w"); clear_screen(); // printf("Geben Sie den Namen ein: "); scanf("%s", name); char KonfDatei[100]; snprintf(KonfDatei, sizeof(KonfDatei), "name:%s,level:01", name); fprintf(fp, "%s", KonfDatei); fclose(fp); } void startauswahl() { int auswahl; int modus; clear_screen(); // printf("Willkommen "); nameAusgeben(); printf("[1] Spielen\n[2] Namen aendern\n"); scanf("%d", &auswahl); if(auswahl == 1){ levelauswahl(); } else if (auswahl == 2){ nameWaehlen(); } else { printf("Eingabe ungueltig"); } } void nameAusgeben(){ char KonfDatei[100]; char name[50]; int i = 5; int zaehler = 0; int nullt; FILE *fp = NULL; fp = fopen("hangman.txt", "r"); fscanf(fp, "%s", KonfDatei); while(KonfDatei[i] != ','){ zaehler++; i++; } nullt = zaehler; while(zaehler != 0){ name[--zaehler] = KonfDatei[--i]; } i = 0; while(name[i] != 0){ i++; } name[nullt] = '\0'; printf("%s\n", name); fclose(fp); } void levelauswahl(){ char levelstr[3]; char KonfDatei[100]; int level; int i = 0; clear_screen(); // FILE *fp = NULL; fp = fopen("hangman.txt", "r"); fscanf(fp, "%s", KonfDatei); while(KonfDatei[i] != 0){ i++; } levelstr[0] = KonfDatei[i-2]; levelstr[1] = KonfDatei[i-1]; levelstr[2] = '\0'; level = atoi(levelstr); //hauptspiel mit dem Level starten fclose(fp); } void hauptSpiel(int level){ char secret_word[100]; int attempts = 0; char guessed_letter; char guessed_letters[100]; char path[] = "hangman_words.txt"; int result; int won = 0; lade_secret_word(secret_word, level, path); //hangman soll gemalt werden //Buchstaben sollen gezeigt werden //Buchstaben sollen eingegeben werden können //eingegeben Buchstaben sollen überprüft und dem Lösungswort hinzugefügt werden, damit Gewinn ermittelt werden kann } void draw_hangman(int attempts) { clear_screen(); printf("Galgenmann!\n"); printf("v.1.0.2\n\n"); switch(attempts) { case 0: printf(" _______\n"); printf(" | |\n"); printf(" |\n"); printf(" |\n"); printf(" |\n"); printf(" |\n"); printf("__|_________\n\n\n\n"); break; case 1: printf(" _______\n"); printf(" | |\n"); printf(" | O\n"); printf(" |\n"); printf(" |\n"); printf(" |\n"); printf("__|_________\n\n\n\n"); break; case 2: printf(" _______\n"); printf(" | |\n"); printf(" | O\n"); printf(" | |\n"); printf(" |\n"); printf(" |\n"); printf("__|_________\n\n\n\n"); break; case 3: printf(" _______\n"); printf(" | |\n"); printf(" | O\n"); printf(" | /|\n"); printf(" |\n"); printf(" |\n"); printf("__|_________\n\n\n\n"); break; case 4: printf(" _______\n"); printf(" | |\n"); printf(" | O\n"); printf(" | /|\\\n"); printf(" |\n"); printf(" |\n"); printf("__|_________\n\n\n\n"); break; case 5: printf(" _______\n"); printf(" | |\n"); printf(" | O\n"); printf(" | /|\\\n"); printf(" | /\n"); printf(" |\n"); printf("__|_________\n\n\n\n"); break; case 6: printf(" _______\n"); printf(" | |\n"); printf(" | O\n"); printf(" | /|\\\n"); printf(" | / \\\n"); printf(" |\n"); printf("__|_________\n\n\n\n"); break; default: break; } } void add_guessed_letter(char* guessed_letters, char guessed_letter){ for (int i = 0; i < strlen(guessed_letters); i++){ if (guessed_letters[i] == guessed_letter){ return; } } guessed_letters[strlen(guessed_letters)] = guessed_letter; guessed_letters[strlen(guessed_letters) + 1] = '\0'; } char eingabe_buchstabe(){ char guess; scanf(" %c", &guess); guess = tolower(guess); return guess; } void lade_secret_word(char* secret_word, int level, char* path){ FILE *file = fopen(path, "r"); int count = 0; if ( file != NULL ) { char line[100]; /* or other suitable maximum line size */ while (fgets(line, sizeof line, file) != NULL) /* read a line */ { if (count == level) { strcpy(secret_word, line); secret_word[strlen(secret_word) - 1] = '\0'; return; } else { count++; } } fclose(file); } } void show_letters(char secret_word[100], char guessed_letters[100]){ printf("Erratene Buchstaben: "); for(int i = 0; i < strlen(secret_word); i++) { if(strchr(guessed_letters, secret_word[i])){ printf("%c ", secret_word[i]); } else{ printf("_ "); } } printf("\n"); } int letter_in_secret_word(char guessed_letter, char secret_word[100]){ for(int i = 0; i < strlen(secret_word); i++){ if(guessed_letter == secret_word[i]){ return 0; } } return 1; }