wip points rules

This commit is contained in:
Henri Bourcereau 2024-05-20 19:04:46 +02:00
parent 7790c07dcc
commit aff489f134
7 changed files with 62 additions and 10 deletions

View file

@ -1,7 +1,8 @@
//! # Play a TricTrac Game
use crate::board::{Board, CheckerMove, Field, EMPTY_MOVE};
use crate::board::{Board, CheckerMove};
use crate::dice::Dice;
use crate::game_rules_moves::{MoveError, MoveRules};
use crate::game_rules_moves::MoveRules;
use crate::game_rules_points::PointsRules;
use crate::player::{Color, Player, PlayerId};
use log::error;
@ -59,6 +60,15 @@ impl fmt::Display for GameState {
}
}
impl PointsRules for GameState {
fn board(&self) -> &Board {
&self.board
}
fn dice(&self) -> &Dice {
&self.dice
}
}
impl MoveRules for GameState {
fn board(&self) -> &Board {
&self.board
@ -236,10 +246,7 @@ impl GameState {
return false;
}
}
Mark {
player_id,
points: _,
} => {
Mark { player_id, points } => {
// Check player exists
if !self.players.contains_key(player_id) {
return false;
@ -248,6 +255,12 @@ impl GameState {
if self.active_player_id != *player_id {
return false;
}
// Check points are correct
let rules_points: u8 = self.get_points().iter().map(|r| r.0).sum();
if rules_points != *points {
return false;
}
}
Move { player_id, moves } => {
// Check player exists

View file

@ -0,0 +1,16 @@
use crate::board::Board;
use crate::dice::Dice;
#[derive(std::cmp::PartialEq, Debug)]
pub enum PointsRule {
FilledQuarter,
}
pub trait PointsRules {
fn board(&self) -> &Board;
fn dice(&self) -> &Dice;
fn get_points(&self) -> Vec<(u8, PointsRule)> {
Vec::new()
}
}

View file

@ -1,6 +1,8 @@
mod game;
mod game_rules_moves;
mod game_rules_points;
pub use game::{EndGameReason, GameEvent, GameState, Stage, TurnStage};
pub use game_rules_points::PointsRules;
mod player;
pub use player::{Color, Player, PlayerId};