mirror of
https://github.com/szymon-jozef/checkers.git
synced 2026-10-27 19:20:44 +01:00
refactor: extract is_step_valid from is_movable
This commit is contained in:
@@ -85,6 +85,10 @@ impl Board {
|
|||||||
player.id == pawn.owner
|
player.id == pawn.owner
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_step_valid(&self, pos: Option<Position>) -> bool {
|
||||||
|
pos.is_some_and(|pos| pos.is_in_range(self.size) && self[pos].pawn.is_none())
|
||||||
|
}
|
||||||
|
|
||||||
fn is_movable(&self, pos: Position, player: &Player) -> bool {
|
fn is_movable(&self, pos: Position, player: &Player) -> bool {
|
||||||
if !pos.is_in_range(self.size) {
|
if !pos.is_in_range(self.size) {
|
||||||
debug!(
|
debug!(
|
||||||
@@ -111,55 +115,17 @@ impl Board {
|
|||||||
|
|
||||||
match pawn.state {
|
match pawn.state {
|
||||||
PawnState::Man => {
|
PawnState::Man => {
|
||||||
if let Some(left_pos) = pos.checked_add(&left_up)
|
self.is_step_valid(pos.checked_add(&left_up))
|
||||||
&& left_pos.is_in_range(self.size)
|
|| self.is_step_valid(pos.checked_add(&right_up))
|
||||||
&& self[left_pos].pawn.is_none()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(right_pos) = pos.checked_add(&right_up)
|
|
||||||
&& right_pos.is_in_range(self.size)
|
|
||||||
&& self[right_pos].pawn.is_none()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
false
|
|
||||||
}
|
}
|
||||||
PawnState::Dame => {
|
PawnState::Dame => {
|
||||||
let left_down: DeltaPosition = DeltaPosition { row: 0, column: -1 } - direction;
|
let left_down: DeltaPosition = DeltaPosition { row: 0, column: -1 } - direction;
|
||||||
let right_down: DeltaPosition = DeltaPosition { row: 0, column: 1 } - direction;
|
let right_down: DeltaPosition = DeltaPosition { row: 0, column: 1 } - direction;
|
||||||
|
|
||||||
if let Some(left_up_pos) = pos.checked_add(&(left_up))
|
self.is_step_valid(pos.checked_add(&left_up))
|
||||||
&& left_up_pos.is_in_range(self.size)
|
|| self.is_step_valid(pos.checked_add(&right_up))
|
||||||
&& self[left_up_pos].pawn.is_none()
|
|| self.is_step_valid(pos.checked_add(&left_down))
|
||||||
{
|
|| self.is_step_valid(pos.checked_add(&right_down))
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(right_up_pos) = pos.checked_add(&right_up)
|
|
||||||
&& right_up_pos.is_in_range(self.size)
|
|
||||||
&& self[right_up_pos].pawn.is_none()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(left_down_pos) = pos.checked_add(&left_down)
|
|
||||||
&& left_down_pos.is_in_range(self.size)
|
|
||||||
&& self[left_down_pos].pawn.is_none()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(right_down_pos) = pos.checked_add(&right_down)
|
|
||||||
&& right_down_pos.is_in_range(self.size)
|
|
||||||
&& self[right_down_pos].pawn.is_none()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
false
|
|
||||||
}
|
}
|
||||||
PawnState::Captured => false,
|
PawnState::Captured => false,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user