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.

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