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 piece = self.get_piece(&start);
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 piece = self.get_piece(&start);
if let Piece::NoPiece = piece {
@@ -410,7 +410,7 @@ impl DraughtsGame {
}
fn redo_move(&mut self, mv: &LoggedMove) {
self.board.apply_move(mv);
self.board.redo_move(mv);
if !mv.is_capture() || !mv.multi_capture() {
self.next_turn();
}
@@ -422,13 +422,13 @@ impl DraughtsGame {
if let Some(player) = piece.player() {
if mv.is_movement() {
if self.next_move == player {
self.board.check_and_apply_move(mv)?;
self.board.apply_move(mv)?;
self.next_turn();
} else {
return Err(Error::WrongPlayer);
}
} 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
if self
.board
@@ -845,7 +845,7 @@ mod tests {
];
for mv in moves {
let mut board_clone = board.clone();
board_clone.apply_move(&mv);
board_clone.redo_move(&mv);
assert_ne!(board, board_clone);
board_clone.undo_move(&mv);
assert_eq!(board, board_clone);

View File

@@ -50,17 +50,6 @@ pub struct 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 {
let mut result = <Position as Into<u8>>::into(start) as u16;
result |= (dir as u16) << 5;