Initial commit

This commit is contained in:
2023-01-26 17:21:14 +01:00
commit fe671b8682
17 changed files with 1011 additions and 0 deletions

42
board-shared/src/game.rs Normal file
View File

@@ -0,0 +1,42 @@
use crate::board::Board;
use crate::tile::{Digit, Operator, Tile};
#[derive(Default, Debug, Clone, PartialEq)]
pub struct Game {
pub board: Board,
pub in_hand: Hand,
}
#[derive(Default, Debug, Clone, PartialEq)]
pub struct Hand {
pub tiles: Vec<Tile>,
}
impl Hand {
pub fn count_missing_operators(&self) -> usize {
4usize.saturating_sub(
self.tiles
.iter()
.filter(|tile| matches!(tile, Tile::Operator(_)))
.count(),
)
}
pub fn count_missing_numbers(&self) -> usize {
8usize.saturating_sub(
self.tiles
.iter()
.filter(|tile| matches!(tile, Tile::Digit(_)))
.count(),
)
}
pub fn complete(&mut self) {
for _ in 0..self.count_missing_operators() {
self.tiles.push(Tile::Operator(Operator::Add));
}
for n in 0..self.count_missing_numbers() {
self.tiles.push(Tile::Digit(Digit::new((n % 10) as u8)));
}
}
}