Move some methods around
This commit is contained in:
@@ -158,8 +158,7 @@ pub enum PieceType {
|
||||
}
|
||||
|
||||
impl PieceType {
|
||||
fn initial_setup(&self) -> Vec<(Piece, Position)> {
|
||||
fn pawn(color: Color, file: File) -> (Piece, Position) {
|
||||
fn new_pawn(color: Color, file: File) -> (Piece, Position) {
|
||||
let pos = Position::new(file, color.get_pawn_rank());
|
||||
(
|
||||
Piece {
|
||||
@@ -169,53 +168,22 @@ impl PieceType {
|
||||
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> {
|
||||
let direction = match color {
|
||||
Color::Black => Direction::Decr,
|
||||
Color::White => Direction::Incr,
|
||||
};
|
||||
let go = |p: &Position| p.delta(&Direction::Stay, &direction);
|
||||
if position.rank == color.get_pawn_rank() {
|
||||
let one = position.delta(&Direction::Stay, &direction).unwrap();
|
||||
let two = one.delta(&Direction::Stay, &direction).unwrap();
|
||||
let one = go(position).unwrap();
|
||||
let two = go(&one).unwrap();
|
||||
vec![Ray {
|
||||
positions: vec![one, two],
|
||||
}]
|
||||
} else {
|
||||
if let Some(position) = position.delta(&Direction::Stay, &direction) {
|
||||
if let Some(p) = go(position) {
|
||||
vec![Ray {
|
||||
positions: vec![position],
|
||||
positions: vec![p],
|
||||
}]
|
||||
} else {
|
||||
vec![]
|
||||
@@ -241,16 +209,52 @@ fn pawn_capture_rays(position: &Position, color: &Color) -> Vec<Ray> {
|
||||
}
|
||||
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 {
|
||||
fn get_move_rays(&self, position: &Position) -> Vec<Ray> {
|
||||
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> {
|
||||
match self.piece_type {
|
||||
PieceType::Pawn => pawn_capture_rays(position, &self.color),
|
||||
PieceType::Pawn => {
|
||||
PieceType::pawn_capture_rays(position, &self.color)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user