Updated the ttt-gui.cpp

This commit is contained in:
Mathias Wagner 2023-10-02 12:48:19 +02:00
parent b5695210b0
commit 2532458f7b
Signed by: Mathias
GPG Key ID: B8DC354B0A1F5B44

View File

@ -6,7 +6,37 @@
using namespace std; using namespace std;
string rows[9] = {"-", "-", "-","-", "-", "-","-", "-", "-"}; int state = 0; // 0 = ingame, 1 = end
string rows[9] = {"-", "-", "-",
"-", "-", "-",
"-", "-", "-"};
bool playerWon(string character) {
for (int i = 0; i < 9; i += 3) {
if (rows[i] == character && rows[i + 1] == character && rows[i + 2] == character) return true;
}
for (int i = 0; i < 3; i++) {
if (rows[i] == character && rows[i + 3] == character && rows[i + 6] == character) return true;
}
if (rows[0] == character && rows[4] == character && rows[8] == character) return true;
if (rows[2] == character && rows[4] == character && rows[6] == character) return true;
return false;
}
void generateOpponent() {
int random = rand() % 10;
if (rows[random] != "-") {
generateOpponent();
return;
}
rows[random] = "O";
}
int getBoardPosition(int position) { int getBoardPosition(int position) {
int windowThird = WINDOW_SIZE / 3; int windowThird = WINDOW_SIZE / 3;
@ -16,6 +46,12 @@ int getBoardPosition(int position) {
} }
} }
void renderEnd(SDL_Renderer *renderer) {
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
}
void render(SDL_Renderer *renderer, SDL_Texture *bg) { void render(SDL_Renderer *renderer, SDL_Texture *bg) {
SDL_RenderClear(renderer); SDL_RenderClear(renderer);
@ -40,8 +76,8 @@ void render(SDL_Renderer *renderer, SDL_Texture *bg) {
string row = rows[i-1]; string row = rows[i-1];
if (row != "-") { if (row != "-") {
int posX = 200; int posX = ((i - 1) % 3) * (WINDOW_SIZE / 3) + 32;
int posY = WINDOW_SIZE / ceil(i/3); int posY = ((i - 1) / 3) * (WINDOW_SIZE / 3) + 32;
cout << posX << " " << posY << "\n"; cout << posX << " " << posY << "\n";
@ -75,6 +111,9 @@ int main() {
while (gameOpen) { while (gameOpen) {
SDL_Event event; SDL_Event event;
while (SDL_PollEvent(&event)) { while (SDL_PollEvent(&event)) {
if (playerWon("X") || playerWon("O")) state = 1;
if (event.type == SDL_QUIT) gameOpen = false; if (event.type == SDL_QUIT) gameOpen = false;
if (event.type == SDL_MOUSEBUTTONUP) { if (event.type == SDL_MOUSEBUTTONUP) {
int mouseX; int mouseX;
@ -86,11 +125,19 @@ int main() {
int pos = (row - 1) * 3 + column; int pos = (row - 1) * 3 + column;
if (rows[pos-1] == "-") {
rows[pos-1] = "X"; rows[pos-1] = "X";
render(renderer, background); render(renderer, background);
SDL_Delay(500);
generateOpponent();
}
} }
if (state == 1) {
renderEnd(renderer);
} else {
render(renderer, background); render(renderer, background);
} }
} }
}
} }