This commit is contained in:
2025-07-03 10:40:32 +08:00
parent e5182c26f3
commit fa675c4b7f
2 changed files with 6 additions and 17 deletions

View File

@@ -158,7 +158,7 @@ impl DraughtsBoard {
} }
} }
fn apply_move(&mut self, mv: &LoggedMove) { fn redo_move(&mut self, mv: &LoggedMove) {
let start = mv.start_position(); let start = mv.start_position();
let piece = self.get_piece(&start); let piece = self.get_piece(&start);
let final_piece = if mv.pawn_promoted() { let final_piece = if mv.pawn_promoted() {
@@ -183,7 +183,7 @@ impl DraughtsBoard {
}; };
} }
fn check_and_apply_move(&mut self, mv: &Move) -> Result<(), Error> { fn apply_move(&mut self, mv: &Move) -> Result<(), Error> {
let start = mv.get_start_position(); let start = mv.get_start_position();
let piece = self.get_piece(&start); let piece = self.get_piece(&start);
if let Piece::NoPiece = piece { if let Piece::NoPiece = piece {
@@ -410,7 +410,7 @@ impl DraughtsGame {
} }
fn redo_move(&mut self, mv: &LoggedMove) { fn redo_move(&mut self, mv: &LoggedMove) {
self.board.apply_move(mv); self.board.redo_move(mv);
if !mv.is_capture() || !mv.multi_capture() { if !mv.is_capture() || !mv.multi_capture() {
self.next_turn(); self.next_turn();
} }
@@ -422,13 +422,13 @@ impl DraughtsGame {
if let Some(player) = piece.player() { if let Some(player) = piece.player() {
if mv.is_movement() { if mv.is_movement() {
if self.next_move == player { if self.next_move == player {
self.board.check_and_apply_move(mv)?; self.board.apply_move(mv)?;
self.next_turn(); self.next_turn();
} else { } else {
return Err(Error::WrongPlayer); return Err(Error::WrongPlayer);
} }
} else if self.next_move == player { } else if self.next_move == player {
self.board.check_and_apply_move(mv)?; self.board.apply_move(mv)?;
// Check if more captures are available for the current piece // Check if more captures are available for the current piece
if self if self
.board .board
@@ -845,7 +845,7 @@ mod tests {
]; ];
for mv in moves { for mv in moves {
let mut board_clone = board.clone(); let mut board_clone = board.clone();
board_clone.apply_move(&mv); board_clone.redo_move(&mv);
assert_ne!(board, board_clone); assert_ne!(board, board_clone);
board_clone.undo_move(&mv); board_clone.undo_move(&mv);
assert_eq!(board, board_clone); assert_eq!(board, board_clone);

View File

@@ -50,17 +50,6 @@ pub struct LoggedMove {
} }
impl LoggedMove { impl LoggedMove {
fn is_pawn_promoted(
piece: Piece,
start: Position,
dir: MoveDirection,
is_capture: bool,
) -> bool {
let end_row = compute_end_position(start, dir, is_capture).row();
!piece.is_crowned() && (Some(Player::White) == piece.player() && end_row == 7)
|| (Some(Player::Red) == piece.player() && end_row == 0)
}
pub fn movement(start: Position, dir: MoveDirection, is_pawn_promoted: bool) -> LoggedMove { pub fn movement(start: Position, dir: MoveDirection, is_pawn_promoted: bool) -> LoggedMove {
let mut result = <Position as Into<u8>>::into(start) as u16; let mut result = <Position as Into<u8>>::into(start) as u16;
result |= (dir as u16) << 5; result |= (dir as u16) << 5;