cb48413ce7
[bitboard] Implement BitBoard::is_single_square()
...
Returns true if there's only one square set in the bitboard.
2024-01-29 14:46:16 -08:00
0f664f6c80
[bitboard] Implement BitBoard::as_bits; let rank and file take &u8 instead of usize
2024-01-29 14:46:16 -08:00
21c81f237a
[core] Implement as_index() for range_bound_struct
2024-01-29 14:46:16 -08:00
dab787170c
[position] Clean up rook unit tests
...
Use test_position! instead of position!
Spell out the PlacedPiece constructor in the test_position! macro.
2024-01-28 10:28:01 -08:00
ea74b214da
[position] Implement generating pawn moves by looking up bitboards in the Library
...
This enables a bunch of clean up! Remove the MoveGenerationParameters and MoveList
types from move_generator::pawn.
Implement BitBoard::pawn_pushes to look up pawn pushes by square and color.
2024-01-28 10:25:01 -08:00
77f419ad3b
[position] Rename FenError → ToFenError
...
Add an associated type called Error to the ToFen trait. This mirrors the try_from
any try_into traits.
2024-01-28 10:05:51 -08:00
808526f8f7
[position] Rename the board crate -> position
...
Merge the 'rename-board-crate' branch to 'main'.
2024-01-28 09:59:11 -08:00
ed55eda901
Update the Cargo.toml files
2024-01-28 09:58:50 -08:00
220da08727
Directly rename board -> position
2024-01-28 09:56:57 -08:00
569693bda9
Merge branch 'main' into rename-board-crate
...
# Conflicts:
# explorer/src/main.rs
2024-01-28 09:55:53 -08:00
8eb180df67
[explorer] Add fen and make commands
...
Clean up the implementation of the place command.
Track state with a State struct that contains a position and a builder. The place
command will place a new piece and then regenerate the position.
The make command makes a move. The syntax is:
make [color:w|b] [shape] [from square] [to square]
The fen command prints a FEN string representing the position.
2024-01-28 09:50:39 -08:00
6bd3787a24
[board] Write test_position!({starting,empty}) macros
...
These produce starting and empty positions, respectively, and then print the
position.
2024-01-28 09:47:25 -08:00
66d03d3514
[board] Clean up a bunch of imports
2024-01-28 09:46:38 -08:00
1e77bc5ebb
[board] Test to verify the king can't move into or stay in check
...
Write a test on the king move generator to verify the king can't move to a
square where it would still be in check.
2024-01-28 09:45:13 -08:00
76ac719418
[position] Rename the board crate → chessfriend_position in Cargo.toml
...
Rename the crate, but don't move any files.
2024-01-28 09:40:45 -08:00
b002442b42
[board] Implement a custom PartialEq on Position
...
We don't need to compare cached data. The load-bearing parts of a Position are:
player to move, position of all pieces, flags, and en passant status.
Inspiration for this implementation came from the FEN spec. It specifies all
these in the string.
2024-01-28 09:16:22 -08:00
1f873879bb
[bitboard] Add pawn attacks bitboards to the Library
2024-01-28 09:08:57 -08:00
164fe94bc0
[board] Implement danger squares for the current player
...
This concept comes from [1]. Danger squares are the squares a king cannot move to
because it would permit the opposing player to capture the king on their next
turn.
[1]: https://peterellisjones.com/posts/generating-legal-chess-moves-efficiently/
2024-01-28 09:08:22 -08:00
654e4094d9
[board] Restructure the move_generator module
...
Move mod.rs to ../move_generator.rs. This is the new style.
Move the contents of move_generator::move_generator to the top of move_generator.
2024-01-27 14:25:38 -08:00
9d25414b97
[board] Directly use PlacedPiece in the position! macro
...
Avoids having to also import the piece! macro to use position!.
2024-01-27 13:04:22 -08:00
e8d7f15a7f
[board] Simplify the piece placement strategy logic
...
Check whether the strategy is PreserveExisting before checking if the piece is
already placed.
2024-01-27 13:03:18 -08:00
bea6dd67c8
[board] Remove the position reference from move generator structs
...
Simplifies the lifetime calculations, and makes it possible to cache a Moves
object on Position.
2024-01-27 13:02:43 -08:00
d3ab477795
[board] Remove a stray space in move_generator/mod.rs
2024-01-26 12:59:23 -08:00
6292421b1c
[board] Clean up imports in fen.rs
2024-01-26 12:59:05 -08:00
f08a4c66a1
[core] Use TryFromCharError in TryFrom<char> for Color
2024-01-26 12:58:51 -08:00
54c94a93aa
[board] Rewrite the pawn move generator
...
I wrote it before I made the MoveGeneratorInternal trait.
Found a few bugs in there too.
2024-01-26 08:38:01 -08:00
a73355c769
[explorer] Track result of command with a CommandResult type, and overall state with a State type
2024-01-24 17:16:33 -08:00
d27c455ce4
Merge branch 'many-crates'
2024-01-24 17:14:30 -08:00
3e1675f87e
Specify resolver=2 in the Cargo workspace
2024-01-24 17:10:44 -08:00
88c0638d83
[board] Check that move is in sight of piece
...
If it's not, return an error from MoveBuilder::make()
2024-01-24 17:10:10 -08:00
1b5319c702
[board] Pass a Color to Position::king_square
...
Now it can return either color's king.
2024-01-24 17:09:15 -08:00
8b2a3926b3
[core,board] Move board::piece to core
...
Break up types in core into finer grained modules.
Update all the imports.
2024-01-24 17:08:27 -08:00
3c71687838
Merge branch 'many-crates'
...
# Conflicts:
# Cargo.toml
# core/Cargo.toml
2024-01-24 09:23:35 -08:00
6f85305912
[board] Clean up a bunch of build errors
...
Fix imports to refer to core and bitboard crates.
Fix some API use errors.
2024-01-24 09:18:12 -08:00
3cec64d686
[bitboard] Make the bitboard crate more crate-like
...
Export symbols needed to use BitBoard and BitBoardBuilder.
Fix build errors.
2024-01-24 09:16:21 -08:00
d901be53d2
[explorer] Depends on core
2024-01-24 09:15:18 -08:00
7738f30e5e
Fix the workspace members
...
The items in the members array are paths, not crate names.
2024-01-24 09:14:59 -08:00
b0b22048a8
[core] Rename (once again) chess_core → chessfriend_core
2024-01-24 08:48:19 -08:00
625bfb2446
[bitboard] Move everything in board::bitboard to the bitboard crate
2024-01-24 08:35:28 -08:00
32100b9553
[bitboard] Make an empty chess_bitboard crate
...
This crate lives in bitboard/
2024-01-24 08:34:23 -08:00
eab30cc33b
[core] Rename the directory chess_core → core
...
I think this is sufficient.
2024-01-24 08:33:07 -08:00
106800bcb3
[core,board] Update all use imports referring to Square, Rank, and File
2024-01-24 08:32:09 -08:00
3c3a62345d
[core] Rename core → chess_core
2024-01-24 08:29:16 -08:00
406631b617
[core] Move the contents of board::square to core::coordinates
...
Export Square, Rank, and File from the core crate.
2024-01-24 08:25:56 -08:00
7e08a9adc4
[core] Create a core crate
2024-01-24 08:24:59 -08:00
025ceb2694
[core] Move the contents of board::square to core::cordinates
...
Export Square, Direction, Rank, and File from the core crate.
2024-01-23 17:18:48 -08:00
e522e268cf
Make a Cargo Workspace!
2024-01-22 19:33:59 -08:00
1ebe7d10de
Move Notes and ChessPieces docs to a doc directory
2024-01-22 19:27:08 -08:00
90266f2dd0
[board] Make the MoveSet struct (and its internal structs) public for the crate
2024-01-22 08:20:38 -08:00
3244bfc211
[board] Make the fen module public so clients can access ToFen
2024-01-22 08:19:09 -08:00