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.

322 lines
6.1 KiB

2 years ago
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int wallX = 0;
  4. int wallY = 0;
  5. int wallLength = 0;
  6. int BinX;
  7. int BinY = 12;
  8. char field[23][29];
  9. int windForce = 0;
  10. int ScorePoints = 0;
  11. int lifeCount = 3;
  12. int Ballx = -1;
  13. int Bally = 27;
  14. int windIntervall = 0;
  15. int lvlnumber = 1;
  16. int fieldWidth = 25;
  17. int fieldHeigth = 30;
  18. struct Player
  19. {
  20. char Name[50];
  21. int Points;
  22. }playerlist[11];
  23. void buildBin(int width, int heigth){
  24. field[width][heigth] = 'V';
  25. field[width+1][heigth+1] = '\\';
  26. field[width+2][heigth+2] = '\\';
  27. field[width-1][heigth+1] = '/';
  28. field[width-2][heigth+2] = '/';
  29. field[width][heigth+1] = ' ';
  30. }
  31. void loadLevel() {
  32. int lvlnum;
  33. clearField();
  34. Ballx = -1;
  35. Bally = 30;
  36. int tmpX,tmpY;
  37. switch (lvlnum)
  38. {
  39. case(1):
  40. BinX = 12;
  41. BinY = 10;
  42. break;
  43. case(2):
  44. case(3):
  45. case(4):
  46. case(5):
  47. case(6):
  48. tmpX = rand() % 17;
  49. tmpY = rand() % 10;
  50. while (3 >tmpX)
  51. {
  52. tmpX = rand()%17;
  53. }
  54. while (3 > tmpY)
  55. {
  56. tmpY = rand() % 10;
  57. }
  58. BinX = tmpX;
  59. BinY = tmpY;
  60. break;
  61. case(7):
  62. BinX = 2;
  63. BinY = 7;
  64. windForce = -2;
  65. printf("Ein Sturm zieht auf!");
  66. sleep(5);
  67. break;
  68. case(8):
  69. BinX = 17;
  70. BinY = 10;
  71. windForce = 2;
  72. break;
  73. case(9):
  74. windForce = -1;
  75. BinX = 8;
  76. BinY = 9;
  77. wallX = 4;
  78. wallLength = 4;
  79. wallY = 20;
  80. break;
  81. case(10):
  82. windForce = 3;
  83. BinX = 18;
  84. BinY = 15;
  85. wallX = 12;
  86. wallLength = 5;
  87. wallY = 20;
  88. break;
  89. case(11):
  90. system("clear");
  91. Generatefield();
  92. addScoreboard();
  93. sortScoreboard();
  94. exit(0);
  95. break;
  96. default:
  97. exit(0);
  98. }
  99. getStartPosition();
  100. printf("Der Ball wird geworfen!!!");
  101. sleep(1);
  102. }
  103. int main()
  104. {
  105. int ballX = 7;
  106. int BallY = 23;
  107. while (1)
  108. {
  109. system("clear");
  110. for (int i = 0; i < 23; i++)
  111. {
  112. for (int j = 0; j < 29; j++)
  113. {
  114. field[i][j] = ' ';
  115. }
  116. }
  117. field[ballX][BallY -= 1] = 'O';
  118. buildBin(10,10);
  119. for (int i = 0; i < 29; i++)
  120. {
  121. printf("|");
  122. for (int j = 0; j < 23; j++)
  123. {
  124. if (i == 0 || i == 29 - 1 || i == 2)
  125. printf("=");
  126. else
  127. printf("%c", field[j][i]);
  128. }
  129. printf("|");
  130. printf("\n");
  131. }
  132. getStartPosition();
  133. sleep(1);
  134. }
  135. return 0;
  136. }
  137. void getStartPosition()
  138. {
  139. while (Ballx == -1)
  140. {
  141. for (int i = 2, j = 0; i <= 20; i += 2, j++)
  142. {
  143. field[i][Bally] = j + '0';
  144. }
  145. Generatefield();
  146. //printf("W\x84\hle die position des Balls (0-9):\n");
  147. printf("W\x84\hle die position des Balls (0-9):\n");
  148. scanf("%d", &Ballx);
  149. if (Ballx < 0 || 9 < Ballx)
  150. {
  151. Ballx = -1;
  152. continue;
  153. }
  154. Ballx = (Ballx + 1);
  155. }
  156. }
  157. void clearField()
  158. {
  159. for (int i = 0; i <= fieldWidth; i++)
  160. {
  161. for (int j = 0; j <= fieldHeigth; j++)
  162. {
  163. field[i][j] = ' ';
  164. }
  165. }
  166. }
  167. void Generatefield() {
  168. system("clear");
  169. buildBin(BinX, BinY);
  170. if (ScorePoints < 0)
  171. ScorePoints = 0;
  172. int tmp = ScorePoints;
  173. field[12][1] = '0' + tmp % 10;
  174. tmp /= 10;
  175. field[11][1] = '0' + tmp % 10;
  176. tmp /= 10;
  177. field[10][1] = '0' + tmp % 10;
  178. field[3][1] = lifeCount < 3 ? 'X' : 'O';
  179. field[2][1] = lifeCount < 2 ? 'X' : 'O';
  180. field[3][1] = lifeCount < 3 ? 'X' : 'O';
  181. if (windForce != 0)
  182. {
  183. field[19][1] = windForce < 0 ? '<' : '>';
  184. field[20][1] = windForce < 0 ? (windForce * -1 + '0') : (windForce + '0');
  185. }
  186. if (wallX > 0 && wallY > 0 && wallLength == 1)
  187. {
  188. for (int i = wallX; i < +wallX + wallLength; i++)
  189. {
  190. field[i][wallY] = '_';
  191. }
  192. }
  193. if (lvlnumber > 6 && windIntervall % 2 == 0)
  194. {
  195. windForce < 0 ? (Ballx -= windForce * -5) : (Ballx += windForce);
  196. }
  197. }
  198. void addScoreboard()
  199. {
  200. int ScorePoints;
  201. //Die txt wird geöffnet
  202. FILE* fp = fopen("ScoreBoard.txt", "a+");
  203. char name[255];
  204. printf("Bitte gib deinen Namen ein:\n");
  205. scanf("%s", name);
  206. fprintf(fp, "%s %d\n", name, ScorePoints);
  207. fclose(fp);
  208. }
  209. int checkBallPosition()
  210. {
  211. if (BinY + 24 == Bally && (Ballx == BinX || Ballx == BinX + 2 || Ballx == BinX - 2))
  212. {
  213. return 1;
  214. }
  215. else if (BinY > Bally || field[Ballx][Bally - 1] == '_' || Ballx > fieldWidth || Ballx < 0)
  216. {
  217. return 2;
  218. }
  219. }
  220. void sortScoreboard()
  221. {
  222. //Öffnet die Textdatei oder erstellt sie wenn keine existiert
  223. FILE* fp;
  224. fp = fopen("ScoreBoard.txt", "a+");
  225. if (fp == NULL)
  226. {
  227. printf("Datei konnte nicht geoeffnet werden.\n");
  228. }
  229. else
  230. {
  231. system("clear");
  232. FILE *file = fopen("ScoreBoard.txt", "r");
  233. char line[1000];
  234. int numberOfLines = 0;
  235. //Die Textdatei wird Zeile für Zeile eingelesen und in die Strukturliste eingefügt
  236. for (int j = 0; fgets(line, sizeof line, file) != NULL && j <= 10; j++)
  237. {
  238. char* playertmp = strtok(line, " ");
  239. strcpy(playerlist[j].Name, playertmp);
  240. playertmp = strtok(NULL, " ");
  241. int playerPoints = atoi(playertmp);
  242. playerlist[j].Points = playerPoints;
  243. numberOfLines = j;
  244. sleep(100);
  245. }
  246. struct Player temp;
  247. for (int i = 0; i <= numberOfLines; i++)
  248. {
  249. for (int j = 0; j < (numberOfLines - i); j++)
  250. {
  251. if (playerlist[i].Points < playerlist[i + 1].Points)
  252. {
  253. temp = playerlist[i];
  254. playerlist[i] = playerlist[i + 1];
  255. playerlist[i + 1] = temp;
  256. }
  257. }
  258. }
  259. fclose(fp);
  260. printf(" Scoreboard:\n\n");
  261. for (int j = 0; j < numberOfLines; j++)
  262. {
  263. printf("%d. %s %s %d\n", j + 1, (j < 9) ? " " : " ", playerlist[j].Name, playerlist[j].Points);
  264. sleep(500);
  265. }
  266. FILE* fp = fopen("ScoreBoard.txt", "w");
  267. for (int i = 0; i < numberOfLines; i++)
  268. {
  269. fprintf(fp, "%s %d\n", playerlist[i].Name, playerlist[i].Points);
  270. }
  271. fclose(fp);
  272. }
  273. }