[bitboard, core, position] Implement proper castle move generation
Add a field to MoveSet called special that flags special moves that should be generated in the iter() method. This field is a u8. It only tracks castles in the first and second bits (kingside and queenside, respectively). The move iterator chains two maps over Option<()> that produce the kingside and queenside castle moves. With that done, finish the implementation of Position::player_can_castle by adding checks for whether the squares between the rook and king are clear, and that the king would not pass through a check. This is done with BitBoards! Finally, implement some logic in PositionBuilder that updates the position's castling flags based on the positions of king and rooks. Supporting changes: - Add Color:ALL and iterate on that slice - Add Castle::ALL and iterator on that slice - Add a CastlingParameters struct that contains BitBoard properties that describe squares that should be clear of pieces and squares that should not be attacked.
This commit is contained in:
		
							parent
							
								
									83a4e47e56
								
							
						
					
					
						commit
						1d7dada987
					
				
					 6 changed files with 234 additions and 60 deletions
				
			
		| 
						 | 
				
			
			@ -10,8 +10,10 @@ pub enum Color {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
impl Color {
 | 
			
		||||
    pub fn iter() -> impl Iterator<Item = Color> {
 | 
			
		||||
        [Color::White, Color::Black].into_iter()
 | 
			
		||||
    pub const ALL: [Color; 2] = [Color::White, Color::Black];
 | 
			
		||||
 | 
			
		||||
    pub fn iter() -> impl Iterator<Item = &'static Color> {
 | 
			
		||||
        Color::ALL.iter()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn other(&self) -> Color {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue