From b96acc766e7bcdf55ee0457308bfe6824ec01e8a Mon Sep 17 00:00:00 2001 From: DarthMooMancer <107283522+DarthMooMancer@users.noreply.github.com> Date: Tue, 2 Sep 2025 14:27:18 -0400 Subject: [PATCH] fix: game can tie and also refactored element.cpp --- include/elements.hpp | 24 +++++++++--------------- include/input.hpp | 2 +- include/window.hpp | 2 ++ src/elements.cpp | 16 ---------------- src/main.cpp | 23 +++++++++++++++-------- src/window.cpp | 17 ++++++++++++++++- 6 files changed, 43 insertions(+), 41 deletions(-) diff --git a/include/elements.hpp b/include/elements.hpp index 3c60ac8..59fbbbf 100644 --- a/include/elements.hpp +++ b/include/elements.hpp @@ -1,30 +1,16 @@ #ifndef ELEMENTS_HPP #define ELEMENTS_HPP -struct Player; -struct Point; -struct Tile; -struct Border; - struct Point { - Point(); Point(int row, int col) : m_row(row), m_col(col) {}; int m_row; int m_col; void assign(int row, int col); - void to_string(); -}; - -struct Player { - Player(char symbol, bool turn) : m_symbol(symbol), m_turn(turn), m_win(false) {}; - char m_symbol; - bool m_turn; - bool m_win; - void check_line(Tile (&tile_list)[9]); }; struct Tile { Tile(int row, int col) : m_pos(row, col), m_symbol(' '), _delete(false) {}; + Tile(int row, int col, char symbol) : m_pos(row, col), m_symbol(symbol), _delete(false) {}; char m_symbol; Point m_pos; bool _delete; @@ -36,4 +22,12 @@ struct Border { Point m_pos; }; +struct Player { + Player(char symbol, bool turn) : m_symbol(symbol), m_turn(turn), m_win(false) {}; + char m_symbol; + bool m_turn; + bool m_win; + void check_line(Tile (&tile_list)[9]); +}; + #endif diff --git a/include/input.hpp b/include/input.hpp index 80ab955..45a78d0 100644 --- a/include/input.hpp +++ b/include/input.hpp @@ -7,4 +7,4 @@ struct Input { void get_input(bool &running, Tile (&tile_list)[9], Player &player_one, Player &player_two); }; -#endif // INPUT_HPP +#endif diff --git a/include/window.hpp b/include/window.hpp index efb371b..2a2b178 100644 --- a/include/window.hpp +++ b/include/window.hpp @@ -8,5 +8,7 @@ struct Window { std::array, ROW> m_board = {}; void update_display(Tile (&tile_list)[9], Border (&border_list)[16]); + void terminate(Tile (&tile_list)[9], bool &running); }; + #endif diff --git a/src/elements.cpp b/src/elements.cpp index 9bbd9d5..ee89943 100644 --- a/src/elements.cpp +++ b/src/elements.cpp @@ -1,21 +1,5 @@ -#include #include "elements.hpp" -Point::Point() { - m_row = 0; - m_col = 0; -} - -void Point::assign(int row, int col) { - m_row = row; - m_col = col; -} - -void Point::to_string() { - std::cout << "(" << m_row << ", " << m_col << ")" << std::endl; -} - - void Player::check_line(Tile (&tile_list)[9]) { for(int i = 0; i <= 6; i += 3) { if(tile_list[i].m_symbol == tile_list[i+1].m_symbol && tile_list[i+1].m_symbol == tile_list[i+2].m_symbol) { diff --git a/src/main.cpp b/src/main.cpp index 652fb80..53e23dc 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,6 @@ #include "window.hpp" #include "input.hpp" #include "elements.hpp" -#include "globals.hpp" int main() { Input input; @@ -11,12 +10,14 @@ int main() { Player player_one('x', true); Player player_two('o', false); bool running = true; + int count = 0; Tile tile_list[9] = { Tile(0, 0), Tile(0, 2), Tile(0, 4), Tile(2, 0), Tile(2, 2), Tile(2, 4), Tile(4, 0), Tile(4, 2), Tile(4, 4) }; + Border border_list[16] = { Border(0, 1, '|'), Border(0, 3, '|'), Border(1, 0, '-'), Border(1, 1, '+'), Border(1, 2, '-'), Border(1, 3, '+'), Border(1, 4, '-'), @@ -28,16 +29,22 @@ int main() { std::thread input_thread(&Input::get_input, &input, std::ref(running), std::ref(tile_list), std::ref(player_one), std::ref(player_two)); while (running) { - if(player_one.m_win) { - running = false; - std::cout << "Player 1 wins!" << std::endl; - } else if(player_two.m_win) { - running = false; - std::cout << "Player 2 wins!" << std::endl; - } + window.terminate(tile_list, running); window.update_display(tile_list, border_list); player_one.check_line(tile_list); player_two.check_line(tile_list); + if(player_one.m_win) { + running = false; + std::cout << "Game Over! Player 1 wins!" << std::endl; + } else if(player_two.m_win) { + running = false; + std::cout << "Game Over! Player 2 wins!" << std::endl; + } + if(player_one.m_turn) { + std::cout << "Current Player: " << player_one.m_symbol << std::endl; + } if(player_two.m_turn) { + std::cout << "Current Player: " << player_two.m_symbol << std::endl; + } } input_thread.join(); diff --git a/src/window.cpp b/src/window.cpp index 7d07165..5a77679 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3,6 +3,22 @@ #include #include +void Window::terminate(Tile (&tile_list)[9], bool &running) { + if(tile_list[0]._delete && tile_list[0].m_symbol != ' ' + && tile_list[1]._delete && tile_list[1].m_symbol != ' ' + && tile_list[2]._delete && tile_list[2].m_symbol != ' ' + && tile_list[3]._delete && tile_list[3].m_symbol != ' ' + && tile_list[4]._delete && tile_list[4].m_symbol != ' ' + && tile_list[5]._delete && tile_list[5].m_symbol != ' ' + && tile_list[6]._delete && tile_list[6].m_symbol != ' ' + && tile_list[7]._delete && tile_list[7].m_symbol != ' ' + && tile_list[8]._delete && tile_list[8].m_symbol != ' ') { + std::cout << "Game Over! Tie" << std::endl; + running = false; + + } +} + void Window::update_display(Tile (&tile_list)[9], Border (&border_list)[16]) { for(std::array &row : m_board) { row.fill('.'); } @@ -13,7 +29,6 @@ void Window::update_display(Tile (&tile_list)[9], Border (&border_list)[16]) { m_board[border_list[i].m_pos.m_row][border_list[i].m_pos.m_col] = border_list[i].m_symbol; } - // Refresh and draw screen std::cout << "\033[H" << std::flush; for(std::array &row : m_board) { for(char &col : row) {