From d8a3fee98738fcb7d3f31b998e4946eb756de997 Mon Sep 17 00:00:00 2001 From: DarthMooMancer Date: Sun, 5 Oct 2025 21:06:33 -0400 Subject: [PATCH] wip --- compile_commands.json | 1 - include/elements.hpp | 45 ++++++++++++++-------------- include/globals.hpp | 6 ++-- include/input.hpp | 3 +- include/window.hpp | 10 ++++--- src/elements.cpp | 40 +++++++++++++------------ src/input.cpp | 32 +++++++------------- src/main.cpp | 68 +++++++++++++++++++++++-------------------- src/window.cpp | 62 ++++++++++++++++++++++----------------- 9 files changed, 138 insertions(+), 129 deletions(-) delete mode 120000 compile_commands.json diff --git a/compile_commands.json b/compile_commands.json deleted file mode 120000 index c52ad08..0000000 --- a/compile_commands.json +++ /dev/null @@ -1 +0,0 @@ -compile_commands.json \ No newline at end of file diff --git a/include/elements.hpp b/include/elements.hpp index 59fbbbf..aa3b78b 100644 --- a/include/elements.hpp +++ b/include/elements.hpp @@ -2,32 +2,33 @@ #define ELEMENTS_HPP struct Point { - Point(int row, int col) : m_row(row), m_col(col) {}; + Point(int row, int col, char symbol) : m_row(row), m_col(col), m_symbol(symbol) {}; int m_row; int m_col; + char m_symbol; void assign(int row, int col); }; -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; -}; - -struct Border { - Border(int row, int col, char symbol) : m_pos(row, col), m_symbol(symbol) {}; - char m_symbol; - 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]); -}; +// 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; +// }; +// +// struct Border { +// Border(int row, int col, char symbol) : m_pos(row, col), m_symbol(symbol) {}; +// char m_symbol; +// 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/globals.hpp b/include/globals.hpp index 8331941..dd317c3 100644 --- a/include/globals.hpp +++ b/include/globals.hpp @@ -1,7 +1,7 @@ #ifndef GLOBALS_HPP #define GLOBALS_HPP - -constexpr int ROW = 5; -constexpr int COL = 5; +#define ROW 5 +#define COL 5 +#define FMPS 150 #endif diff --git a/include/input.hpp b/include/input.hpp index 45a78d0..7eef53c 100644 --- a/include/input.hpp +++ b/include/input.hpp @@ -4,7 +4,8 @@ struct Input { int _getch = 0; - void get_input(bool &running, Tile (&tile_list)[9], Player &player_one, Player &player_two); + // void get_input(bool &running, Tile (&tile_list)[9], Player &player_one, Player &player_two); + void get_input(bool &running); }; #endif diff --git a/include/window.hpp b/include/window.hpp index 2a2b178..ec11205 100644 --- a/include/window.hpp +++ b/include/window.hpp @@ -1,14 +1,16 @@ #ifndef WINDOW_HPP #define WINDOW_HPP -#include #include "globals.hpp" #include "elements.hpp" 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); + Point* m_board[ROW][COL] = {}; + // void terminate(Tile (&tile_list)[9], bool &running); + + void clear_display(); + void update_display(Point** buffer); + void draw_display(int fps); }; #endif diff --git a/src/elements.cpp b/src/elements.cpp index ee89943..ca97a9c 100644 --- a/src/elements.cpp +++ b/src/elements.cpp @@ -1,21 +1,25 @@ #include "elements.hpp" -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) { - if(tile_list[i].m_symbol == m_symbol) { - m_win = true; - } - } - } - if(tile_list[0].m_symbol == tile_list[4].m_symbol && tile_list[4].m_symbol == tile_list[8].m_symbol) { - if(tile_list[0].m_symbol == m_symbol) { - m_win = true; - } - } - if(tile_list[2].m_symbol == tile_list[4].m_symbol && tile_list[4].m_symbol == tile_list[6].m_symbol) { - if(tile_list[2].m_symbol == m_symbol) { - m_win = true; - } - } +void cleanup(Point** buffer) { + } + +// 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) { +// if(tile_list[i].m_symbol == m_symbol) { +// m_win = true; +// } +// } +// } +// if(tile_list[0].m_symbol == tile_list[4].m_symbol && tile_list[4].m_symbol == tile_list[8].m_symbol) { +// if(tile_list[0].m_symbol == m_symbol) { +// m_win = true; +// } +// } +// if(tile_list[2].m_symbol == tile_list[4].m_symbol && tile_list[4].m_symbol == tile_list[6].m_symbol) { +// if(tile_list[2].m_symbol == m_symbol) { +// m_win = true; +// } +// } +// } diff --git a/src/input.cpp b/src/input.cpp index fd76b00..1241066 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -1,17 +1,18 @@ #include #include "input.hpp" -void _switch_turn(int favor, Player &player_one, Player &player_two) { - if(favor == 1) { - player_one.m_turn = true; - player_two.m_turn = false; - } else if(favor == 2) { - player_one.m_turn = false; - player_two.m_turn = true; - } -} +// void _switch_turn(int favor, Player &player_one, Player &player_two) { +// if(favor == 1) { +// player_one.m_turn = true; +// player_two.m_turn = false; +// } else if(favor == 2) { +// player_one.m_turn = false; +// player_two.m_turn = true; +// } +// } -void Input::get_input(bool &running, Tile (&tile_list)[9], Player &player_one, Player &player_two) { +// void Input::get_input(bool &running, Tile (&tile_list)[9], Player &player_one, Player &player_two) { +void Input::get_input(bool &running) { while(running) { initscr(); cbreak(); @@ -23,16 +24,5 @@ void Input::get_input(bool &running, Tile (&tile_list)[9], Player &player_one, P if(_getch == 113) { running = false; } - if(!tile_list[_getch - 49]._delete) { - if(player_one.m_turn) { - tile_list[_getch - 49].m_symbol = player_one.m_symbol; - _switch_turn(2, player_one, player_two); - } else if(player_two.m_turn) { - tile_list[_getch - 49].m_symbol = player_two.m_symbol; - _switch_turn(1, player_one, player_two); - } - tile_list[_getch - 49]._delete = true; - _getch = 48; - } } } diff --git a/src/main.cpp b/src/main.cpp index 53e23dc..9a12a04 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,44 +7,48 @@ int main() { Input input; Window window; - Player player_one('x', true); - Player player_two('o', false); + // Player player_one('x', true); + // Player player_two('o', false); bool running = true; int count = 0; + Point* buffer[ROW * COL] = {}; - 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) - }; + // 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, '-'), + // Border(2, 1, '|'), Border(2, 3, '|'), + // Border(3, 0, '-'), Border(3, 1, '+'), Border(3, 2, '-'), Border(3, 3, '+'), Border(3, 4, '-'), + // Border(4, 1, '|'), Border(4, 3, '|'), + // }; - 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, '-'), - Border(2, 1, '|'), Border(2, 3, '|'), - Border(3, 0, '-'), Border(3, 1, '+'), Border(3, 2, '-'), Border(3, 3, '+'), Border(3, 4, '-'), - Border(4, 1, '|'), Border(4, 3, '|'), - }; - - std::thread input_thread(&Input::get_input, &input, std::ref(running), std::ref(tile_list), std::ref(player_one), std::ref(player_two)); + std::thread input_thread([&] { input.get_input(running); } ); while (running) { - 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; - } + window.clear_display(); + window.update_display(buffer); + window.draw_display(150); + // 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 5a77679..32d6d7d 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3,38 +3,46 @@ #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::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::clear_display() { + for(int i = 0; i < ROW; i++) { + for(int j = 0; j < COL; j++) { + m_board[i][j] = nullptr; + } } } -void Window::update_display(Tile (&tile_list)[9], Border (&border_list)[16]) { - for(std::array &row : m_board) { row.fill('.'); } - - for(int i = 0; i < 9; i++) { - m_board[tile_list[i].m_pos.m_row][tile_list[i].m_pos.m_col] = tile_list[i].m_symbol; - } - for(int i = 0; i < 16; i++) { - m_board[border_list[i].m_pos.m_row][border_list[i].m_pos.m_col] = border_list[i].m_symbol; - } - - std::cout << "\033[H" << std::flush; - for(std::array &row : m_board) { - for(char &col : row) { - std::cout << col << " "; +void Window::draw_display(int milliseconds) { + std::cout << "\033[H" << std::flush; // Clear screen + for(int i = 0; i < ROW; i++) { + for(int j = 0; j < ROW; j++) { + if(m_board[i][j] == nullptr) { std::cout << ". "; } + if(m_board[i][j] != nullptr) { std::cout << m_board[i][j]->m_symbol << " "; } } std::cout << "\r\n"; } - std::this_thread::sleep_for(std::chrono::milliseconds(200)); // 1000 / fps; 200ms = 5fps + std::this_thread::sleep_for(std::chrono::milliseconds((int) (milliseconds))); // 1000 / fps; 200ms = 5fps +} + +void Window::update_display(Point** buffer) { + for(int i = 0; i < ROW * COL; i++) { + if(buffer[i] != nullptr) { + m_board[buffer[i]->m_row][buffer[i]->m_col] = buffer[i]; + } + } }