From 222adbb8f0d51858c4f0ad251a200f7ad9d14256 Mon Sep 17 00:00:00 2001 From: Karma Riuk Date: Wed, 5 Feb 2025 14:25:35 +0100 Subject: [PATCH] removed the is_capturing flag of move --- cpp/src/board.cpp | 5 +++-- cpp/src/main.cpp | 4 ++-- cpp/src/move.hpp | 2 +- cpp/src/pieces/pawn.cpp | 10 ++-------- cpp/src/pieces/piece.cpp | 19 ++++++------------- 5 files changed, 14 insertions(+), 26 deletions(-) diff --git a/cpp/src/board.cpp b/cpp/src/board.cpp index bc2c419..59e8d52 100644 --- a/cpp/src/board.cpp +++ b/cpp/src/board.cpp @@ -220,6 +220,7 @@ Board Board::make_move(Move move) const { // -- Check for castling rights ret.w_castle_rights = w_castle_rights; ret.b_castle_rights = b_castle_rights; + bool is_capturing = squares[move.target_square] != Piece::None; if (white_to_play) { if ((squares[move.source_square] & 0b111) == King) ret.w_castle_rights = NeitherSide; @@ -232,7 +233,7 @@ Board Board::make_move(Move move) const { } Coords target = Coords::from_index(move.target_square); - if (move.is_capturing && target.y == 7 + if (is_capturing && target.y == 7 && (squares[move.target_square] & 0b111) == Rook) { if (target.x == 0 && (ret.b_castle_rights & QueenSide)) ret.b_castle_rights &= ~(QueenSide); @@ -251,7 +252,7 @@ Board Board::make_move(Move move) const { } Coords target = Coords::from_index(move.target_square); - if (move.is_capturing && target.y == 0 + if (is_capturing && target.y == 0 && (squares[move.target_square] & 0b111) == Rook) { if (target.x == 0 && (ret.w_castle_rights & QueenSide)) ret.w_castle_rights &= ~(QueenSide); diff --git a/cpp/src/main.cpp b/cpp/src/main.cpp index b865c86..69872fd 100644 --- a/cpp/src/main.cpp +++ b/cpp/src/main.cpp @@ -5,8 +5,8 @@ int main(int argc, char* argv[]) { std::string pos = - "r2q1rk1/pP1p2pp/Q4n2/bbp1p3/Np6/1B3NBn/pPPP1PPP/R3K2R b KQ - 0 5"; + "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; // Board b = Board::setup_fen_position(pos); - perft(); + perft(pos); return 0; } diff --git a/cpp/src/move.hpp b/cpp/src/move.hpp index 68a8d92..129c53d 100644 --- a/cpp/src/move.hpp +++ b/cpp/src/move.hpp @@ -11,7 +11,7 @@ struct Move { int8_t source_square; int8_t target_square; - bool is_capturing = false; + // bool is_capturing = false; CastleSide castle_side = CastleSide::NeitherSide; bool en_passant = false; int8_t promoting_to = Piece::None; diff --git a/cpp/src/pieces/pawn.cpp b/cpp/src/pieces/pawn.cpp index a52f0a8..c7e087f 100644 --- a/cpp/src/pieces/pawn.cpp +++ b/cpp/src/pieces/pawn.cpp @@ -21,7 +21,6 @@ std::vector pawn_moves(const Board& b, const Coords xy) { ret.push_back(Move{ xy.to_index(), left.to_index(), - .is_capturing = true, .promoting_to = (int8_t) (my_colour | piece) }); else @@ -43,7 +42,6 @@ std::vector pawn_moves(const Board& b, const Coords xy) { ret.push_back(Move{ xy.to_index(), right.to_index(), - .is_capturing = true, .promoting_to = (int8_t) (my_colour | piece) }); else @@ -56,12 +54,8 @@ std::vector pawn_moves(const Board& b, const Coords xy) { Coords c = Coords::from_index(b.en_passant_target); int dy = my_colour == Colour::White ? 1 : -1; if (c.y == xy.y + dy && (c.x == xy.x - 1 || c.x == xy.x + 1)) { - ret.push_back(Move{ - xy.to_index(), - c.to_index(), - .is_capturing = true, - .en_passant = true - }); + ret.push_back(Move{xy.to_index(), c.to_index(), .en_passant = true} + ); } } diff --git a/cpp/src/pieces/piece.cpp b/cpp/src/pieces/piece.cpp index ea353be..c6e638a 100644 --- a/cpp/src/pieces/piece.cpp +++ b/cpp/src/pieces/piece.cpp @@ -53,18 +53,11 @@ legal_moves(int8_t p, const Board& b, const Coords xy, bool looking_for_check) { std::optional move_for_position(const Board& board, const Coords source, const Coords dest) { - if (!dest.is_within_bounds()) + if (!dest.is_within_bounds() + || board.colour_at(source) == board.colour_at(dest)) return {}; - int8_t piece = board.squares[dest.to_index()]; - if (piece == Piece::None) - return Move{source.to_index(), dest.to_index()}; - - int8_t source_colour = board.colour_at(source); - int8_t dest_colour = board.colour_at(dest); - if (source_colour != dest_colour) - return Move{source.to_index(), dest.to_index(), true}; - return {}; + return Move{source.to_index(), dest.to_index()}; } std::vector @@ -74,11 +67,11 @@ look_direction(const Board& board, const Coords xy, int mult_dx, int mult_dy) { int dx = mult_dx * d; int dy = mult_dy * d; - std::optional move = - move_for_position(board, xy, Coords{xy.x + dx, xy.y + dy}); + Coords target{xy.x + dx, xy.y + dy}; + std::optional move = move_for_position(board, xy, target); if (move.has_value()) { ret.push_back(move.value()); - if (move.value().is_capturing) + if (board.squares[target.to_index()] != Piece::None) break; } else { break;