diff --git a/cpp/src/board.cpp b/cpp/src/board.cpp index a2d45da..6d9afa8 100644 --- a/cpp/src/board.cpp +++ b/cpp/src/board.cpp @@ -199,6 +199,24 @@ Board Board::make_move(Move move) const { } else { ret.en_passant_target = -1; } + + // -- Handle castling (just move the rook over) + if (move.castle_side & KingSide) { + Coords c = Coords::from_index(move.source_square); + Coords rook_source{7, c.y}; + int8_t old_rook = ret.squares[rook_source.to_index()]; + ret.squares[rook_source.to_index()] = Piece::None; + Coords rook_dest{5, c.y}; + ret.squares[rook_dest.to_index()] = old_rook; + } else if (move.castle_side & QueenSide) { + Coords c = Coords::from_index(move.source_square); + Coords rook_source{0, c.y}; + int8_t old_rook = ret.squares[rook_source.to_index()]; + ret.squares[rook_source.to_index()] = Piece::None; + Coords rook_dest{3, c.y}; + ret.squares[rook_dest.to_index()] = old_rook; + } + return ret; }