fork download
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <math.h>
  5. #include <time.h>
  6.  
  7. enum {false,true};
  8. typedef int bool;
  9.  
  10. HANDLE hOut;
  11. time_t start,endet;
  12. int width = 55;
  13. int height = 36;
  14. bool ende = false;
  15. int mainLoop = 0;
  16. int cScore = 0, yScore = 0;
  17. int links = 65, rechts = 68, beenden = 81, modifikator = 0, siegPunkte = 5;
  18. char* st1;
  19. char* st2;
  20. char* st3;
  21. char* st4;
  22. char* st5;
  23. char* st6;
  24. char* st7;
  25. char* st8;
  26. char* st9;
  27. char* st10;
  28. char* ausgabe;
  29. char name[40];
  30. char pfad[60] = "C:\\Machbar.txt";
  31. char zwischenPfad[60] = "";
  32. char schwierigkeit[20] = "Machbar";
  33. char schwierigkeit1[20] = "Amateur";
  34. char schwierigkeit2[20] = "Machbar";
  35. char schwierigkeit3[20] = "Veteran";
  36. char schwierigkeit4[20] = "Nervt\224tend";
  37. char spielergebnis[20] = "";
  38. const int delay = 50;
  39. double high[20], dif = 0.0f;
  40. float maxSpeed = 3.2f, compv = 8.0f, speed = 0.0f;
  41.  
  42.  
  43. typedef struct
  44. {
  45. float x, y; // Bewegung
  46. int size;
  47. float ox, oy; // Anfangstellung der Pads
  48. float vx; // KI Steuerung
  49.  
  50.  
  51.  
  52. } spieler;
  53.  
  54. void spieler_(spieler *this,int _x, int _y, int _size)
  55. {
  56. this->x = (float)(_x);
  57. this->y = (float)(_y);
  58. this->size = _size;
  59. this->ox = (float)(_x);
  60. this->oy = (float)(_y);
  61. }
  62.  
  63. // Pads zeichnen
  64. void draw(spieler *this)
  65. {
  66. int i;
  67. COORD p;
  68. p.X = (int)(this->ox) - this->size ;
  69. p.Y = (int)(this->oy);
  70. SetConsoleCursorPosition(hOut, p);
  71.  
  72. for (i = -this->size; i < this->size + modifikator; ++i)
  73. {
  74. printf(" ");
  75. }
  76.  
  77. p.X = (int)(this->x) - this->size; // Pads zeichnen
  78. p.Y = (int)(this->y);
  79. SetConsoleCursorPosition(hOut, p);
  80. SetConsoleTextAttribute(hOut, 10);
  81.  
  82. for (i = -this->size; i < this->size + modifikator; i++)
  83. {
  84. printf("=");
  85. }
  86.  
  87. SetConsoleTextAttribute(hOut, 15);
  88. this->ox = this->x;
  89. this->oy = this->y;
  90. }
  91.  
  92. typedef struct ball
  93. {
  94. float x, y, ox, oy; // aktuelle und Anfangsstellung des Balls
  95. float vx, vy; // Geschwindigkeit x, y
  96.  
  97.  
  98.  
  99.  
  100. } ball;
  101.  
  102. void ball_(ball *this,int _x, int _y) {
  103. this->x = (float)(_x);
  104. this->y = (float)(_y);
  105. this->ox = (float)(this->x);
  106. this->oy = (float)(this->y);
  107. this->vx = this->vy = 0;
  108. }
  109.  
  110. // Ball zeichnen
  111. void drawball(ball *this)
  112. {
  113. COORD p;
  114. p.X = (int)(this->ox);
  115. p.Y = (int)(this->oy);
  116. SetConsoleCursorPosition(hOut, p);
  117. printf(" ");
  118. p.X = (int)(this->x);
  119. p.Y = (int)(this->y);
  120. SetConsoleCursorPosition(hOut, p);
  121. SetConsoleTextAttribute(hOut, 12);
  122. printf("0");
  123. SetConsoleTextAttribute(hOut, 15);
  124. this->ox = this->x;
  125. this->oy = this->y;
  126. }
  127.  
  128. // Alles zurücksetzen
  129. void reset(spieler *you, spieler *comp, ball *b, bool gestartet, int you_score, int comp_score)
  130. {
  131. b->x = (float)(width / 2 - 1);
  132. b->y = (float)(height / 2);
  133. you->x = comp->x = (float)(width / 2);
  134. comp->vx = 0.0f;
  135. b->vx = (float)(rand() % 3) - 1.5f;
  136. b->vy = 1;
  137. gestartet = false;
  138. {
  139. COORD p;
  140. p.X = 0;
  141. p.Y = height;
  142. SetConsoleCursorPosition(hOut, p);
  143. printf("\n| Your score: %i | Computer score: %i ||| Speed: 0 |\n", you_score, comp_score);
  144. }
  145. }
  146.  
  147. // Größe der Konsole festlegen
  148. void setWindowSize(int x, int y)
  149. {
  150. SMALL_RECT sr_window = {0, 0, x - 1, y - 1};
  151. COORD extension;
  152. CONSOLE_SCREEN_BUFFER_INFO csbi;
  153.  
  154. GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); // Akutelle Fensterpuffer Größe ermitteln
  155.  
  156. extension.X = max(x, csbi.dwMaximumWindowSize.X);
  157. extension.Y = max(y, csbi.dwMaximumWindowSize.Y);
  158.  
  159. SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), extension); // Puffer auf max Werte setzen
  160. SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &sr_window); // Fenster auf max Werte setzen
  161.  
  162. extension.X = x;
  163. extension.Y = y;
  164. SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), extension); // Puffer auf Fenstergröße setzen
  165. }
  166.  
  167. // Highscore anzeigen
  168. void highscoreAusgeben()
  169. {
  170. strcat(zwischenPfad,pfad); // Pfad in zwischenPfad zwischenspeichern
  171. char einlesen[69]; // Array um Inhalt der txt zwischen zu speichern
  172.  
  173. system("cls");
  174. printf("Welche Highscores wollen sie anschauen?\n\n");
  175. printf("<1> Amateur\n");
  176. printf("<2> Machbar\n");
  177. printf("<3> Veteran\n");
  178. printf("<4> Nervt\224tend");
  179.  
  180. int auswahl = _getch(); // Hihscorelistenauswahl einlesen
  181. system("cls"); // Konsole leeren
  182.  
  183. if(auswahl == 49) // ansonsten Highscore ausgeben
  184. {
  185. FILE* FDatei; // Zeiger auf Highscore txt erstellen
  186. strcpy(pfad, "C:\\Amateur.txt"); // Highscore Datei öffnen, auslesen und in die Konsole schreiben
  187. FDatei = fopen(pfad, "r"); // Highscore txt öffnen und lesen
  188. int i = 1; // Startwert für Vorzeichen (1. , 2. , 3....) für Ausgabe erhöhen
  189.  
  190. if(!FDatei)
  191. {
  192. FDatei = fopen(pfad, "w");
  193. fclose(FDatei);
  194. printf("\nLeider hat noch niemand einen Highscore aufgestellt!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<1> Zur\201ck zum Hauptmen\201"); // falls Highscore Datei noch nicht vorhanden, erstelle diese
  195.  
  196. int auswahl = _getch(); // zurück zum Menü Abfrage (falls 1 gedrückt wird)
  197. if(auswahl == 49)
  198. {
  199. return;
  200. }
  201. }
  202. else if(fgets(einlesen,50,FDatei) == NULL) // wird ein ":" in der Datei gefunden? Falls nicht, "Keine Highscores" Meldung ausgeben
  203. {
  204. printf("\nLeider hat noch niemand einen Highscore aufgestellt!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<1> Zur\201ck zum Hauptmen\201");
  205. int auswahl = _getch(); // zurück zum Menü Abfrage (falls 1 gedrückt wird)
  206. if(auswahl == 49)
  207. {
  208. return;
  209. }
  210. fclose(FDatei); // Datei schliessen
  211. }
  212. else
  213. {
  214. fclose(FDatei);
  215. FDatei = fopen(pfad, "r"); // noch einmal schließen und öffnen, um wieder am Anfang der Datei zu beginnen
  216. while (fgets(einlesen,50,FDatei)) // ansonsten Highscore ausgeben & lese bis Dateiende
  217. {
  218. ausgabe = strchr (einlesen, '.'); // Punkt im eingelesenen String suchen
  219. ausgabe += 1; // Zeiger um 1 nach rechts verschieben, um den Punkt nicht mit auszugeben
  220. printf("%i. %s", i, ausgabe); // bearbeiteten String ausgeben
  221. i++; // Vorzeichen (1. , 2. , 3....) für Ausgabe erhöhen
  222. }
  223. fclose(FDatei); // Datei schliessen
  224. printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<1> Zur\201ck zum Hauptmen\201"); // falls Highscore Datei noch nicht vorhanden, erstelle diese
  225.  
  226. int auswahl = _getch(); // zurück zum Menü Abfrage (falls 1 gedrückt wird)
  227. if(auswahl == 49)
  228. {
  229. return;
  230. }
  231. }
  232. }
  233. else if(auswahl == 50) // ansonsten Highscore ausgeben
  234. {
  235. FILE* FDatei; // Zeiger auf Highscore txt erstellen
  236. strcpy(pfad, "C:\\Machbar.txt"); // Highscore Datei öffnen, auslesen und in die Konsole schreiben
  237. FDatei = fopen(pfad, "r"); // Highscore txt öffnen und lesen
  238. int i = 1; // Startwert für Vorzeichen (1. , 2. , 3....) für Ausgabe erhöhen
  239.  
  240. if(!FDatei)
  241. {
  242. FDatei = fopen(pfad, "w");
  243. fclose(FDatei);
  244. printf("\nLeider hat noch niemand einen Highscore aufgestellt!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<1> Zur\201ck zum Hauptmen\201"); // falls Highscore Datei noch nicht vorhanden, erstelle diese
  245.  
  246. int auswahl = _getch(); // zurück zum Menü Abfrage (falls 1 gedrückt wird)
  247. if(auswahl == 49)
  248. {
  249. return;
  250. }
  251. fclose(FDatei); // Datei schliessen
  252.  
  253. }
  254. else if(fgets(einlesen,50,FDatei) == NULL) // wird ein ":" in der Datei gefunden? Falls nicht, "Keine Highscores" Meldung ausgeben
  255. {
  256. printf("\nLeider hat noch niemand einen Highscore aufgestellt!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<1> Zur\201ck zum Hauptmen\201");
  257. fclose(FDatei); // Datei schliessen
  258. int auswahl = _getch(); // zurück zum Menü Abfrage (falls 1 gedrückt wird)
  259. if(auswahl == 49)
  260. {
  261. return;
  262. }
  263. }
  264. else
  265. {
  266. fclose(FDatei);
  267. FDatei = fopen(pfad, "r"); // noch einmal schließen und öffnen, um wieder am Anfang der Datei zu beginnen
  268. while (fgets(einlesen,50,FDatei)) // ansonsten Highscore ausgeben & lese bis Dateiende
  269. {
  270. ausgabe = strchr (einlesen, '.'); // Punkt im eingelesenen String suchen
  271. ausgabe += 1; // Zeiger um 1 nach rechts verschieben, um den Punkt nicht mit auszugeben
  272. printf("%i. %s", i, ausgabe); // bearbeiteten String ausgeben
  273. i++; // Vorzeichen (1. , 2. , 3....) für Ausgabe erhöhen
  274. }
  275. fclose(FDatei); // Datei schliessen
  276. printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<1> Zur\201ck zum Hauptmen\201"); // falls Highscore Datei noch nicht vorhanden, erstelle diese
  277.  
  278. int auswahl = _getch(); // zurück zum Menü Abfrage (falls 1 gedrückt wird)
  279. if(auswahl == 49)
  280. {
  281. return;
  282. }
  283. }
  284. }
  285. else if(auswahl == 51) // ansonsten Highscore ausgeben
  286. {
  287. FILE* FDatei; // Zeiger auf Highscore txt erstellen
  288. strcpy(pfad, "C:\\Veteran.txt"); // Highscore Datei öffnen, auslesen und in die Konsole schreiben
  289. FDatei = fopen(pfad, "r"); // Highscore txt öffnen und lesen
  290. int i = 1; // Startwert für Vorzeichen (1. , 2. , 3....) für Ausgabe erhöhen
  291.  
  292. if(!FDatei)
  293. {
  294. FDatei = fopen(pfad, "w");
  295. fclose(FDatei);
  296. printf("\nLeider hat noch niemand einen Highscore aufgestellt!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<1> Zur\201ck zum Hauptmen\201"); // falls Highscore Datei noch nicht vorhanden, erstelle diese
  297.  
  298. int auswahl = _getch(); // zurück zum Menü Abfrage (falls 1 gedrückt wird)
  299. if(auswahl == 49)
  300. {
  301. return;
  302. }
  303. }
  304. else if(fgets(einlesen,50,FDatei) == NULL) // wird ein ":" in der Datei gefunden? Falls nicht, "Keine Highscores" Meldung ausgeben
  305. {
  306. printf("\nLeider hat noch niemand einen Highscore aufgestellt!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<1> Zur\201ck zum Hauptmen\201");
  307. fclose(FDatei); // Datei schliessen
  308. int auswahl = _getch(); // zurück zum Menü Abfrage (falls 1 gedrückt wird)
  309. if(auswahl == 49)
  310. {
  311. return;
  312. }
  313. }
  314. else
  315. {
  316. fclose(FDatei);
  317. FDatei = fopen(pfad, "r"); // noch einmal schließen und öffnen, um wieder am Anfang der Datei zu beginnen
  318. while (fgets(einlesen,50,FDatei)) // ansonsten Highscore ausgeben & lese bis Dateiende
  319. {
  320. ausgabe = strchr (einlesen, '.'); // Punkt im eingelesenen String suchen
  321. ausgabe += 1; // Zeiger um 1 nach rechts verschieben, um den Punkt nicht mit auszugeben
  322. printf("%i. %s", i, ausgabe); // bearbeiteten String ausgeben
  323. i++; // Vorzeichen (1. , 2. , 3....) für Ausgabe erhöhen
  324. }
  325. fclose(FDatei); // Datei schliessen
  326.  
  327. printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<1> Zur\201ck zum Hauptmen\201"); // falls Highscore Datei noch nicht vorhanden, erstelle diese
  328.  
  329. int auswahl = _getch(); // zurück zum Menü Abfrage (falls 1 gedrückt wird)
  330. if(auswahl == 49)
  331. {
  332. return;
  333. }
  334. }
  335. }
  336. else if(auswahl == 52) // ansonsten Highscore ausgeben
  337. {
  338. FILE* FDatei; // Zeiger auf Highscore txt erstellen
  339. strcpy(pfad, "C:\\Nervt\224tend.txt");
  340. FDatei = fopen(pfad, "r"); // Highscore txt öffnen und lesen
  341. int i = 1; // Startwert für Vorzeichen (1. , 2. , 3....) für Ausgabe erhöhen
  342.  
  343. if(!FDatei)
  344. {
  345. FDatei = fopen(pfad, "w");
  346. fclose(FDatei);
  347. printf("\nLeider hat noch niemand einen Highscore aufgestellt!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<1> Zur\201ck zum Hauptmen\201"); // falls Highscore Datei noch nicht vorhanden, erstelle diese
  348.  
  349. int auswahl = _getch(); // zurück zum Menü Abfrage (falls 1 gedrückt wird)
  350. if(auswahl == 49)
  351. {
  352. return;
  353. }
  354. }
  355. else if(fgets(einlesen,50,FDatei) == NULL) // wird ein ":" in der Datei gefunden? Falls nicht, "Keine Highscores" Meldung ausgeben
  356. {
  357. printf("\nLeider hat noch niemand einen Highscore aufgestellt!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<1> Zur\201ck zum Hauptmen\201");
  358. fclose(FDatei); // Datei schliessen
  359. int auswahl = _getch(); // zurück zum Menü Abfrage (falls 1 gedrückt wird)
  360. if(auswahl == 49)
  361. {
  362. return;
  363. }
  364. }
  365. else
  366. {
  367. fclose(FDatei);
  368. FDatei = fopen(pfad, "r"); // noch einmal schließen und öffnen, um wieder am Anfang der Datei zu beginnen
  369. while (fgets(einlesen,50,FDatei)) // ansonsten Highscore ausgeben & lese bis Dateiende
  370. {
  371. ausgabe = strchr (einlesen, '.'); // Punkt im eingelesenen String suchen
  372. ausgabe += 1; // Zeiger um 1 nach rechts verschieben, um den Punkt nicht mit auszugeben
  373. printf("%i. %s", i, ausgabe); // bearbeiteten String ausgeben
  374. i++; // Vorzeichen (1. , 2. , 3....) für Ausgabe erhöhen
  375. }
  376. fclose(FDatei); // Datei schliessen
  377. printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<1> Zur\201ck zum Hauptmen\201"); // falls Highscore Datei noch nicht vorhanden, erstelle diese
  378.  
  379. int auswahl = _getch(); // zurück zum Menü Abfrage (falls 1 gedrückt wird)
  380. if(auswahl == 49)
  381. {
  382. return;
  383. }
  384. }
  385. }
  386.  
  387. strcpy(pfad, zwischenPfad); // ursprünglichen Pfad ->
  388. strcpy(zwischenPfad, ""); // -> wiederherstellen
  389. }
  390.  
  391. // Highscore in Datei schreiben
  392. void highscoreEinlesen()
  393. {
  394. FILE* FDatei;
  395. FDatei = fopen(pfad, "r");
  396. //-------------------------------------------------------- Zahlen einlesen --------------------------------------------------------------------------------------
  397. char score[60];
  398. char* sc;
  399. int i = 0;
  400. while(fgets(score,40,FDatei) != NULL)
  401. {
  402. sc = strchr(score, ':'); // Highscore aus der Textdatei lesen und in double Array speichern
  403. high[i] = strtod(sc+1,NULL);
  404. i++;
  405. }
  406. fclose(FDatei);
  407.  
  408. //-------------------------------------------------------- Namen einlesen --------------------------------------------------------------------------------------
  409.  
  410. FDatei = fopen(pfad, "r"); // Datei öffnen und lesen
  411. char* ptr = ":";
  412. if(fgets(score,60,FDatei) != NULL)
  413. {
  414. fclose(FDatei);
  415. FDatei = fopen(pfad, "r"); // Datei öffnen und lesen
  416.  
  417. char platz1[60] = "";
  418. if(fgets(platz1,60,FDatei) != NULL)
  419. {
  420. st1 = strchr (platz1, '.');
  421. st1 += 1;
  422. strtok(st1,ptr);
  423. }
  424.  
  425. char platz2[60] = "";
  426. if(fgets(platz2,60,FDatei) != NULL)
  427. {
  428. st2 = strchr (platz2, '.');
  429. st2 += 1;
  430. strtok(st2,ptr);
  431. }
  432.  
  433. char platz3[60] = "";
  434. if(fgets(platz3,60,FDatei) != NULL)
  435. {
  436. st3 = strchr (platz3, '.');
  437. st3 += 1;
  438. strtok(st3,ptr);}
  439. }
  440.  
  441. char platz4[60] = "";
  442. if(fgets(platz4,60,FDatei) != NULL)
  443. {
  444. st4 = strchr (platz4, '.');
  445. st4 += 1;
  446. strtok(st4,ptr);
  447. }
  448.  
  449. char platz5[60] = "";
  450. if(fgets(platz5,60,FDatei) != NULL)
  451. {
  452. st5 = strchr (platz5, '.');
  453. st5 += 1;
  454. strtok(st5,ptr);
  455. }
  456.  
  457. char platz6[60] = "";
  458. if(fgets(platz6,60,FDatei) != NULL)
  459. {
  460. st6 = strchr (platz6, '.');
  461. st6 += 1;
  462. strtok(st6,ptr);
  463. }
  464.  
  465. char platz7[60] = "";
  466. if(fgets(platz7,60,FDatei) != NULL)
  467. {
  468. st7 = strchr (platz7, '.');
  469. st7 += 1;
  470. strtok(st7,ptr);
  471. }
  472.  
  473. char platz8[60] = "";
  474. if(fgets(platz8,60,FDatei) != NULL)
  475. {
  476. st8 = strchr (platz8, '.');
  477. st8 += 1;
  478. strtok(st8,ptr);
  479. }
  480.  
  481. char platz9[60] = "";
  482. if(fgets(platz9,60,FDatei) != NULL)
  483. {
  484. st9 = strchr (platz9, '.');
  485. st9 += 1;
  486. strtok(st9,ptr);
  487. }
  488. fclose(FDatei);
  489.  
  490. FDatei = fopen(pfad,"w+"); // Datei öffnen und Higscores an Dateiende anhängen
  491.  
  492. if(dif <= high[0])
  493. {
  494. high[9] = high[8];
  495. high[8] = high[7];
  496. high[7] = high[6];
  497. high[6] = high[5];
  498. high[5] = high[4];
  499. high[4] = high[3];
  500. high[3] = high[2];
  501. high[2] = high[1];
  502. high[1] = high[0];
  503. high[0] = dif;
  504. if(name != NULL)fprintf(FDatei, ".%s's Zeit: %.2fs\n",name,high[0]);
  505. if(st1 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st1,high[1]);
  506. if(st2 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st2,high[2]);
  507. if(st3 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st3,high[3]);
  508. if(st4 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st4,high[4]);
  509. if(st5 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st5,high[5]);
  510. if(st6 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st6,high[6]);
  511. if(st7 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st7,high[7]);
  512. if(st8 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st8,high[8]);
  513. if(st9 != NULL)fprintf(FDatei, ".%s: %.2fs",st9,high[9]);
  514. }
  515. else if(dif > high[0] && dif <= high[1])
  516. {
  517. high[9] = high[8];
  518. high[8] = high[7];
  519. high[7] = high[6];
  520. high[6] = high[5];
  521. high[5] = high[4];
  522. high[4] = high[3];
  523. high[3] = high[2];
  524. high[2] = high[1];
  525. high[1] = dif;
  526. if(st1 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st1,high[0]);
  527. if(name != NULL)fprintf(FDatei, ".%s's Zeit: %.2fs\n",name,high[1]);
  528. if(st2 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st2,high[2]);
  529. if(st3 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st3,high[3]);
  530. if(st4 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st4,high[4]);
  531. if(st5 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st5,high[5]);
  532. if(st6 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st6,high[6]);
  533. if(st7 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st7,high[7]);
  534. if(st8 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st8,high[8]);
  535. if(st9 != NULL)fprintf(FDatei, ".%s: %.2fs",st9,high[9]);
  536. }
  537. else if(dif > high[0] && dif > high[1] && dif <= high[2])
  538. {
  539. high[9] = high[8];
  540. high[8] = high[7];
  541. high[7] = high[6];
  542. high[6] = high[5];
  543. high[5] = high[4];
  544. high[4] = high[3];
  545. high[3] = high[2];
  546. high[2] = dif;
  547. if(st1 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st1,high[0]);
  548. if(st2 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st2,high[1]);
  549. if(name != NULL)fprintf(FDatei, ".%s's Zeit: %.2fs\n",name,high[2]);
  550. if(st3 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st3,high[3]);
  551. if(st4 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st4,high[4]);
  552. if(st5 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st5,high[5]);
  553. if(st6 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st6,high[6]);
  554. if(st7 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st7,high[7]);
  555. if(st8 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st8,high[8]);
  556. if(st9 != NULL)fprintf(FDatei, ".%s: %.2fs",st9,high[9]);
  557. }
  558. else if(dif > high[0] && dif >= high[1] && dif > high[2] && dif <= high[3])
  559. {
  560.  
  561. high[9] = high[8];
  562. high[8] = high[7];
  563. high[7] = high[6];
  564. high[6] = high[5];
  565. high[5] = high[4];
  566. high[4] = high[3];
  567. high[3] = dif;
  568. if(st1 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st1,high[0]);
  569. if(st2 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st2,high[1]);
  570. if(st3 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st3,high[2]);
  571. if(name != NULL)fprintf(FDatei, ".%s's Zeit: %.2fs\n",name,high[3]);
  572. if(st4 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st4,high[4]);
  573. if(st5 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st5,high[5]);
  574. if(st6 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st6,high[6]);
  575. if(st7 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st7,high[7]);
  576. if(st8 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st8,high[8]);
  577. if(st9 != NULL)fprintf(FDatei, ".%s: %.2fs",st9,high[9]);
  578. }
  579. else if(dif > high[3] && dif <= high[4])
  580. {
  581.  
  582. high[9] = high[8];
  583. high[8] = high[7];
  584. high[7] = high[6];
  585. high[6] = high[5];
  586. high[5] = high[4];
  587. high[4] = dif;
  588. if(st1 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st1,high[0]);
  589. if(st2 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st2,high[1]);
  590. if(st3 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st3,high[2]);
  591. if(st4 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st4,high[3]);
  592. if(name != NULL)fprintf(FDatei, ".%s's Zeit: %.2fs\n",name,high[4]);
  593. if(st5 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st5,high[5]);
  594. if(st6 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st6,high[6]);
  595. if(st7 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st7,high[7]);
  596. if(st8 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st8,high[8]);
  597. if(st9 != NULL)fprintf(FDatei, ".%s: %.2fs",st9,high[9]);
  598.  
  599. }
  600. else if(dif > high[4] && dif <= high[5])
  601. {
  602. high[9] = high[8];
  603. high[8] = high[7];
  604. high[7] = high[6];
  605. high[6] = high[5];
  606. high[5] = dif;
  607. if(st1 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st1,high[0]);
  608. if(st2 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st2,high[1]);
  609. if(st3 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st3,high[2]);
  610. if(st4 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st4,high[3]);
  611. if(st5 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st5,high[4]);
  612. if(name != NULL)fprintf(FDatei, ".%s's Zeit: %.2fs\n",name,high[5]);
  613. if(st6 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st6,high[6]);
  614. if(st7 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st7,high[7]);
  615. if(st8 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st8,high[8]);
  616. if(st9 != NULL)fprintf(FDatei, ".%s: %.2fs",st9,high[9]);
  617. }
  618. else if(dif > high[5] && dif <= high[6])
  619. {
  620. high[9] = high[8];
  621. high[8] = high[7];
  622. high[7] = high[6];
  623. high[6] = dif;
  624. if(st1 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st1,high[0]);
  625. if(st2 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st2,high[1]);
  626. if(st3 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st3,high[2]);
  627. if(st4 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st4,high[3]);
  628. if(st5 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st5,high[4]);
  629. if(st6 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st6,high[5]);
  630. if(name != NULL)fprintf(FDatei, ".%s's Zeit: %.2fs\n",name,high[6]);
  631. if(st7 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st7,high[7]);
  632. if(st8 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st8,high[8]);
  633. if(st9 != NULL)fprintf(FDatei, ".%s: %.2fs",st9,high[9]);
  634. }
  635. else if(dif > high[6] && dif <= high[7])
  636. {
  637. high[9] = high[8];
  638. high[8] = high[7];
  639. high[7] = dif;
  640. if(st1 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st1,high[0]);
  641. if(st2 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st2,high[1]);
  642. if(st3 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st3,high[2]);
  643. if(st4 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st4,high[3]);
  644. if(st5 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st5,high[4]);
  645. if(st6 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st6,high[5]);
  646. if(st7 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st7,high[6]);
  647. if(name != NULL)fprintf(FDatei, ".%s's Zeit: %.2fs\n",name,high[7]);
  648. if(st8 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st8,high[8]);
  649. if(st9 != NULL)fprintf(FDatei, ".%s: %.2fs",st9,high[9]);
  650. }
  651. else if(dif > high[7] && dif <= high[8])
  652. {
  653. high[9] = high[8];
  654. high[8] = dif;
  655. if(st1 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st1,high[0]);
  656. if(st2 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st2,high[1]);
  657. if(st3 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st3,high[2]);
  658. if(st4 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st4,high[3]);
  659. if(st5 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st5,high[4]);
  660. if(st6 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st6,high[5]);
  661. if(st7 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st7,high[6]);
  662. if(st8 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st8,high[7]);
  663. if(name != NULL)fprintf(FDatei, ".%s's Zeit: %.2fs\n",name,high[8]);
  664. if(st9 != NULL)fprintf(FDatei, ".%s: %.2fs",st9,high[9]);
  665. }
  666. else if(dif > high[8] && dif <= high[9])
  667. {
  668. high[9] = dif;
  669. if(st1 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st1,high[0]);
  670. if(st2 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st2,high[1]);
  671. if(st3 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st3,high[2]);
  672. if(st4 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st4,high[3]);
  673. if(st5 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st5,high[4]);
  674. if(st6 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st6,high[5]);
  675. if(st7 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st7,high[6]);
  676. if(st8 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st8,high[7]);
  677. if(st9 != NULL)fprintf(FDatei, ".%s: %.2fs\n",st9,high[8]);
  678. if(name != NULL)fprintf(FDatei, ".%s's Zeit: %.2fs",name,high[9]);
  679. }
  680. fclose(FDatei); // Datei schließen
  681. }
  682.  
  683. // Vorgehen nach Spielende abfragen
  684. void spielende()
  685. {
  686. int auswahl;
  687. COORD p;
  688. system("cls");
  689. printf("------------------------------------\n");
  690. printf("| %s \t\t |\n|----------------------------------|", spielergebnis); // Tabelle mit Spielergebnissen anzeigen
  691. printf("\n| Endstand: Du <%i> Computer <%i> |\n",yScore, cScore);
  692. printf("------------------------------------\n\n");
  693. printf("W\204hlen sie eine M\224glichkeit!\n\n");
  694. printf("<1> Zur\201ck zum Hauptmen\201\n");
  695. printf("<2> Highscore anzeigen\n");
  696. p.X = (int) (20);
  697. p.Y = (int) (1);
  698. SetConsoleCursorPosition(hOut, p);
  699. printf("Zeit: %.2fs", dif);
  700. // Menü nach Spielende darstellen
  701. auswahl = _getch();
  702.  
  703. if(auswahl == 49)
  704. {
  705. mainLoop = 0;
  706. return;
  707. }
  708. else if(auswahl == 50)
  709. {
  710. highscoreAusgeben();
  711. }
  712. else if(ende == true)
  713. {
  714. ende = false;
  715. }
  716. else
  717. {
  718. printf("\n\nUng\201ltige Eingabe!\n\n");
  719. Sleep(2000); // falls eine Taste, die nicht zur Auswahl stand gedrückt wurde, Ungültige Eingabe anzeigen
  720. system("cls"); // und zurück zum Hautpmenü
  721. spielende();
  722. }
  723. }
  724.  
  725. // Spiel ausführen
  726. void spielen()
  727. {
  728. int i,gestartet;
  729. int you_score = 0, comp_score = 0; // Statistik auf Standard setzen
  730. spieler you,comp; ball b;
  731.  
  732. setWindowSize(55,39);
  733.  
  734. // Oberfläche zeichnen
  735. SetConsoleTextAttribute( hOut, 15 );
  736.  
  737. for ( i = 0; i < width - 1; ++i)
  738. printf("-");
  739. for ( i = 0; i < height - 1; ++i)
  740. {
  741. printf("\n|");
  742.  
  743. for ( i = 0; i < width - 3; ++i)
  744. printf(" ");
  745. printf("|");
  746. }
  747. printf("\n");
  748. for ( i = 0; i < width - 1; ++i)
  749.  
  750. printf("-");
  751. printf("\n| Your score: 0 | Computer score: 0 ||| Speed: 0 |\n");
  752. for ( i = 0; i < width - 1; ++i)
  753. printf("-");
  754.  
  755. // Ende Oberfläche zeichnen
  756.  
  757. gestartet = false; // Spiel gestartet?
  758. spieler_(&you,width / 2, height - 2, 4); // Spieler erstellen
  759. spieler_(&comp,width / 2, 2, 4); // KI erstellen
  760. ball_(&b,width / 2 - 1, height / 2); // Ball erstellen
  761.  
  762. // Ball in zufällige Richtung zum Spieler
  763. b.vx = (float)(rand() % 3) - 1.5f;
  764. b.vy = 1;
  765. comp.vx = 0;
  766.  
  767. time(&start); // Stoppuhr für Highscore starten
  768.  
  769. while (true)
  770. {
  771. if (gestartet == true) // Spiel gestartet?
  772. {
  773.  
  774. if (GetAsyncKeyState(links))
  775. {
  776. if(strcmp(schwierigkeit,schwierigkeit1) == 0)
  777. {
  778. you.x -= 2.5;
  779. }
  780. else if(strcmp(schwierigkeit,schwierigkeit2) == 0)
  781. {
  782. you.x -= 2;
  783. }
  784. else if(strcmp(schwierigkeit,schwierigkeit3) == 0)
  785. {
  786. you.x -= 2;
  787. }
  788. else if(strcmp(schwierigkeit,schwierigkeit4) == 0)
  789. {
  790. you.x -= 2.5;
  791. }
  792. }
  793. else if (GetAsyncKeyState(rechts))
  794. {
  795. if(strcmp(schwierigkeit,schwierigkeit1) == 0)
  796. {
  797. you.x += 2.5;
  798. }
  799. else if(strcmp(schwierigkeit,schwierigkeit2) == 0)
  800. {
  801. you.x += 2;
  802. }
  803. else if(strcmp(schwierigkeit,schwierigkeit3) == 0)
  804. {
  805. you.x += 2;
  806. }
  807. else if(strcmp(schwierigkeit,schwierigkeit4) == 0)
  808. {
  809. you.x += 2.5;
  810. }
  811. }
  812. else if (GetAsyncKeyState(beenden))
  813. {
  814. COORD p;
  815. p.X = (int) (width / 2 - 16);
  816. p.Y = (int) (height / 1.8f);
  817. SetConsoleCursorPosition(hOut, p);
  818. printf("Spiel wirklich beenden?");
  819. p.X = (int) (width / 2 - 16);
  820. p.Y = (int) (height / 1.6f);
  821. SetConsoleCursorPosition(hOut, p); // Abfrage, ob Spiel fortsetzen oder Beenden
  822. printf("<1> Weiterspielen\n"); // wird druch das drücken der q Taste auf
  823. p.X = (int) (width / 2 - 16); // in die Konsole geschrieben und eingelesen
  824. p.Y = (int) (height / 1.55f);
  825. SetConsoleCursorPosition(hOut, p);
  826. printf("<2> Spiel beenden\n\n");
  827. p.X = (int) (width / 2 - 17);
  828. p.Y = (int) (height / 1.35f);
  829. SetConsoleCursorPosition(hOut, p);
  830. char c;
  831. while ((c = _getch()) != EOF && c != 'q'); // Puffer automatisch im Hintergrund leeren
  832. int auswahl = _getch();
  833. while(GetAsyncKeyState(VK_RETURN));
  834.  
  835.  
  836. if(auswahl == 49)
  837. {
  838. p.X = (int) (width / 2 - 16);
  839. p.Y = (int) (height / 1.8f);
  840. SetConsoleCursorPosition(hOut, p);
  841. printf(" ");
  842. p.X = (int) (width / 2 - 16);
  843. p.Y = (int) (height / 1.6f);
  844. SetConsoleCursorPosition(hOut, p); // nach Eingabe, wird der Dialog wieder entfernt
  845. printf(" ");
  846. p.X = (int) (width / 2 - 16);
  847. p.Y = (int) (height / 1.55f);
  848. SetConsoleCursorPosition(hOut, p);
  849. printf(" ");
  850. p.X = (int) (width / 2 - 17);
  851. p.Y = (int) (height / 1.35f);
  852. SetConsoleCursorPosition(hOut, p);
  853. printf(" ");
  854. }
  855. else
  856. {
  857. time(&endet); // Stoppuhr stoppen
  858. break;
  859. }
  860.  
  861. }
  862.  
  863. // Ballgeschwindigkeit für Statistik berechnen
  864. float x = pow(b.vx, 2);
  865. float y = pow(b.vy, 2);
  866. speed = x + y;
  867. speed = sqrt(speed);
  868. COORD p;
  869. p.X = (int) (47);
  870. p.Y = (int) (37);
  871. SetConsoleCursorPosition(hOut, p);
  872. printf("%.2f", speed);
  873.  
  874. // KI zum Ball führen
  875. comp.vx -= (float)(comp.x - b.x) / compv;
  876. comp.vx *= 0.83f;
  877.  
  878. // KI Geschwindigeit in Abhängigkeit der Ballgeschwindigkeit anpassen
  879. comp.x += comp.vx;
  880.  
  881. // Bewegungsgrenzen setzen
  882. if (you.x < you.size + 1)
  883. {
  884. you.x = (float) (you.size + 1);
  885. }
  886. else if (you.x > width - you.size - 2 - modifikator)
  887. {
  888. you.x = (float) (width - you.size - 2 - modifikator);
  889. }
  890.  
  891. // KI Bewegungsgrenze setzen
  892. if (comp.x < comp.size + 1)
  893. {
  894. comp.x = (float) (comp.size + 1);
  895. }
  896. else if (comp.x > width - comp.size - 2 - modifikator)
  897. {
  898. comp.x = (float) (width - comp.size - 2 - modifikator);
  899. }
  900.  
  901. // Ball Höchstgeschwindigkeit einhalten
  902. if (b.vx < -maxSpeed)
  903. {
  904. b.vx = -maxSpeed;
  905. }
  906. else if (b.vx > maxSpeed)
  907. {
  908. b.vx = maxSpeed;
  909. }
  910.  
  911. // Dem Ball an der aktuellen Position Geschwindigkeit zuführen
  912. b.x += b.vx;
  913. b.y += b.vy;
  914.  
  915. // Hat der Ball den Spieler getroffen?
  916. if (b.y >= you.y - 1 && b.y <= you.y + 1)
  917. {
  918. if (b.x > you.x - you.size && b.x < you.x + you.size)
  919. {
  920. b.vy *= -1;
  921. b.vx += (float)(b.x - you.x) / 3;
  922. b.y = you.y - 1;
  923. }
  924. }
  925.  
  926. // Hat der Ball die KI getroffen?
  927. if (b.y <= comp.y + 1 && b.y >= comp.y - 1)
  928. {
  929. if (b.x > comp.x - comp.size && b.x < comp.x + comp.size)
  930. {
  931. b.vy *= -1;
  932. b.vx += (float)(b.x - comp.x) / 3;
  933. b.y = comp.y + 1;
  934. }
  935. }
  936.  
  937. // Hat der Ball die Grenzen überschritten?(Punkt bekommen)
  938. if (b.y >= height)
  939. {
  940. comp_score++;
  941. cScore = comp_score;
  942. reset( &you, &comp, &b, gestartet, you_score, comp_score );
  943. }
  944. else if (b.y <= 0)
  945. {
  946. you_score++;
  947. yScore = you_score;
  948. reset( &you, &comp, &b, gestartet, you_score, comp_score );
  949. }
  950. if (b.x <= 1)
  951. {
  952. b.vx *= -1;
  953. b.x = 1.0f;
  954. }
  955. else if (b.x >= width - 3)
  956. {
  957. b.vx *= -1;
  958. b.x = (float)(width - 3);
  959. }
  960. }
  961. else if(you_score == siegPunkte)
  962. {
  963. dif = 1000;
  964. high[0] = dif, high[1] = dif, high[2] = dif, high[3] = dif; // Standartwerte initialisieren
  965. system("cls"); // Konsole leeren
  966. time(&endet); // Stoppuhr stoppen
  967. dif = difftime(endet,start); // Highscore Zeit berechnen (ende - anfang)
  968. strcpy(spielergebnis, ""); // spielergebnis string leeren
  969. strcat(spielergebnis, "Gewonnen!!!"); // Endergebnis speichern für spätere Ausgabe
  970. printf("\n\n\n\n\n\n\n\n\t\t Gewonnen!!! :)"); // Siegmeldung ausgeben
  971. printf("\n\n\n\n ...um fortzufahren bitte Enter dr\201cken...");
  972. char c;
  973. while ((c = _getch()) != EOF && c != 13); // Puffer automatisch im Hintergrund leeren
  974. system("cls");
  975.  
  976. //-------------------------------------------------------- Namen einlesen -------------------------------------------------------------------------------------------
  977.  
  978. printf("Bitte geben sie ihren Namen ein: "); // Benutzer zur Namenseingabe aufforden und diesen in "name" abspeichern
  979. scanf("%s", name);
  980.  
  981. //-------------------------------------------------------- Highscores einlesen --------------------------------------------------------------------------------------
  982.  
  983. FILE *FDatei;
  984.  
  985. FDatei = fopen(pfad, "r");
  986. if(!FDatei)
  987. {
  988. FDatei = fopen(pfad, "w"); // falls öffnen der Datei fehlgeschlagen, eine Datei erstellen
  989. fclose(FDatei); // Datei schließen
  990. }
  991. highscoreEinlesen();
  992. mainLoop = 1; // über main Funktion zu spielende() springen
  993. break;
  994. }
  995. else if(comp_score == siegPunkte)
  996. {
  997. system("cls"); // Konsole leeren
  998. time(&endet); // Stoppuhr stoppen
  999. dif = difftime(endet,start); // Highscore Zeit berechnen (ende - anfang)
  1000. strcpy(spielergebnis, ""); // spielergebnis string leeren
  1001. strcat(spielergebnis, "Verloren!!!"); // Endergebnis speichern für spätere Ausgabe
  1002. printf("\n\n\n\n\n\n\n\n\t\t Verloren!!! :("); // Niederlage Meldung ausgeben
  1003. printf("\n\n\n\n ...um fortzufahren bitte Enter dr\201cken...");
  1004. char c;
  1005. while ((c = _getch()) != EOF && c != 13); // Puffer automatisch im Hintergrund leeren
  1006. mainLoop = 1; // über main Funktion zu spielende() springen
  1007. break;
  1008. }
  1009. else
  1010. {
  1011. // Startbedingungüberprüfen (Leertaste gedrückt?)
  1012. COORD p;
  1013. p.X = (int) (width / 2 - 16);
  1014. p.Y = (int) (height / 1.5f);
  1015. SetConsoleCursorPosition(hOut, p);
  1016. printf("Press the space bar to start...");
  1017.  
  1018. if (GetAsyncKeyState(VK_SPACE))
  1019. {
  1020. COORD p;
  1021. p.X = (int) (width / 2 - 16);
  1022. p.Y = (int) (height / 1.5f);
  1023. SetConsoleCursorPosition(hOut, p);
  1024. printf(" ");
  1025. gestartet = true;
  1026. }
  1027. }
  1028.  
  1029. // Alles zeichnen
  1030. draw(&you);
  1031. draw(&comp);
  1032. drawball(&b);
  1033.  
  1034. // Verzögern
  1035. Sleep(delay);
  1036. }
  1037. }
  1038.  
  1039. // Konfiguration der Tastenbelegung
  1040. void steuerung()
  1041. {
  1042. system("cls");
  1043. printf("===========================================================================\n");
  1044. printf("== Bitte w\204hlen sie die Taste die sie ver\204ndern m\224chten und dr\201cken sie ==\n");
  1045. printf("== anschlie\341end die Taste die sie zuweisen wollen! ==\n"); // Menü darstellen
  1046. printf("===========================================================================\n\n");
  1047.  
  1048. printf("<1> Links\t\t\tAktuelle Taste: %c\n",links);
  1049. printf("<2> Rechts\t\t\tAktuelle Taste: %c\n",rechts); // aktuelle Tastenbelegung anzeigen
  1050. printf ("<3> Beenden\t\t\tAktuelle Taste: %c\n",beenden);
  1051. printf("<4> Zur\201ck zum Hauptmen\201\n\n");
  1052. printf("Beachte: Kleinbuchstaben m\201ssen leider im Moment noch als\n");
  1053. printf("\t Gro\341buchstaben angegeben werden!");
  1054.  
  1055. int auswahl = _getch();
  1056.  
  1057. if(auswahl == 49)
  1058. {
  1059. links = _getch(); // Auf Benutzereingabe warten und auswerten
  1060. system("cls");
  1061. steuerung();
  1062. }
  1063. else if(auswahl == 50)
  1064. {
  1065. rechts = _getch();
  1066. system("cls"); // warten auf Eingabe und neue Taste setzen
  1067. steuerung();
  1068. }
  1069. else if(auswahl == 51)
  1070. {
  1071. beenden = _getch();
  1072. system("cls");
  1073. steuerung();
  1074. }
  1075. else if(auswahl == 52)
  1076. {
  1077. system("cls"); // zurück zum Hauptmenü
  1078. return;
  1079. }
  1080. else
  1081. {
  1082. printf("\n\nUng\201ltige Eingabe!\n\n");
  1083. Sleep(2000); // falls eine Taste, die nicht zur Auswahl stand gedrückt wurde, Ungültige Eingabe anzeigen
  1084. system("cls"); // und zurück zum Hautpmenü
  1085. steuerung();
  1086. }
  1087. }
  1088.  
  1089. // Schwierigkeitsgrad, Ballgeschwindigkeit
  1090. // einstellen, alles zurücksetzen
  1091. void einstellungen()
  1092. {
  1093. system("cls");
  1094. printf("Bitte w\204hlen sie eine Einstellung die sie ver\204ndern m\224chten!\n\n");
  1095. printf("<1> Schwieriegkeitsgrad \204ndern\t\tAktuelle Schwierigkeit: %s\n",schwierigkeit); // Menü mit aktuellen Einstellungen anzeigen
  1096. printf("<2> Maximale Ballgeschwindigkeit\tAktuelle Geschwindigkeit: %.2f\n",maxSpeed);
  1097. printf("<3> Anzahl der Punkte bis zum Sieg\tAktuelle Siegpunkte: %i\n",siegPunkte);
  1098. printf("<4> Alle Einstellungen zur\201cksetzen\n");
  1099. printf("<5> Highscore zur\201cksetzten\n");
  1100. printf("<6> Zur\201ck zum Hauptmen\201\n\n");
  1101.  
  1102. int auswahl = _getch(); // Eingabe in Variable speichern
  1103.  
  1104. if(auswahl == 49) // Eingabe auswerten
  1105. {
  1106. system("cls");
  1107. printf("W\204hlen sie ihren bevorzugten Schwierigkeitsgrad!\n\n");
  1108. printf("<1> Amateur\n"); // Schwierigkeitsgrad Menü öffnen
  1109. printf("<2> Machbar\n");
  1110. printf("<3> Veteran\n");
  1111. printf("<4> Nervt\224tend\n");
  1112.  
  1113. int auswahl = _getch();
  1114. strcpy(schwierigkeit, "");
  1115.  
  1116. if(auswahl == 49)
  1117. {
  1118. modifikator = 0;
  1119. modifikator += 2; // Padlänge anpassen
  1120. maxSpeed = 1.8f; // Ballgeschwindigkeit je nach Auswahl anpassen
  1121. strcat(schwierigkeit, "Amateur"); // Schwierigkeitsgradanzeige im Einstellungsmenü aktualisieren
  1122. strcpy(pfad, "C:\\Amateur.txt"); // Pfad für Highscoredatei aktualisieren
  1123. compv = 10.0f; // Computer Schnelligkeit setzen
  1124. return; // (alter String wird gelöscht und neuer angehängt)
  1125. }
  1126. else if(auswahl == 50)
  1127. {
  1128. modifikator = 0;
  1129. strcat(schwierigkeit, "Machbar");
  1130. strcpy(pfad, "C:\\Machbar.txt");
  1131. compv = 8.0f;
  1132. maxSpeed = 3.2f;
  1133. return;
  1134. }
  1135. else if(auswahl == 51)
  1136. {
  1137. modifikator = 0;
  1138. modifikator -= 2;
  1139. strcat(schwierigkeit, "Veteran");
  1140. strcpy(pfad, "C:\\Veteran.txt");
  1141. compv = 6.0f;
  1142. maxSpeed = 4.5f;
  1143. return;
  1144. }
  1145. else if(auswahl == 52)
  1146. {
  1147. modifikator = 0;
  1148. modifikator -= 4;
  1149. strcat(schwierigkeit, "Nervt\224tend");
  1150. strcpy(pfad, "C:\\Nervt\224tend.txt");
  1151. compv = 3.7f;
  1152. maxSpeed = 6.0f;
  1153. return;
  1154. }
  1155. else
  1156. {
  1157. printf("\n\nUng\201ltige Eingabe!\n\n"); // falls eine Taste, die nicht zur Auswahl stand gedrückt wurde, Ungültige Eingabe anzeigen
  1158. Sleep(2000); // und zurück zum Hautpmenü
  1159. return;
  1160. }
  1161. }
  1162. else if(auswahl == 50)
  1163. {
  1164. printf("Neue Ballgeschwindigkeit eingeben!\n\n"); // Abfrage nach neuer Ballgeschwindigkeit
  1165. scanf("%f",&maxSpeed);
  1166.  
  1167. if(maxSpeed != 1.8f && maxSpeed != 2.8f && maxSpeed != 3.5f && maxSpeed != 5) // Falls Ballgeschwindigkeit ungleich den Voreinstellungen, so
  1168. {
  1169. strcpy(schwierigkeit,""); // wird die Schwierigkeitsanzeige auf "Persönlich" gesetzt
  1170. strcat(schwierigkeit, "Pers\224nlich");
  1171. system("cls");
  1172. }
  1173. einstellungen(); // zurück zum Einstellungsmenü
  1174. }
  1175. else if(auswahl == 51)
  1176. {
  1177. printf("Neue Anzahl der ben\224tigten Siegpunkte eingeben!\n\n"); // Abfrage nach neuer Ballgeschwindigkeit
  1178. scanf("%i",&siegPunkte);
  1179. system("cls");
  1180. return;
  1181. }
  1182. else if(auswahl == 52)
  1183. {
  1184. system("cls");
  1185. printf("Sind sie sich sicher, dass sie alle Einstellungen zur\201cksetzen m\224chten?\n\n"); // Fragen, ob der Benutzer sicher ist, dass er die Einstellungen zurücksetzen möcht
  1186. printf("<1> Ja, alle l\224schen\n");
  1187. printf("<2> Nein, zur\201ck zu Einstellungen");
  1188.  
  1189. int auswahl = _getch(); // Benutzereingabe einlesen
  1190.  
  1191. if(auswahl == 49)
  1192. {
  1193. system("cls");
  1194. strcpy(schwierigkeit,"");
  1195. strcat(schwierigkeit, "Machbar"); // Alle Werte auf Standard setzen
  1196. maxSpeed = 3.2f;
  1197. links = 65, rechts = 68, beenden = 81;
  1198. printf("\n Einstellungen erfolgreich zur\201ckgesetzt!");
  1199. Sleep(2500);
  1200. system("cls");
  1201. return;
  1202. }
  1203. else if(auswahl == 50)
  1204. {
  1205. einstellungen(); // falls nein, zurück zum Einstellungsmenü
  1206. }
  1207. else
  1208. {
  1209. printf("\n\nUng\201ltige Eingabe!\n\n");
  1210. Sleep(2000); // falls eine Taste, die nicht zur Auswahl stand gedrückt wurde, Ungültige Eingabe anzeigen
  1211. system("cls"); // und zurück zum Hautpmenü
  1212. einstellungen();
  1213. }
  1214. }
  1215. else if(auswahl == 53)
  1216. {
  1217. system("cls");
  1218. printf("Sind sie sich sicher, dass sie alle Highscores l\224schen m\224chten?\n\n"); // Fragen, ob der Benutzer sicher ist, dass er die Highscores löschen möchte
  1219. printf("<1> Ja, alle l\224schen\n");
  1220. printf("<2> Nein, zur\201ck zu Einstellungen");
  1221.  
  1222. int auswahl = _getch(); // Benutzereingabe einlesen
  1223.  
  1224. if(auswahl == 49)
  1225. {
  1226. FILE *FDatei;
  1227. FDatei = fopen("C:\\Amateur","w"); // Alte Highscore Textdatei leeren
  1228. fclose(FDatei);
  1229. FDatei = fopen("C:\\Machbar.txt","w"); // Alte Highscore Textdatei leeren
  1230. fclose(FDatei);
  1231. FDatei = fopen("C:\\Veteran.txt","w"); // Alte Highscore Textdatei leeren
  1232. fclose(FDatei);
  1233. FDatei = fopen("C:\\Nervt\224tend.txt","w"); // Alte Highscore Textdatei leeren
  1234. fclose(FDatei);
  1235. system("cls");
  1236. printf("Highscores erfolgreich zur\201ckgesetzt!");
  1237. Sleep(2000);
  1238. return;
  1239. }
  1240. else if(auswahl == 50)
  1241. {
  1242. einstellungen();
  1243. }
  1244. else
  1245. {
  1246. printf("\n\nUng\201ltige Eingabe!\n\n");
  1247. Sleep(2000); // falls eine Taste, die nicht zur Auswahl stand gedrückt wurde, Ungültige Eingabe anzeigen
  1248. system("cls"); // und zurück zum Hautpmenü
  1249. einstellungen();
  1250. }
  1251. }
  1252. else if(auswahl == 54)
  1253. {
  1254. system("cls"); // zurück zum Hauptmenü
  1255. return;
  1256. }
  1257. else
  1258. {
  1259. printf("\n\nUng\201ltige Eingabe!\n\n");
  1260. Sleep(2000); // falls eine Taste, die nicht zur Auswahl stand gedrückt wurde, Ungültige Eingabe anzeigen
  1261. system("cls"); // und zurück zum Hautpmenü
  1262. einstellungen();
  1263. }
  1264.  
  1265.  
  1266.  
  1267. }
  1268.  
  1269. // Hauptmenü anzeigen und Auswahl auswerten
  1270. void menu()
  1271. {
  1272.  
  1273. setWindowSize(80,25);
  1274.  
  1275. system("cls");
  1276. printf("W\204hlen sie eine M\224glichkeit!\n\n");
  1277. printf("<1> Pong spielen\n");
  1278. printf("<2> Steuerung\n"); // Menü darstellen
  1279. printf("<3> Highscore\n");
  1280. printf("<4> Einstellungen\n");
  1281. printf("<5> Spiel beenden\n\n");
  1282. int auswahl = _getch();
  1283. // Auf Benutzereingabe warten
  1284. system("cls");
  1285.  
  1286. if(auswahl == 49)
  1287. {
  1288. spielen();
  1289. }
  1290. else if(auswahl == 50) // je nach Auswahl, das enstprechende Untermenü öffnen
  1291. {
  1292. steuerung();
  1293. }
  1294. else if(auswahl == 51)
  1295. {
  1296. highscoreAusgeben();
  1297. }
  1298. else if(auswahl == 52)
  1299. {
  1300. einstellungen();
  1301. }
  1302. else if(auswahl == 53)
  1303. {
  1304. mainLoop = 2; // Main Schleife unterbrechen und Programm beenden
  1305. }
  1306. else
  1307. {
  1308. printf("\n\nUng\201ltige Eingabe!\n\n");
  1309. Sleep(2000); // falls eine Taste, die nicht zur Auswahl stand gedrückt wurde, Ungültige Eingabe anzeigen
  1310. menu(); // und zurück zum Hautpmenü
  1311. }
  1312. }
  1313.  
  1314. // Beginn des Programms direkter Verweis nach Menü
  1315. int main()
  1316. {
  1317. hOut = GetStdHandle(STD_OUTPUT_HANDLE);
  1318. // Cursor verstecken
  1319. CONSOLE_CURSOR_INFO ConCurInf;
  1320. ConCurInf.dwSize = 10;
  1321. ConCurInf.bVisible = false;
  1322. SetConsoleCursorInfo(hOut, &ConCurInf);
  1323.  
  1324. while(mainLoop <= 1)
  1325. {
  1326. if(mainLoop == 0)
  1327. {
  1328. menu(); // verhindern, dass das Programm frühzeitig beendet wird
  1329. }
  1330. else if(mainLoop == 1)
  1331. {
  1332. spielende();
  1333. }
  1334.  
  1335. }
  1336.  
  1337. return 0;
  1338.  
  1339. }
  1340.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty