Move some methods around

This commit is contained in:
2025-02-20 21:24:59 +01:00
parent 797c54e83b
commit 15202df4f4

View File

@@ -158,8 +158,7 @@ pub enum PieceType {
} }
impl PieceType { impl PieceType {
fn initial_setup(&self) -> Vec<(Piece, Position)> { fn new_pawn(color: Color, file: File) -> (Piece, Position) {
fn pawn(color: Color, file: File) -> (Piece, Position) {
let pos = Position::new(file, color.get_pawn_rank()); let pos = Position::new(file, color.get_pawn_rank());
( (
Piece { Piece {
@@ -169,53 +168,22 @@ impl PieceType {
pos, pos,
) )
} }
match &self {
PieceType::Pawn => vec![
pawn(Color::White, File::A),
pawn(Color::White, File::B),
pawn(Color::White, File::C),
pawn(Color::White, File::D),
pawn(Color::White, File::E),
pawn(Color::White, File::F),
pawn(Color::White, File::G),
pawn(Color::White, File::H),
pawn(Color::Black, File::A),
pawn(Color::Black, File::B),
pawn(Color::Black, File::C),
pawn(Color::Black, File::D),
pawn(Color::Black, File::E),
pawn(Color::Black, File::F),
pawn(Color::Black, File::G),
pawn(Color::Black, File::H),
],
}
}
}
pub struct Piece {
pub color: Color,
pub piece_type: PieceType,
}
struct Ray {
positions: Vec<Position>,
}
fn pawn_move_rays(position: &Position, color: &Color) -> Vec<Ray> { fn pawn_move_rays(position: &Position, color: &Color) -> Vec<Ray> {
let direction = match color { let direction = match color {
Color::Black => Direction::Decr, Color::Black => Direction::Decr,
Color::White => Direction::Incr, Color::White => Direction::Incr,
}; };
let go = |p: &Position| p.delta(&Direction::Stay, &direction);
if position.rank == color.get_pawn_rank() { if position.rank == color.get_pawn_rank() {
let one = position.delta(&Direction::Stay, &direction).unwrap(); let one = go(position).unwrap();
let two = one.delta(&Direction::Stay, &direction).unwrap(); let two = go(&one).unwrap();
vec![Ray { vec![Ray {
positions: vec![one, two], positions: vec![one, two],
}] }]
} else { } else {
if let Some(position) = position.delta(&Direction::Stay, &direction) { if let Some(p) = go(position) {
vec![Ray { vec![Ray {
positions: vec![position], positions: vec![p],
}] }]
} else { } else {
vec![] vec![]
@@ -241,16 +209,52 @@ fn pawn_capture_rays(position: &Position, color: &Color) -> Vec<Ray> {
} }
capture_rays capture_rays
} }
fn initial_setup(&self) -> Vec<(Piece, Position)> {
match &self {
PieceType::Pawn => vec![
PieceType::new_pawn(Color::White, File::A),
PieceType::new_pawn(Color::White, File::B),
PieceType::new_pawn(Color::White, File::C),
PieceType::new_pawn(Color::White, File::D),
PieceType::new_pawn(Color::White, File::E),
PieceType::new_pawn(Color::White, File::F),
PieceType::new_pawn(Color::White, File::G),
PieceType::new_pawn(Color::White, File::H),
PieceType::new_pawn(Color::Black, File::A),
PieceType::new_pawn(Color::Black, File::B),
PieceType::new_pawn(Color::Black, File::C),
PieceType::new_pawn(Color::Black, File::D),
PieceType::new_pawn(Color::Black, File::E),
PieceType::new_pawn(Color::Black, File::F),
PieceType::new_pawn(Color::Black, File::G),
PieceType::new_pawn(Color::Black, File::H),
],
}
}
}
pub struct Piece {
pub color: Color,
pub piece_type: PieceType,
}
struct Ray {
positions: Vec<Position>,
}
impl Piece { impl Piece {
fn get_move_rays(&self, position: &Position) -> Vec<Ray> { fn get_move_rays(&self, position: &Position) -> Vec<Ray> {
match self.piece_type { match self.piece_type {
PieceType::Pawn => pawn_move_rays(position, &self.color), PieceType::Pawn => {
PieceType::pawn_move_rays(position, &self.color)
}
} }
} }
fn get_capture_rays(&self, position: &Position) -> Vec<Ray> { fn get_capture_rays(&self, position: &Position) -> Vec<Ray> {
match self.piece_type { match self.piece_type {
PieceType::Pawn => pawn_capture_rays(position, &self.color), PieceType::Pawn => {
PieceType::pawn_capture_rays(position, &self.color)
}
} }
} }
} }