62 lines
1.5 KiB
Rust
62 lines
1.5 KiB
Rust
|
//! Shogi, the game of Generals
|
||
|
|
||
|
const DEFENDING_KING: char = '王';
|
||
|
const CHALLENGER_KING: char = '玉';
|
||
|
const ROOK: char = '飛';
|
||
|
const BISHOP: char = '角';
|
||
|
const GOLD_GENERAL: char = '金';
|
||
|
const SILVER_GENERAL: char = '銀';
|
||
|
const KNIGHT: char = '桂';
|
||
|
const LANCE: char = '香';
|
||
|
const PAWN: char = '歩';
|
||
|
const PROMOTED_ROOK: char = '竜';
|
||
|
const PROMOTED_BISHOP: char = '馬';
|
||
|
const PROMOTED_SILVER_GENERAL: char = '全';
|
||
|
const PROMOTED_KNIGHT: char = '圭';
|
||
|
const PROMOTED_LANCE: char = '仝';
|
||
|
const PROMOTED_PAWN: char = '个';
|
||
|
|
||
|
const DRAGON: char = PROMOTED_ROOK;
|
||
|
const HORSE: char = PROMOTED_BISHOP;
|
||
|
const TOKIN: char = PROMOTED_PAWN;
|
||
|
|
||
|
#[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
|
||
|
#[rustfmt::skip]
|
||
|
pub enum BoardPosition {
|
||
|
A1, A2, A3, A4, A5, A6, A7, A8, A9,
|
||
|
B1, B2, B3, B4, B5, B6, B7, B8, B9,
|
||
|
C1, C2, C3, C4, C5, C6, C7, C8, C9,
|
||
|
D1, D2, D3, D4, D5, D6, D7, D8, D9,
|
||
|
E1, E2, E3, E4, E5, E6, E7, E8, E9,
|
||
|
F1, F2, F3, F4, F5, F6, F7, F8, F9,
|
||
|
G1, G2, G3, G4, G5, G6, G7, G8, G9,
|
||
|
H1, H2, H3, H4, H5, H6, H7, H8, H9,
|
||
|
I1, I2, I3, I4, I5, I6, I7, I8, I9,
|
||
|
}
|
||
|
|
||
|
/// For Shogi this designates the direction the pieces face:
|
||
|
/// 'Black
|
||
|
#[derive(Debug, Copy, Clone, PartialEq)]
|
||
|
pub enum PieceColor {
|
||
|
Black,
|
||
|
White,
|
||
|
}
|
||
|
|
||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||
|
pub enum PieceType {
|
||
|
King,
|
||
|
Rook,
|
||
|
Bishop,
|
||
|
GoldGeneral,
|
||
|
SilverGeneral,
|
||
|
Knight,
|
||
|
Lance,
|
||
|
Pawn,
|
||
|
}
|
||
|
|
||
|
#[derive(Debug, PartialEq)]
|
||
|
pub struct Piece {
|
||
|
kind: PieceType,
|
||
|
color: PieceColor,
|
||
|
symbol: char,
|
||
|
}
|