From c9de889b6e352dd5b0873dc49fece9a501aef6f6 Mon Sep 17 00:00:00 2001 From: Fabian Fichter Date: Tue, 31 Mar 2020 19:46:28 +0200 Subject: [PATCH] Fix king evasions in palace for Janggi Closes #90. --- src/movegen.cpp | 13 +++++++++++++ tests/perft.sh | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/movegen.cpp b/src/movegen.cpp index 38dc282..200d30a 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -521,6 +521,19 @@ ExtMove* generate(const Position& pos, ExtMove* moveList) { while (b) moveList = make_move_and_gating(pos, moveList, us, ksq, pop_lsb(&b)); + // Janggi king palace moves + if (pos.diagonal_lines() & ksq) + { + PieceType movePt = pos.king_type(); + PieceType diagType = movePt == WAZIR ? FERS : movePt == SOLDIER ? PAWN : movePt == ROOK ? BISHOP : NO_PIECE_TYPE; + if (diagType) + { + b = attacks_bb(us, diagType, ksq, pos.pieces()) & pos.board_bb(us, KING) & pos.diagonal_lines() & ~pos.pieces(us) & ~sliderAttacks; + while (b) + moveList = make_move_and_gating(pos, moveList, us, ksq, pop_lsb(&b)); + } + } + if (more_than_one(pos.checkers())) return moveList; // Double check, only a king move can save the day diff --git a/tests/perft.sh b/tests/perft.sh index f1eab99..59f21e4 100755 --- a/tests/perft.sh +++ b/tests/perft.sh @@ -74,8 +74,8 @@ if [[ $1 == "largeboard" ]]; then expect perft.exp courier startpos 4 500337 > /dev/null expect perft.exp grand startpos 3 259514 > /dev/null expect perft.exp xiangqi startpos 4 3290240 > /dev/null - expect perft.exp janggi startpos 4 948462 > /dev/null - expect perft.exp janggi "fen 1n1kaabn1/cr2N4/5C1c1/p1pNp3p/9/9/P1PbP1P1P/3r1p3/4A4/R1BA1KB1R b - - 0 1" 4 70254 > /dev/null + expect perft.exp janggi startpos 4 948468 > /dev/null + expect perft.exp janggi "fen 1n1kaabn1/cr2N4/5C1c1/p1pNp3p/9/9/P1PbP1P1P/3r1p3/4A4/R1BA1KB1R b - - 0 1" 4 70256 > /dev/null fi rm perft.exp -- 1.7.0.4