You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

397 lines
8.4 KiB

#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;
}