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