Commit graph

284 commits

Author SHA1 Message Date
8d06cbf0f8 [board] Make the piece module public and remove the crate-level export of Color and Piece 2023-12-26 21:36:38 -07:00
17511e9d63 [board] Implement a rather dumb Position::piece_on_square
This method does an iteration over all piece colors and shapes to find the piece on a given square.
2023-12-26 21:34:01 -07:00
49c5a0b51d [board] Implement fmt::Display for Piece 2023-12-26 21:33:00 -07:00
ecc1ee85d4 [board] Remove an unintentional recursion in fmt::Display for piece::Shape 2023-12-26 21:31:44 -07:00
8e9da6aeff [board] Implement helpful piecewise constructors on Piece 2023-12-26 21:31:05 -07:00
371d37f688 [board] Implement TryFrom<char> and Into<char> for piece::Shape 2023-12-26 13:57:36 -07:00
a963cee1e7 Merge branch 'main' into pretty-print-position 2023-12-26 13:28:55 -07:00
9d0761f8c6 [board] Rename from_algebraic_string → from_algebraic_str 2023-12-26 13:28:25 -07:00
758a3d95fc [board] Reorganize bitboard and position modules and export some symbols from the crate
Move position.rs to the position module and create a mod.rs.
Do the same for bitboard.rs in the bitboard modules.
Export Color, Piece, Position, and Square and use crate::Thing directly instead of referring to the symbol in the nested modules.
2023-12-26 11:25:27 -07:00
d2d33a4915 [board] Add Position::color_to_move defaulting to White 2023-12-26 11:22:40 -07:00
cc793fdad6 [board] Pretty print a board with rank and file notations but no pieces 2023-12-26 11:21:01 -07:00
1575c83d31 [board] Rename PiecePlacementError::PieceExistsOnSquare → ExistsOnSquare 2023-12-26 11:20:01 -07:00
80b78a8fef [board] Remove Default derivation from BitBoard 2023-12-26 11:19:13 -07:00
32c562e405 [board] Implement Color::other() that swaps the color for the other 2023-12-26 11:13:44 -07:00
fac98735e3 [board] Implement a Pieces iterator
This type iterates the pieces in a Position using the BitScanner struct to iterate all the occupied squares of the position's bitboards.
2023-12-26 09:19:38 -07:00
18d9a845e6 [board] Implement a custom Debug for Position
Newlines help a lot!
2023-12-26 09:17:57 -07:00
e23c20486e [board] Build error and warning fixes
- Remove unused import from bit_scanner.rs
- Rename PieceShape → Shape in the Position tests
2023-12-26 09:16:55 -07:00
48f393680c [board] Rename BitBoard::pieces() → occupied_squares() 2023-12-26 09:15:53 -07:00
e0f1e1f6ff [board] Derive a bunch of traits for Color, Shape, Piece, and Square 2023-12-26 09:15:24 -07:00
1da827a3bb [board] Implement a BitScanner on u64
This struct implements an Iterator that returns the positions of the 1 bits in the u64.
BitBoard takes this iterator and maps it into Squares in the pieces() method.

This is laying the groundwork for an iterator over the pieces in a Position. 👀
2023-12-23 23:04:18 -07:00
a2f88f0fde [board] Give piece Color and shape enums integer values
Rename PieceShape → Shape
Remove color and piece modules from position.rs
2023-12-23 20:20:19 -07:00
e4859105b7 [board] Implement directional shifts by 1 on BitBoard
Add some positive tests for these shifts. Negative tests, and boundary tests are still to come.

Implement at custom fmt::Debug for BitBoard so it prints binary.
2023-12-23 16:09:58 -07:00
366f15ca12 [board] Implement placing a piece in a mutable position 2023-12-23 09:31:47 -07:00
153e21b693 [board] Implement finding a neighbor of a square
Use the Direction enum to calculate the neighbor of a square with bounds checking.
Remove the unused rank_index() and file_index methods.
Add Square::from_rank_file and Square::from_index_unsafe to support tests.
Unify the Square*OutOfBounds error types
2023-12-23 09:30:45 -07:00
341d8211ad [board] Fix algebraic square parsing
I got very confused about which one is the rank and which one is the file. 🙃
2023-12-23 09:27:56 -07:00
9bcd0b2148 [board] Add neighbor and piece modules
Add a Direction enum in the neighbor module
Add Color and PieceShape enums, and a Piece struct to the piece module
2023-12-23 09:18:07 -07:00
70d8034e4e [board] Inline BitAnd, BitOr, and Not BitBoard methods; remove an unused import 2023-12-23 09:17:07 -07:00
0838f4fd01 [board] Add a Not impl for BitBoard
This trait implements bitwise NOT
2023-12-23 09:16:32 -07:00
6af64171a2 [board] Implement BitAnd and BitOr on BitBoard and make it's u64 private 2023-12-22 08:50:03 -08:00
aa7e901241 [board] Add remove_piece_at() method to BitBoard 2023-12-21 08:30:48 -08:00
ed9a919db6 [board] Add a "count leading zeros" implementation for ARM machines
Call the `clz` instruction on the bitboard via `asm!`.
2023-12-21 08:17:17 -08:00
4eb734d3eb [board] Some basic bit operations for bitboards 2023-12-21 08:17:06 -08:00
0a42adf1fa [board] Re-do the Square implementation
- Rank and file are 0-indexed values
- Add an index property, a 1D index into an array
- Add from_index() and from_algebraic_string()
2023-12-21 08:15:51 -08:00
d776bd18e2 [board] Move bitboard lib to "board" 2023-12-20 11:45:55 -08:00