pub mod gameboard;
pub mod game_outcome;
pub mod ui;
pub mod ai;
pub mod player_type {
use crate::ai::AiPlayer;
#[derive(Default, Debug, PartialEq)]
pub enum PlayerType {
#[default]
Human,
AI(AiPlayer)
}
}
pub mod active_player{
use crate::gameboard::BoardSpace;
#[derive(PartialEq, Eq, Clone)]
pub enum ActivePlayer {
PlayerX,
PlayerO
}
impl ActivePlayer {
pub fn switch(&mut self)
{
*self = self.opposite();
}
pub fn opposite(&self) -> Self
{
match self {
ActivePlayer::PlayerO => ActivePlayer::PlayerX,
ActivePlayer::PlayerX => ActivePlayer::PlayerO
}
}
pub fn get_char(&self) -> char
{
match self {
ActivePlayer::PlayerO => 'O',
ActivePlayer::PlayerX => 'X'
}
}
pub fn get_board_space(&self) -> BoardSpace
{
match self {
ActivePlayer::PlayerX => BoardSpace::X,
ActivePlayer::PlayerO => BoardSpace::O
}
}
}
}
mod game_settings{
#[derive(Default)]
pub enum GameMode{
#[default]
Classic,
Reverse
}
#[derive(Default, PartialEq, Eq)]
pub enum GameAutoquitMode {
#[default]
Unlimited,
GameNumberLimit,
NonDrawNumberLimit,
ScoreNumberLimit
}
}