First commit
This commit is contained in:
commit
24c686c52d
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/target
|
7
Cargo.lock
generated
Normal file
7
Cargo.lock
generated
Normal file
@ -0,0 +1,7 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "chess"
|
||||
version = "0.1.0"
|
8
Cargo.toml
Normal file
8
Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
||||
[package]
|
||||
name = "chess"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
80
src/main.rs
Normal file
80
src/main.rs
Normal file
@ -0,0 +1,80 @@
|
||||
mod piece;
|
||||
|
||||
enum MoveType {
|
||||
VerticalOne,
|
||||
VerticalTwo,
|
||||
VerticalMany,
|
||||
HorizontalMany,
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
enum BoardPosition {
|
||||
A1,
|
||||
A2,
|
||||
A3,
|
||||
A4,
|
||||
A5,
|
||||
A6,
|
||||
A7,
|
||||
A8,
|
||||
B1,
|
||||
B2,
|
||||
B3,
|
||||
B4,
|
||||
B5,
|
||||
B6,
|
||||
B7,
|
||||
B8,
|
||||
C1,
|
||||
C2,
|
||||
C3,
|
||||
C4,
|
||||
C5,
|
||||
C6,
|
||||
C7,
|
||||
C8,
|
||||
D1,
|
||||
D2,
|
||||
D3,
|
||||
D4,
|
||||
D5,
|
||||
D6,
|
||||
D7,
|
||||
D8,
|
||||
E1,
|
||||
E2,
|
||||
E3,
|
||||
E4,
|
||||
E5,
|
||||
E6,
|
||||
E7,
|
||||
E8,
|
||||
F1,
|
||||
F2,
|
||||
F3,
|
||||
F4,
|
||||
F5,
|
||||
F6,
|
||||
F7,
|
||||
F8,
|
||||
G1,
|
||||
G2,
|
||||
G3,
|
||||
G4,
|
||||
G5,
|
||||
G6,
|
||||
G7,
|
||||
G8,
|
||||
H1,
|
||||
H2,
|
||||
H3,
|
||||
H4,
|
||||
H5,
|
||||
H6,
|
||||
H7,
|
||||
H8,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
}
|
75
src/piece.rs
Normal file
75
src/piece.rs
Normal file
@ -0,0 +1,75 @@
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub enum PieceColor {
|
||||
Black,
|
||||
White,
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub enum BishopType {
|
||||
Dark,
|
||||
Light,
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
pub enum PieceType {
|
||||
Pawn { promoted: bool },
|
||||
Rook,
|
||||
Knight,
|
||||
King,
|
||||
Queen,
|
||||
Bishop { kind: BishopType },
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
pub struct Piece {
|
||||
kind: PieceType,
|
||||
color: PieceColor,
|
||||
symbol: char,
|
||||
}
|
||||
|
||||
impl Piece {
|
||||
pub fn new(color: PieceColor, kind: PieceType) -> Self {
|
||||
Self {
|
||||
kind,
|
||||
color,
|
||||
symbol: Self::get_symbol(color, kind),
|
||||
}
|
||||
}
|
||||
|
||||
fn get_symbol(color: PieceColor, kind: PieceType) -> char {
|
||||
use PieceColor::*;
|
||||
use PieceType::*;
|
||||
|
||||
match (color, kind) {
|
||||
(White, Pawn { promoted: _ }) => '♙',
|
||||
(White, Knight) => '♘',
|
||||
(White, Bishop { kind: _ }) => '♗',
|
||||
(White, Rook) => '♖',
|
||||
(White, Queen) => '♕',
|
||||
(White, King) => '♔',
|
||||
(Black, Pawn { promoted: _ }) => '♟',
|
||||
(Black, Knight) => '♞',
|
||||
(Black, Bishop { kind: _ }) => '♝',
|
||||
(Black, Rook) => '♜',
|
||||
(Black, Queen) => '♛',
|
||||
(Black, King) => '♚',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod test {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_make_black_rook() {
|
||||
let piece = Piece::new(PieceColor::Black, PieceType::Rook);
|
||||
assert_eq!(piece.symbol, '♜');
|
||||
assert_eq!(piece.kind, PieceType::Rook);
|
||||
assert_eq!(piece.color, PieceColor::Black);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_get_white_knight() {
|
||||
assert_eq!(Piece::get_symbol(PieceColor::White, PieceType::Knight), '♘');
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user