README
This commit is contained in:
@@ -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.
|
||||
+3
-3
@@ -3,12 +3,13 @@
|
||||
|
||||
#include <memory>
|
||||
#include <array>
|
||||
#include <globals.hpp>
|
||||
|
||||
constexpr int ROW = 5;
|
||||
constexpr int COL = 5;
|
||||
|
||||
struct Window {
|
||||
Window();
|
||||
std::array<std::array<char, COL>, 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);
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
#ifndef GLOBALS_HPP
|
||||
#define GLOBALS_HPP
|
||||
|
||||
constexpr int ROW = 5;
|
||||
constexpr int COL = 5;
|
||||
|
||||
#endif
|
||||
+2
-6
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user