extern crate grid;
extern crate prettytable;
use grid::Grid;
use std::fmt;
#[derive(Debug, Clone, Copy)]
enum Player {
White,
Black
}
impl std::fmt::Display for Player {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
use Player::*;
match self {
White => write!(f, "w"),
Black => write!(f, "b"),
}
}
}
#[derive(Debug, Clone, Copy)]
enum Piece {
Pawn(Player),
Knight(Player),
Bishop(Player),
Rook(Player),
Queen(Player),
King(Player),
None
}
impl std::fmt::Display for Piece {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
use Piece::*;
match self {
Pawn(player) => write!(f, "{}P", player),
Knight(player) => write!(f, "{}N", player),
Bishop(player) => write!(f, "{}B", player),
Rook(player) => write!(f, "{}R", player),
Queen(player) => write!(f, "{}Q", player),
King(player) => write!(f, "{}K", player),
None => write!(f, " "),
}
}
}
const Empty: Piece = Piece::None;
const WP: Piece = Piece::Pawn(Player::White);
const WN: Piece = Piece::Knight(Player::White);
const WB: Piece = Piece::Bishop(Player::White);
const WR: Piece = Piece::Rook(Player::White);
const WQ: Piece = Piece::Queen(Player::White);
const WK: Piece = Piece::King(Player::White);
const BP: Piece = Piece::Pawn(Player::Black);
const BN: Piece = Piece::Knight(Player::Black);
const BB: Piece = Piece::Bishop(Player::Black);
const BR: Piece = Piece::Rook(Player::Black);
const BQ: Piece = Piece::Queen(Player::Black);
const BK: Piece = Piece::King(Player::Black);
fn main() {
use Player::*;
let data = vec![
vec![BR, BN, BB, BQ, BK, BB, BN, BR],
vec![BP; 8],
vec![Empty; 8],
vec![Empty; 8],
vec![Empty; 8],
vec![Empty; 8],
vec![Empty; 8],
vec![Empty; 8],
vec![WP; 8],
vec![WR, WN, WB, WQ, WK, WB, WN, WR],
];
let grid = Grid::<Piece>::new_from(data);
grid.pretty_table().printstd();
}