Implement basic setup of the checkerboard.

This commit is contained in:
Dorian 2019-03-01 09:04:11 -05:00
parent f20aa6989c
commit 5e24c02cfb
1 changed files with 76 additions and 5 deletions

View File

@ -1,15 +1,86 @@
enum Token { use std::fmt;
LightMan,
pub enum Piece {
LightPawn,
LightKing, LightKing,
DarkPawn,
DarkKing, DarkKing,
DarkMan,
} }
enum Space { pub enum BoardTile {
Empty, Empty,
Token, Piece(Piece),
} }
pub enum BoardSize {
American,
International,
Canadian,
}
impl BoardSize {
fn get_size(&self) -> u32 {
match &self {
BoardSize::American => 8,
BoardSize::International => 10,
BoardSize::Canadian => 12,
}
}
}
pub struct Board {
dimensions: BoardSize,
tiles: Vec<BoardTile>,
}
impl Board {
pub fn new(size: BoardSize) -> Board {
let board_size = size.get_size();
let width = board_size / 2;
let height = board_size / 2;
let starting_rows = board_size / 2 - 1;
let playing_tiles = (0..width * height)
.map(|tile|{
let row = tile / width;
match row {
r if r < starting_rows => BoardTile::Piece(
Piece::LightPawn),
r if r > height - starting_rows => BoardTile::Piece(
Piece::DarkPawn),
_ => BoardTile::Empty,
}
})
.collect();
Board {
dimensions: size,
tiles: playing_tiles,
}
}
}
impl fmt::Display for Board {
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
// TODO: Add a A-Z and 1-12 border around the game.
let width = self.dimensions.get_size();
let height= self.dimensions.get_size();
// TODO: Implement a looping setup for the checkerboard.
// for {}
//
// let square = match tile {
// Piece::LightPawn => "♙",
// Piece::LightKing => "♔",
// Piece::DarkPawn => "♟",
// Piece::DarkKing => "♚",
// };
Ok(())
}
}
#[cfg(test)] #[cfg(test)]