[board] Implement a pawn move generator

Holy heck I went on a *journey* here. Ultimately, I needed to implement my own
index-based iterator instead of using the Vec's Iterator.

This type establishes some patterns I want to carry forward to other move
generators.

1. The use of a Parameters struct to fully parameterize the move generation
   per-color. That lets these types only need a single color-based branch
2. A list of move lists, one list for each of captures, promotions, and quiet
   moves.
3. An index-based move iterator.
4. Separate impl for generating bitboard representations of these moves

Additional changes:

- Implement BitBoard::from_square()
- Implement a Square::e5() for tests

This class doesn't implement en passant yet. It also doesn't yet have tests for
the bitboard stuff.
This commit is contained in:
Eryn Wells 2023-12-31 11:38:37 -08:00
parent 750b16970f
commit af36b75df7
3 changed files with 300 additions and 70 deletions

View file

@ -28,6 +28,10 @@ impl BitBoard {
FILES[file]
}
pub fn from_square(sq: Square) -> BitBoard {
BitBoard(1 << sq.index())
}
pub fn is_empty(&self) -> bool {
self.0 == 0
}