WIP
This commit is contained in:
parent
d5cdf273c8
commit
091cc99cb3
42 changed files with 805 additions and 1662 deletions
|
@ -1,6 +1,6 @@
|
|||
// Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
use crate::{piece_sets::PlacePieceStrategy, Board, Castle, EnPassant};
|
||||
use crate::{piece_sets::PlacePieceStrategy, Board, Castle};
|
||||
use chessfriend_core::{
|
||||
coordinates::ParseSquareError, piece, Color, File, Piece, PlacedPiece, Rank, Square,
|
||||
};
|
||||
|
@ -69,7 +69,7 @@ impl ToFenStr for Board {
|
|||
for rank in Rank::ALL.into_iter().rev() {
|
||||
for file in File::ALL {
|
||||
let square = Square::from_file_rank(file, rank);
|
||||
match self.piece_on_square(square) {
|
||||
match self.get_piece(square) {
|
||||
Some(piece) => {
|
||||
if empty_squares > 0 {
|
||||
write!(fen_string, "{empty_squares}")
|
||||
|
@ -93,7 +93,7 @@ impl ToFenStr for Board {
|
|||
}
|
||||
}
|
||||
|
||||
write!(fen_string, " {}", self.player_to_move().to_fen_str()?)
|
||||
write!(fen_string, " {}", self.active_color.to_fen_str()?)
|
||||
.map_err(ToFenStrError::FmtError)?;
|
||||
|
||||
let castling = [
|
||||
|
@ -103,7 +103,7 @@ impl ToFenStr for Board {
|
|||
(Color::Black, Castle::QueenSide),
|
||||
]
|
||||
.map(|(color, castle)| {
|
||||
if !self.castling_rights.is_set(color, castle) {
|
||||
if !self.castling_rights.color_has_right(color, castle) {
|
||||
return "";
|
||||
}
|
||||
|
||||
|
@ -131,10 +131,8 @@ impl ToFenStr for Board {
|
|||
)
|
||||
.map_err(ToFenStrError::FmtError)?;
|
||||
|
||||
write!(fen_string, " {}", self.clock.half_move_number())
|
||||
.map_err(ToFenStrError::FmtError)?;
|
||||
write!(fen_string, " {}", self.clock.full_move_number())
|
||||
.map_err(ToFenStrError::FmtError)?;
|
||||
write!(fen_string, " {}", self.half_move_clock).map_err(ToFenStrError::FmtError)?;
|
||||
write!(fen_string, " {}", self.full_move_number).map_err(ToFenStrError::FmtError)?;
|
||||
|
||||
Ok(fen_string)
|
||||
}
|
||||
|
@ -156,7 +154,7 @@ impl ToFenStr for Piece {
|
|||
|
||||
fn to_fen_str(&self) -> Result<String, Self::Error> {
|
||||
let ascii: char = self.to_ascii();
|
||||
Ok(String::from(match self.color() {
|
||||
Ok(String::from(match self.color {
|
||||
Color::White => ascii.to_ascii_uppercase(),
|
||||
Color::Black => ascii.to_ascii_lowercase(),
|
||||
}))
|
||||
|
@ -214,20 +212,20 @@ impl FromFenStr for Board {
|
|||
.next()
|
||||
.ok_or(FromFenStrError::MissingField(Field::PlayerToMove))?,
|
||||
)?;
|
||||
board.clock.active_color = active_color;
|
||||
board.active_color = active_color;
|
||||
|
||||
let castling_rights = fields
|
||||
.next()
|
||||
.ok_or(FromFenStrError::MissingField(Field::CastlingRights))?;
|
||||
if castling_rights == "-" {
|
||||
board.castling_rights.clear_all();
|
||||
board.castling_rights.revoke_all();
|
||||
} else {
|
||||
for ch in castling_rights.chars() {
|
||||
match ch {
|
||||
'K' => board.castling_rights.set(Color::White, Castle::KingSide),
|
||||
'Q' => board.castling_rights.set(Color::White, Castle::QueenSide),
|
||||
'k' => board.castling_rights.set(Color::Black, Castle::KingSide),
|
||||
'q' => board.castling_rights.set(Color::Black, Castle::QueenSide),
|
||||
'K' => board.castling_rights.grant(Color::White, Castle::KingSide),
|
||||
'Q' => board.castling_rights.grant(Color::White, Castle::QueenSide),
|
||||
'k' => board.castling_rights.grant(Color::Black, Castle::KingSide),
|
||||
'q' => board.castling_rights.grant(Color::Black, Castle::QueenSide),
|
||||
_ => return Err(FromFenStrError::InvalidValue),
|
||||
};
|
||||
}
|
||||
|
@ -245,18 +243,18 @@ impl FromFenStr for Board {
|
|||
let half_move_clock = fields
|
||||
.next()
|
||||
.ok_or(FromFenStrError::MissingField(Field::HalfMoveClock))?;
|
||||
let half_move_clock: u16 = half_move_clock
|
||||
let half_move_clock: u32 = half_move_clock
|
||||
.parse()
|
||||
.map_err(FromFenStrError::ParseIntError)?;
|
||||
board.clock.half_move_number = half_move_clock;
|
||||
board.half_move_clock = half_move_clock;
|
||||
|
||||
let full_move_counter = fields
|
||||
.next()
|
||||
.ok_or(FromFenStrError::MissingField(Field::FullMoveCounter))?;
|
||||
let full_move_counter: u16 = full_move_counter
|
||||
let full_move_counter: u32 = full_move_counter
|
||||
.parse()
|
||||
.map_err(FromFenStrError::ParseIntError)?;
|
||||
board.clock.full_move_number = full_move_counter;
|
||||
board.full_move_number = full_move_counter;
|
||||
|
||||
debug_assert_eq!(fields.next(), None);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue