|
|
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
void protokoll(); void clear_screen(); void willkommen(); int namePruefen(); void nameWaehlen(); void startauswahl(); void nameAusgeben(); void levelauswahl(); void hauptSpiel(int level); void zeichne_galgen(int versuche); 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]); int has_won(char secret_word[100], char guessed_letters[100]); void level_plus(); int overlay();
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"}; overlay(); 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(); //
overlay(); 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(); //
overlay(); 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(); //
overlay(); 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(level); fclose(fp); }
void hauptSpiel(int level){ char secret_word[100]; int versuche = 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); while (versuche < 6 && won == 0) { zeichne_galgen(versuche); show_letters(secret_word, guessed_letters); guessed_letter = eingabe_buchstabe(); result = letter_in_secret_word(guessed_letter, secret_word); if (result == 0){ add_guessed_letter(guessed_letters, guessed_letter); } else { versuche++; } won = has_won(secret_word, guessed_letters); } if (won == 1){ level_plus(); } }
void zeichne_galgen(int versuche) { clear_screen(); printf("Galgenmann!\n"); printf("v.1.0.2\n\n");
switch(versuche) { 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; }
int has_won(char secret_word[100], char guessed_letters[100]){ int occured; for (int i = 0; i < strlen(secret_word); i++){ occured = 0; for (int k = 0; k < strlen(guessed_letters); k++){ if (secret_word[i] == guessed_letters[k]){ occured = 1; } } if (occured == 0){ return 0; } } return 1; }
void level_plus(){ char KonfDatei[100]; char levelstr[3]; int i = 0; 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'; if (levelstr[1] == '9'){ KonfDatei[i-2]++; KonfDatei[i-1] = '0'; } else { KonfDatei[i-1]++; } fclose(fp); fp = fopen("hangman.txt", "w"); fprintf(fp, "%s", KonfDatei); fclose(fp); }
int overlay(){ char hangmanArt[10][41] = { " _______ ", " | | ", " | ", " | ", " | ", " | ", "__|_________\n" }; printf("Galgenmann!\n"); printf("v.1.0.2\n\n");
for (int i = 0; i < 9; i++) { printf("%s\n", hangmanArt[i]); } return 0; }
|