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.

317 lines
7.0 KiB

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5. #include <unistd.h>
  6. void protokoll();
  7. void clear_screen();
  8. void willkommen();
  9. int namePruefen();
  10. void nameWaehlen();
  11. void startauswahl();
  12. void nameAusgeben();
  13. void levelauswahl();
  14. void hauptSpiel(int level);
  15. void draw_hangman(int attempts);
  16. void add_guessed_letter(char* guessed_letters, char guessed_letter);
  17. char eingabe_buchstabe();
  18. void lade_secret_word(char* secret_word, int level, char* path);
  19. void show_letters(char secret_word[100], char guessed_letters[100]);
  20. int letter_in_secret_word(char guessed_letter, char secret_word[100]);
  21. void protokoll(){
  22. clear_screen();
  23. willkommen();
  24. namePruefen();
  25. startauswahl();
  26. }
  27. void clear_screen() {
  28. system("clear");
  29. // system("cls"); // fuer Windows
  30. // system("clear"); // fuer UNIX/Linux
  31. }
  32. void willkommen(){
  33. char ENTERtxt[] = {"-Druecke ENTER zum starten-\n"};
  34. printf("%s", ENTERtxt);
  35. getchar();
  36. }
  37. int namePruefen() {
  38. char KonfDatei[100];
  39. int laengeKonfDatei = 0;
  40. FILE *fp = NULL;
  41. fp = fopen("hangman.txt", "r");
  42. if (fp == NULL) {
  43. printf("Fehler beim Öffnen der Konfigurationsdatei\n");
  44. return 1;
  45. } else {
  46. fscanf(fp, "%s", KonfDatei); //Inhalt der KonfDatei wird ins Array gelesen
  47. while(KonfDatei[laengeKonfDatei] != 0){ //Laenge der KonfDatei wird ermittelt
  48. laengeKonfDatei++;
  49. }
  50. if(laengeKonfDatei > 14){ //mit der Laenge wird geschaut, ob ein Name gespeichert ist oder nicht
  51. fclose(fp);
  52. return 0;
  53. } else {
  54. printf("Sieht aus, als haettest du noch keinen Namen :(\n");
  55. nameWaehlen();
  56. fclose(fp);
  57. return 0;
  58. }
  59. }
  60. fclose(fp);
  61. }
  62. void nameWaehlen(){
  63. char name[50];
  64. FILE *fp = NULL;
  65. fp = fopen("hangman.txt", "w");
  66. clear_screen(); //
  67. printf("Geben Sie den Namen ein: ");
  68. scanf("%s", name);
  69. char KonfDatei[100];
  70. snprintf(KonfDatei, sizeof(KonfDatei), "name:%s,level:01", name);
  71. fprintf(fp, "%s", KonfDatei);
  72. fclose(fp);
  73. }
  74. void startauswahl() {
  75. int auswahl;
  76. int modus;
  77. clear_screen(); //
  78. printf("Willkommen ");
  79. nameAusgeben();
  80. printf("[1] Spielen\n[2] Namen aendern\n");
  81. scanf("%d", &auswahl);
  82. if(auswahl == 1){
  83. levelauswahl();
  84. } else if (auswahl == 2){
  85. nameWaehlen();
  86. } else {
  87. printf("Eingabe ungueltig");
  88. }
  89. }
  90. void nameAusgeben(){
  91. char KonfDatei[100];
  92. char name[50];
  93. int i = 5;
  94. int zaehler = 0;
  95. int nullt;
  96. FILE *fp = NULL;
  97. fp = fopen("hangman.txt", "r");
  98. fscanf(fp, "%s", KonfDatei);
  99. while(KonfDatei[i] != ','){
  100. zaehler++;
  101. i++;
  102. }
  103. nullt = zaehler;
  104. while(zaehler != 0){
  105. name[--zaehler] = KonfDatei[--i];
  106. }
  107. i = 0;
  108. while(name[i] != 0){
  109. i++;
  110. }
  111. name[nullt] = '\0';
  112. printf("%s\n", name);
  113. fclose(fp);
  114. }
  115. void levelauswahl(){
  116. char levelstr[3];
  117. char KonfDatei[100];
  118. int level;
  119. int i = 0;
  120. clear_screen(); //
  121. FILE *fp = NULL;
  122. fp = fopen("hangman.txt", "r");
  123. fscanf(fp, "%s", KonfDatei);
  124. while(KonfDatei[i] != 0){
  125. i++;
  126. }
  127. levelstr[0] = KonfDatei[i-2];
  128. levelstr[1] = KonfDatei[i-1];
  129. levelstr[2] = '\0';
  130. level = atoi(levelstr);
  131. //hauptspiel mit dem Level starten
  132. fclose(fp);
  133. }
  134. void hauptSpiel(int level){
  135. char secret_word[100];
  136. int attempts = 0;
  137. char guessed_letter;
  138. char guessed_letters[100];
  139. char path[] = "hangman_words.txt";
  140. int result;
  141. int won = 0;
  142. lade_secret_word(secret_word, level, path);
  143. //hangman soll gemalt werden
  144. //Buchstaben sollen gezeigt werden
  145. //Buchstaben sollen eingegeben werden können
  146. //eingegeben Buchstaben sollen überprüft und dem Lösungswort hinzugefügt werden, damit Gewinn ermittelt werden kann
  147. }
  148. void draw_hangman(int attempts) {
  149. clear_screen();
  150. printf("Galgenmann!\n");
  151. printf("v.1.0.2\n\n");
  152. switch(attempts) {
  153. case 0:
  154. printf(" _______\n");
  155. printf(" | |\n");
  156. printf(" |\n");
  157. printf(" |\n");
  158. printf(" |\n");
  159. printf(" |\n");
  160. printf("__|_________\n\n\n\n");
  161. break;
  162. case 1:
  163. printf(" _______\n");
  164. printf(" | |\n");
  165. printf(" | O\n");
  166. printf(" |\n");
  167. printf(" |\n");
  168. printf(" |\n");
  169. printf("__|_________\n\n\n\n");
  170. break;
  171. case 2:
  172. printf(" _______\n");
  173. printf(" | |\n");
  174. printf(" | O\n");
  175. printf(" | |\n");
  176. printf(" |\n");
  177. printf(" |\n");
  178. printf("__|_________\n\n\n\n");
  179. break;
  180. case 3:
  181. printf(" _______\n");
  182. printf(" | |\n");
  183. printf(" | O\n");
  184. printf(" | /|\n");
  185. printf(" |\n");
  186. printf(" |\n");
  187. printf("__|_________\n\n\n\n");
  188. break;
  189. case 4:
  190. printf(" _______\n");
  191. printf(" | |\n");
  192. printf(" | O\n");
  193. printf(" | /|\\\n");
  194. printf(" |\n");
  195. printf(" |\n");
  196. printf("__|_________\n\n\n\n");
  197. break;
  198. case 5:
  199. printf(" _______\n");
  200. printf(" | |\n");
  201. printf(" | O\n");
  202. printf(" | /|\\\n");
  203. printf(" | /\n");
  204. printf(" |\n");
  205. printf("__|_________\n\n\n\n");
  206. break;
  207. case 6:
  208. printf(" _______\n");
  209. printf(" | |\n");
  210. printf(" | O\n");
  211. printf(" | /|\\\n");
  212. printf(" | / \\\n");
  213. printf(" |\n");
  214. printf("__|_________\n\n\n\n");
  215. break;
  216. default:
  217. break;
  218. }
  219. }
  220. void add_guessed_letter(char* guessed_letters, char guessed_letter){
  221. for (int i = 0; i < strlen(guessed_letters); i++){
  222. if (guessed_letters[i] == guessed_letter){
  223. return;
  224. }
  225. }
  226. guessed_letters[strlen(guessed_letters)] = guessed_letter;
  227. guessed_letters[strlen(guessed_letters) + 1] = '\0';
  228. }
  229. char eingabe_buchstabe(){
  230. char guess;
  231. scanf(" %c", &guess);
  232. guess = tolower(guess);
  233. return guess;
  234. }
  235. void lade_secret_word(char* secret_word, int level, char* path){
  236. FILE *file = fopen(path, "r");
  237. int count = 0;
  238. if ( file != NULL )
  239. {
  240. char line[100]; /* or other suitable maximum line size */
  241. while (fgets(line, sizeof line, file) != NULL) /* read a line */
  242. {
  243. if (count == level)
  244. {
  245. strcpy(secret_word, line);
  246. secret_word[strlen(secret_word) - 1] = '\0';
  247. return;
  248. }
  249. else
  250. {
  251. count++;
  252. }
  253. }
  254. fclose(file);
  255. }
  256. }
  257. void show_letters(char secret_word[100], char guessed_letters[100]){
  258. printf("Erratene Buchstaben: ");
  259. for(int i = 0; i < strlen(secret_word); i++) {
  260. if(strchr(guessed_letters, secret_word[i])){
  261. printf("%c ", secret_word[i]);
  262. }
  263. else{
  264. printf("_ ");
  265. }
  266. }
  267. printf("\n");
  268. }
  269. int letter_in_secret_word(char guessed_letter, char secret_word[100]){
  270. for(int i = 0; i < strlen(secret_word); i++){
  271. if(guessed_letter == secret_word[i]){
  272. return 0;
  273. }
  274. }
  275. return 1;
  276. }