cli move checkers
This commit is contained in:
parent
68d361b562
commit
be0264f9a7
5 changed files with 120 additions and 15 deletions
|
|
@ -323,7 +323,7 @@ impl Board {
|
|||
if Some(color) != checker_color {
|
||||
return Err(Error::FieldInvalid);
|
||||
}
|
||||
self.positions[field] -= 1;
|
||||
self.positions[field - 1] -= 1;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
@ -333,7 +333,7 @@ impl Board {
|
|||
if None != checker_color && Some(color) != checker_color {
|
||||
return Err(Error::FieldInvalid);
|
||||
}
|
||||
self.positions[field] += 1;
|
||||
self.positions[field - 1] += 1;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -334,6 +334,24 @@ impl GameState {
|
|||
// State updates
|
||||
// ----------------------------------------------------------------------------------
|
||||
|
||||
pub fn init_player(&mut self, player_name: &str) -> Option<PlayerId> {
|
||||
if self.players.len() > 2 {
|
||||
println!("more than two players");
|
||||
return None;
|
||||
}
|
||||
|
||||
let player_id = self.players.len() + 1;
|
||||
println!("player_id {}", player_id);
|
||||
let color = if player_id == 1 {
|
||||
Color::White
|
||||
} else {
|
||||
Color::Black
|
||||
};
|
||||
let player = Player::new(player_name.into(), color);
|
||||
self.players.insert(player_id as PlayerId, player);
|
||||
Some(player_id as PlayerId)
|
||||
}
|
||||
|
||||
fn add_player(&mut self, player_id: PlayerId, player: Player) {
|
||||
self.players.insert(player_id, player);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ mod game;
|
|||
pub use game::{EndGameReason, GameEvent, GameState, Stage};
|
||||
|
||||
mod player;
|
||||
pub use player::{Player, Color};
|
||||
pub use player::{Color, Player, PlayerId};
|
||||
|
||||
mod error;
|
||||
pub use error::Error;
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
use std::fmt;
|
||||
|
||||
|
||||
// This just makes it easier to dissern between a player id and any ol' u64
|
||||
pub type PlayerId = u64;
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
#[derive(Copy, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub enum Color {
|
||||
White,
|
||||
Black,
|
||||
|
|
@ -23,7 +22,6 @@ pub struct Player {
|
|||
}
|
||||
|
||||
impl Player {
|
||||
|
||||
pub fn new(name: String, color: Color) -> Self {
|
||||
Player {
|
||||
name,
|
||||
|
|
@ -36,9 +34,11 @@ impl Player {
|
|||
}
|
||||
|
||||
pub fn to_bits_string(&self) -> String {
|
||||
format!("{:0>4b}{:0>4b}{:b}{:b}", self.points, self.holes, self.can_bredouille as u8, self.can_big_bredouille as u8)
|
||||
format!(
|
||||
"{:0>4b}{:0>4b}{:b}{:b}",
|
||||
self.points, self.holes, self.can_bredouille as u8, self.can_big_bredouille as u8
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// Represents a player in the game.
|
||||
|
|
@ -97,9 +97,15 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn test_to_bits_string() {
|
||||
let player = Player { name: "Edgar".into(), color: Color::White, points: 11, holes: 3, can_bredouille: true, can_big_bredouille: false };
|
||||
let player = Player {
|
||||
name: "Edgar".into(),
|
||||
color: Color::White,
|
||||
points: 11,
|
||||
holes: 3,
|
||||
can_bredouille: true,
|
||||
can_big_bredouille: false,
|
||||
};
|
||||
println!("{}", player.to_bits_string());
|
||||
assert!(player.to_bits_string() == "1011001110");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue