diff --git a/ttt-gui.cpp b/ttt-gui.cpp index 1a340ad..61a6bb5 100644 --- a/ttt-gui.cpp +++ b/ttt-gui.cpp @@ -6,7 +6,37 @@ 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 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) { SDL_RenderClear(renderer); @@ -40,8 +76,8 @@ void render(SDL_Renderer *renderer, SDL_Texture *bg) { string row = rows[i-1]; if (row != "-") { - int posX = 200; - int posY = WINDOW_SIZE / ceil(i/3); + int posX = ((i - 1) % 3) * (WINDOW_SIZE / 3) + 32; + int posY = ((i - 1) / 3) * (WINDOW_SIZE / 3) + 32; cout << posX << " " << posY << "\n"; @@ -75,6 +111,9 @@ int main() { while (gameOpen) { SDL_Event event; while (SDL_PollEvent(&event)) { + if (playerWon("X") || playerWon("O")) state = 1; + + if (event.type == SDL_QUIT) gameOpen = false; if (event.type == SDL_MOUSEBUTTONUP) { int mouseX; @@ -86,11 +125,19 @@ int main() { int pos = (row - 1) * 3 + column; - rows[pos-1] = "X"; - render(renderer, background); + if (rows[pos-1] == "-") { + rows[pos-1] = "X"; + render(renderer, background); + SDL_Delay(500); + generateOpponent(); + } } - render(renderer, background); + if (state == 1) { + renderEnd(renderer); + } else { + render(renderer, background); + } } } } \ No newline at end of file