add optional 'custom_pieces' feature
This commit is contained in:
parent
d75bbb4c6f
commit
0a2d572188
@ -3,6 +3,12 @@ name = "saltfish"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[features]
|
||||
custom_pieces = ["dep:toml", "dep:serde", "dep:serde_derive"]
|
||||
|
||||
|
||||
[dependencies]
|
||||
toml = { version = "0.8.12", optional = true }
|
||||
serde = { version = "1.0.197", optional = true }
|
||||
serde_derive = { version = "1.0.197", optional = true }
|
||||
|
||||
12
config.toml
Normal file
12
config.toml
Normal file
@ -0,0 +1,12 @@
|
||||
[[piece]]
|
||||
[piece.turtle]
|
||||
change = [
|
||||
[ 1, 2 ],
|
||||
[ 2, 1 ]
|
||||
]
|
||||
|
||||
# INFO: when one: number of must-moves
|
||||
# if 0 infinite
|
||||
# INFO: when two: [0] = min, [1] = max
|
||||
iterable = [ 1, 2 ]
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
use super::{piece::PieceVariant, square::Square};
|
||||
|
||||
#[cfg(feature = "custom_pieces")]
|
||||
use serde_derive::Deserialize;
|
||||
|
||||
pub struct Move {
|
||||
from: Square,
|
||||
to: Square,
|
||||
@ -20,28 +23,36 @@ impl Move {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "custom_pieces")]
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct Change {
|
||||
x: i8,
|
||||
y: i8
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "custom_pieces"))]
|
||||
pub struct Change {
|
||||
x: i8,
|
||||
y: i8
|
||||
}
|
||||
|
||||
pub enum MoveVariant {
|
||||
King([Change; 8]),
|
||||
KingCastle([Change; 2]),
|
||||
Queen([Change; 8]),
|
||||
Rook([Change; 4]),
|
||||
Bishop([Change; 4]),
|
||||
Knight([Change; 8]),
|
||||
PawnWhite([Change; 1]),
|
||||
PawnWhiteDouble([Change; 1]),
|
||||
PawnWhiteEnPassent([Change; 2]),
|
||||
PawnWhiteCaptureLeft([Change; 1]),
|
||||
PawnWhiteCaptureRight([Change; 1]),
|
||||
PawnBlack([Change; 1]),
|
||||
PawnBlackDouble([Change; 1]),
|
||||
PawnBlackEnPassent([Change; 2]),
|
||||
PawnBlackCaptureLeft([Change; 1]),
|
||||
PawnBlackCaptureRight([Change; 1]),
|
||||
King,
|
||||
KingCastle,
|
||||
Queen,
|
||||
Rook,
|
||||
Bishop,
|
||||
Knight,
|
||||
PawnWhite,
|
||||
PawnWhiteDouble,
|
||||
PawnWhiteEnPassent,
|
||||
PawnWhiteCaptureLeft,
|
||||
PawnWhiteCaptureRight,
|
||||
PawnBlack,
|
||||
PawnBlackDouble,
|
||||
PawnBlackEnPassent,
|
||||
PawnBlackCaptureLeft,
|
||||
PawnBlackCaptureRight,
|
||||
}
|
||||
|
||||
impl MoveVariant {
|
||||
@ -147,4 +158,65 @@ impl MoveVariant {
|
||||
pub fn pawn_black_capture_right() -> [Change; 1] {
|
||||
[ Change { x: -1, y: 1 } ]
|
||||
}
|
||||
|
||||
|
||||
pub fn number_king() -> u8 {
|
||||
8
|
||||
}
|
||||
|
||||
pub fn number_queen() -> u8 {
|
||||
8
|
||||
}
|
||||
|
||||
pub fn number_rook() -> u8 {
|
||||
4
|
||||
}
|
||||
|
||||
pub fn number_bishop() -> u8 {
|
||||
4
|
||||
}
|
||||
|
||||
pub fn number_knight() -> u8 {
|
||||
8
|
||||
}
|
||||
|
||||
pub fn number_pawn_white() -> u8 {
|
||||
1
|
||||
}
|
||||
|
||||
pub fn number_pawn_white_double() -> u8 {
|
||||
1
|
||||
}
|
||||
|
||||
pub fn number_pawn_white_en_passent() -> u8 {
|
||||
2
|
||||
}
|
||||
|
||||
pub fn number_pawn_white_capture_left() -> u8 {
|
||||
1
|
||||
}
|
||||
|
||||
pub fn number_pawn_white_capture_right() -> u8 {
|
||||
1
|
||||
}
|
||||
|
||||
pub fn number_pawn_black() -> u8 {
|
||||
1
|
||||
}
|
||||
|
||||
pub fn number_pawn_black_double() -> u8 {
|
||||
1
|
||||
}
|
||||
|
||||
pub fn number_pawn_black_en_passent() -> u8 {
|
||||
2
|
||||
}
|
||||
|
||||
pub fn number_pawn_black_capture_left() -> u8 {
|
||||
1
|
||||
}
|
||||
|
||||
pub fn number_pawn_black_capture_right() -> u8 {
|
||||
1
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,3 +1,8 @@
|
||||
use super::moves::Change;
|
||||
|
||||
#[cfg(feature = "custom_pieces")]
|
||||
use serde_derive::Deserialize;
|
||||
|
||||
pub enum PieceVariant {
|
||||
King,
|
||||
Queen,
|
||||
@ -8,6 +13,22 @@ pub enum PieceVariant {
|
||||
}
|
||||
|
||||
pub struct Piece {
|
||||
pub white: bool,
|
||||
pub variant: PieceVariant
|
||||
white: bool,
|
||||
variant: PieceVariant
|
||||
}
|
||||
|
||||
|
||||
#[cfg(feature = "custom_pieces")]
|
||||
enum Iterablity {
|
||||
Infinite(u8),
|
||||
ForcedNum(u8),
|
||||
Range([u8; 2])
|
||||
}
|
||||
|
||||
|
||||
#[cfg(feature = "custom_pieces")]
|
||||
#[derive(Debug, Deserialize)]
|
||||
struct CustomPiece {
|
||||
change: Vec<Change>,
|
||||
iterable: Vec<Vec<u8>>
|
||||
}
|
||||
|
||||
@ -3,8 +3,10 @@ use crate::chess::square::Square;
|
||||
use crate::chess::moves::Move;
|
||||
use crate::chess::moves::MoveVariant;
|
||||
|
||||
use super::moves::Change;
|
||||
|
||||
struct Castling {
|
||||
|
||||
pub struct Castling {
|
||||
king_side: bool,
|
||||
queen_side: bool,
|
||||
}
|
||||
@ -62,6 +64,8 @@ impl Default for Position {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Creating Position
|
||||
impl Position {
|
||||
pub fn new() -> Self {
|
||||
Position::default()
|
||||
@ -70,8 +74,29 @@ impl Position {
|
||||
pub fn from_fen(fen: String) -> Self {
|
||||
todo!("Implement this function")
|
||||
}
|
||||
|
||||
/*
|
||||
TODO: Decide if Position should be mutable or not
|
||||
pub fn set_rows(mut self, rows: [[Option<Piece>; 8]; 8]) -> Self {
|
||||
self.rows = rows;
|
||||
self
|
||||
}
|
||||
pub fn set_whites_turn(mut self, whites_turn: bool) -> Self {
|
||||
self.whites_turn = whites_turn;
|
||||
self
|
||||
}
|
||||
pub fn set_castling(mut self, castling: [Castling; 2]) -> Self {
|
||||
self.castling = castling;
|
||||
self
|
||||
}
|
||||
pub fn set_en_passent(mut self, en_passent: Option<Square>) -> Self {
|
||||
self.en_pessant = en_passent;
|
||||
self
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
/// Exposing position fields
|
||||
impl Position {
|
||||
pub fn rows(self) -> [[Option<Piece>; 8]; 8] {
|
||||
self.rows
|
||||
@ -90,9 +115,9 @@ impl Position {
|
||||
}
|
||||
}
|
||||
|
||||
/// Use position
|
||||
impl Position {
|
||||
pub fn get_moves(self) -> Vec<Move> {
|
||||
let king_moves = MoveVariant::king();
|
||||
todo!("finish")
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,3 +1,6 @@
|
||||
#![allow(dead_code)]
|
||||
|
||||
|
||||
use chess::position::Position;
|
||||
|
||||
mod chess;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user