1#ifndef NUMERICALTICTACTOE_H
2#define NUMERICALTICTACTOE_H
14 set<int> used_numbers;
16 bool check_sum(
int a,
int b,
int c) {
17 return (a + b + c == 15);
22 for (
int i = 0; i < 3; i++) {
23 for (
int j = 0; j < 3; j++) {
30 int x = move->
get_x();
31 int y = move->
get_y();
34 if (x < 0 || x >= 3 || y < 0 || y >= 3) {
35 cout <<
"Invalid position! Use 0-2.\n";
39 if (
board[x][y] != 0) {
40 cout <<
"Cell already occupied!\n";
44 if (number < 1 || number > 9) {
45 cout <<
"Number must be 1-9!\n";
49 if (used_numbers.find(number) != used_numbers.end()) {
50 cout <<
"Number " << number <<
" already used!\n";
55 if ((
n_moves % 2 == 0 && number % 2 == 0) ||
56 (
n_moves % 2 == 1 && number % 2 == 1)) {
57 cout <<
"Wrong number type! Player " << (
n_moves % 2 == 0 ?
"1" :
"2")
58 <<
" must use " << (
n_moves % 2 == 0 ?
"odd" :
"even") <<
" number.\n";
63 used_numbers.insert(number);
70 for (
int i = 0; i < 3; i++) {
76 for (
int j = 0; j < 3; j++) {
125 << (player->
get_symbol() == 1 ?
"Odd" :
"Even")
126 <<
" numbers), enter your move (row, column, and number): ";
127 cin >> x >> y >> number;
137 number = (rand() % 5) * 2 + 1;
140 number = (rand() % 4) * 2 + 2;
143 cout << player->
get_name() <<
" chooses position (" << x <<
", " << y
144 <<
") with number " << number <<
"\n";
PlayerType
Represents the type of player in the game.
Definition BoardGame_Classes.h:24
@ HUMAN
A human player.
Definition BoardGame_Classes.h:25
@ COMPUTER
A computer-controlled player.
Definition BoardGame_Classes.h:26
int n_moves
Definition BoardGame_Classes.h:45
Board(int rows, int columns)
Definition BoardGame_Classes.h:51
vector< vector< int > > board
Definition BoardGame_Classes.h:44
Represents a single move in a board game.
Definition BoardGame_Classes.h:100
T get_symbol() const
Get the move symbol.
Definition BoardGame_Classes.h:116
int get_y() const
Get column index.
Definition BoardGame_Classes.h:113
int get_x() const
Get row index.
Definition BoardGame_Classes.h:110
bool is_win(Player< int > *player) override
Check if a player has won.
Definition NumericalTicTacToe.h:68
bool is_draw(Player< int > *player) override
Check if the game ended in a draw.
Definition NumericalTicTacToe.h:93
bool game_is_over(Player< int > *player) override
Check if the game is over.
Definition NumericalTicTacToe.h:97
NumericalTicTacToeBoard()
Definition NumericalTicTacToe.h:21
bool is_lose(Player< int > *player) override
Check if a player has lost.
Definition NumericalTicTacToe.h:89
bool update_board(Move< int > *move) override
Update the board with a new move.
Definition NumericalTicTacToe.h:29
NumericalTicTacToePlayer(string name, int symbol)
Definition NumericalTicTacToe.h:105
NumericalTicTacToeRandomPlayer(int symbol)
Definition NumericalTicTacToe.h:111
NumericalTicTacToeUI()
Definition NumericalTicTacToe.h:119
Move< int > * get_move(Player< int > *player) override
Ask the user (or AI) to make a move.
Definition NumericalTicTacToe.h:121
Base template for all players (human or AI).
Definition BoardGame_Classes.h:126
int symbol
Definition BoardGame_Classes.h:130
PlayerType get_type() const
Get player type (e.g., 'H' or 'C').
Definition BoardGame_Classes.h:147
Player(string n, int s, PlayerType t)
Definition BoardGame_Classes.h:137
string get_name() const
Get the player's name.
Definition BoardGame_Classes.h:144
string name
Definition BoardGame_Classes.h:128
T get_symbol() const
Get the player's symbol.
Definition BoardGame_Classes.h:150
UI(string message, int cell_display_width)
Definition BoardGame_Classes.h:196