diff --git a/README.md b/README.md new file mode 100644 index 0000000..be732fa --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# Tic-Tac-Toe + +A simple terminal-based Tic-Tac-Toe game. + +## Build + +To build the game, run the following commands: + +```bash +cmake -S . -B build && cmake --build build +``` + +## Run + +To run the game, execute the following command from the `build` directory: + +```bash +./build/tic_tac_toe +``` + +## How to Play + +- Use the numbers 1-9 on your keyboard to select a cell on the board. +- The numbers correspond to the cells as follows: + +``` +1 | 2 | 3 +--+---+-- +4 | 5 | 6 +--+---+-- +7 | 8 | 9 +``` + +- Press 'q' to quit the game at any time. + +## About + +- This is a simple implementation of the classic Tic-Tac-Toe game. +- It is written in C++23. +- It uses the `ncurses` library to render the game in the terminal. diff --git a/include/engine.hpp b/include/engine.hpp index 3ad027a..7897d86 100644 --- a/include/engine.hpp +++ b/include/engine.hpp @@ -3,12 +3,13 @@ #include #include -#include + +constexpr int ROW = 5; +constexpr int COL = 5; struct Window { Window(); std::array, ROW> view; - void clear_display(); void draw_display(); }; @@ -40,7 +41,6 @@ private: Player *temp; GameState() : player1('x'), player2('o'), temp { &player1 } {}; } state; - void set_player(); bool process_input(); bool exit_code(); bool check_line(char id); diff --git a/include/globals.hpp b/include/globals.hpp deleted file mode 100644 index 8331941..0000000 --- a/include/globals.hpp +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef GLOBALS_HPP -#define GLOBALS_HPP - -constexpr int ROW = 5; -constexpr int COL = 5; - -#endif diff --git a/src/engine.cpp b/src/engine.cpp index 8bdb713..1e15bdc 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -88,18 +88,14 @@ bool Engine::process_input() { index = ch - '1'; if(win->view[map[index].y][map[index].x] == ' ') { win->view[map[index].y][map[index].x] = state.temp->id; - set_player(); + if(state.temp->id == 'x') { state.temp = &state.player2; } + else if(state.temp->id == 'o') { state.temp = &state.player1; } } } } return true; } -void Engine::set_player() { - if(state.temp->id == 'x') { state.temp = &state.player2; } - else if(state.temp->id == 'o') { state.temp = &state.player1; } -} - bool Engine::check_line(char id) { for(int i : std::ranges::views::iota(0, COL)) { if(ROW % 2 != 0) continue;