#include #include #define fieldWidth 23 #define fieldHeigth 29 #pragma region VarDeclaration int wallX = 0; int wallY = 0; int wallLength = 0; int binX; int binY = 10; char field[fieldWidth][fieldHeigth]; int windForce = 0; int ScorePoints = 0; int lifeCount = 3; int ballX = -1; int ballY = 27; int windIntervall = 0; int lvlnumber = 1; #pragma endregion #pragma region FunctionDeclaration void addScoreboard(); void clearField(); void Generatefield(); void sortScoreboard(); void buildBin(int width, int height); void getStartPosition(); int checkBallPosition(); #pragma endregion struct Player { char Name[50]; int Points; }playerlist[11]; void buildBin(int width, int heigth) { field[width][heigth] = 'V'; field[width+1][heigth+1] = '\\'; field[width+2][heigth+2] = '\\'; field[width-1][heigth+1] = '/'; field[width-2][heigth+2] = '/'; field[width][heigth+1] = ' '; } void loadLevel(int lvlnum) { clearField(); ballX = -1; ballY = 27; int tmpX,tmpY; switch (lvlnum) { case(1): binX = 12; binY = 10; break; case(2): case(3): case(4): case(5): case(6): tmpX = rand() % 19; tmpY = rand() % 12; while (5 >tmpX) { tmpX = rand()%19; } while (5 > tmpY) { tmpY = rand() % 12; } binX = tmpX; binY = tmpY; break; case(7): binX = 2; binY = 7; windForce = -2; printf("Ein Sturm zieht auf!\n"); sleep(3); break; case(8): binX = 19; binY = 7; windForce = 1; break; case(9): windForce = -1; binX = 8; binY = 9; wallX = 7; wallLength = 4; wallY = 17; break; case(10): windForce = 2; binX = 16; binY = 12; wallX = 11; wallLength = 4; wallY = 19; break; case(11): system("clear"); Generatefield(); addScoreboard(); sortScoreboard(); exit(0); break; default: exit(0); } getStartPosition(); printf("Der Ball wird geworfen!!!"); sleep(1); } int main() { loadLevel(lvlnumber); while (1) { clearField(); field[ballX][ballY -= 1] = 'O'; Generatefield(); int Ball_In_Bin = checkBallPosition(); switch (Ball_In_Bin) { case (1): ScorePoints += 50; loadLevel(++lvlnumber); break; case(2): ScorePoints -= 5; lifeCount--; if (lifeCount < 1) { if (lvlnumber == 1) { char choice = ' '; printf("Scheint so als wäre das Spiel eine Nummer zu groß für dich!\n"); printf("Willst du einen Leichteren Modus Starten?\n[J]a/[N]ein\n"); scanf(" %c", &choice); system("start \"\" \"https://youtu.be/dQw4w9WgXcQ\""); return 0; } addScoreboard(); sortScoreboard(); return 0; } loadLevel(lvlnumber); break; } Ball_In_Bin = 0; sleep(1); } } void getStartPosition() { while (ballX == -1) { for (int i = 2, j = 0; i <= 20; i += 2, j++) { field[i][ballY] = j + '0'; } Generatefield(); //printf("W\x84\hle die position des Balls (0-9):\n"); printf("Wähle die position des Balls (0-9):\n"); scanf("%d", &ballX); if (ballX < 0 || 9 < ballX) { ballX = -1; continue; } ballX = (ballX + 1)*2; } } void clearField() { for (int i = 0; i < fieldWidth; i++) { for (int j = 0; j < fieldHeigth; j++) { field[i][j] = ' '; } } } void Generatefield() { system("clear"); buildBin(binX, binY); if (ScorePoints < 0) ScorePoints = 0; int tmp = ScorePoints; field[12][1] = '0' + tmp % 10; tmp /= 10; field[11][1] = '0' + tmp % 10; tmp /= 10; field[10][1] = '0' + tmp % 10; field[1][1] = lifeCount < 1 ? 'X' : 'O'; field[2][1] = lifeCount < 2 ? 'X' : 'O'; field[3][1] = lifeCount < 3 ? 'X' : 'O'; if (windForce != 0) { field[19][1] = windForce < 0 ? '<' : '>'; field[20][1] = windForce < 0 ? (windForce * -1 + '0') : (windForce + '0'); } if (wallX > 0 && wallY > 0 && wallLength > 0) { for (int i = wallX; i < +wallX + wallLength; i++) { field[i][wallY] = '_'; } } if (lvlnumber > 6 && windIntervall % 2 == 0) { windForce < 0 ? (ballX -= windForce * -1) : (ballX += windForce); } windIntervall++; for (int i = 0; i < fieldHeigth; i++) { printf("|"); for (int j = 0; j < fieldWidth; j++) { if (i == 0 || i == fieldHeigth - 1 || i == 2) printf("="); else printf("%c", field[j][i]); } printf("|"); printf("\n"); } } void addScoreboard() { //Die txt wird geöffnet FILE* fp = fopen("ScoreBoard.txt", "a+"); char name[255]; printf("Bitte gib deinen Namen ein:\n"); scanf("%s", name); fprintf(fp, "%s %d\n", name, ScorePoints); fclose(fp); } int checkBallPosition() { if (binY + 2 == ballY && (ballX == binX || ballX == binX + 1 || ballX == binX - 1)) { return 1; } else if (binY + 1 >= ballY || field[ballX][ballY - 1] == '_' || ballX >= fieldWidth || ballX <= 0) { return 2; } return 0; } void sortScoreboard() { //Öffnet die Textdatei oder erstellt sie wenn keine existiert FILE* fp; fp = fopen("ScoreBoard.txt", "a+"); if (fp == NULL) { printf("Datei konnte nicht geoeffnet werden.\n"); } else { system("clear"); FILE *file = fopen("ScoreBoard.txt", "r"); char line[1000]; int numberOfLines = 0; //Die Textdatei wird Zeile für Zeile eingelesen und in die Strukturliste eingefügt for (int j = 0; fgets(line, sizeof line, file) != NULL && j <= 10; j++) { char* playertmp = strtok(line, " "); strcpy(playerlist[j].Name, playertmp); playertmp = strtok(NULL, " "); int playerPoints = atoi(playertmp); playerlist[j].Points = playerPoints; numberOfLines = j; sleep(0.1); } struct Player temp; for (int i = 0; i < numberOfLines; i++) { for (int j = 0; j < (numberOfLines - i); j++) { if (playerlist[i].Points < playerlist[i + 1].Points) { temp = playerlist[i]; playerlist[i] = playerlist[i + 1]; playerlist[i + 1] = temp; } } } fclose(fp); printf(" Scoreboard:\n\n"); for (int j = 0; j < numberOfLines; j++) { printf("%d. %s %s %d\n", j + 1, (j < 9) ? " " : " ", playerlist[j].Name, playerlist[j].Points); sleep(0.5); } FILE* fp = fopen("ScoreBoard.txt", "w"); for (int i = 0; i < numberOfLines; i++) { fprintf(fp, "%s %d\n", playerlist[i].Name, playerlist[i].Points); } fclose(fp); } }