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.

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