Bobby is a chess move validator, i.e. given a position and a candidate move, Bobby tells you whether the move is legal or not. He can also look for check/mates and stalemates.
- 64-bit magic bitboards
- perft and divide calculation
- check check
- castling
- en-passant
- promotion
julia> ]add Bobby
You can't really play against Bobby yet, if you want to play a proper game try Chess.jl. However, you can compute the perft from any valid position. In the case of the starting position
julia> using Bobby
julia> b = Bobby.setBoard();
julia> pt = Bobby.perft(b, 5);
julia> pt.nodes
5-element Array{Int64,1}:
20
400
8902
197281
4865609
You can also import the position from its FEN
julia> b = Bobby.loadFen("r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 0");
julia> Bobby.plainPrint(b)
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
8 █Π ⋅ ⋅ ⋅ + ⋅ ⋅ Π █
7 █o ⋅ o o Ψ o Δ ⋅ █
6 █Δ ζ ⋅ ⋅ o ζ o ⋅ █
5 █⋅ ⋅ ⋅ o ζ ⋅ ⋅ ⋅ █
4 █⋅ o ⋅ ⋅ o ⋅ ⋅ ⋅ █
3 █⋅ ⋅ ζ ⋅ ⋅ Ψ ⋅ o █
2 █o o o Δ Δ o o o █
1 █Π ⋅ ⋅ ⋅ + ⋅ ⋅ Π █
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
a b c d e f g h
julia> pt = Bobby.perft(b, 4).nodes
4-element Array{Int64,1}:
48
2039
97862
4085603
julia> ]activate .
julia> using Bobby
julia> using PkgBenchmark
julia> bm = benchmarkpkg(Bobby)
julia> export_markdown("benchmark.md", bm)