refactor
This commit is contained in:
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user