Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* is_check for the current king position */
- bool Board::is_check(Color c)
- {
- Color opponent = get_opponent_color(c);
- int king_pos = BitboardHelper::get_position(board_[c][KING]);
- return
- (is_a_valid_move(king_pos, KING, opponent, false, false)
- || is_a_valid_move(king_pos, QUEEN, opponent, false, false)
- || is_a_valid_move(king_pos, KNIGHTS, opponent, false, false)
- || is_a_valid_move(king_pos, ROOKS, opponent, false, false)
- || is_a_valid_move(king_pos, BISHOPS, opponent, false, false)
- || is_a_valid_move(king_pos, PAWNS, opponent, false, false)
- || is_a_valid_move(king_pos, PAWNS, opponent, false, true)
- || is_a_valid_move(king_pos, PAWNS, opponent, true, false));
- }
- /* is_check for a given king position (each possible move) */
- bool Board::is_check(int king_pos, Color c)
- {
- Color opponent = get_opponent_color(c);
- return
- (is_a_valid_move(king_pos, KING, opponent, false, false)
- || is_a_valid_move(king_pos, QUEEN, opponent, false, false)
- || is_a_valid_move(king_pos, KNIGHTS, opponent, false, false)
- || is_a_valid_move(king_pos, ROOKS, opponent, false, false)
- || is_a_valid_move(king_pos, BISHOPS, opponent, false, false)
- || is_a_valid_move(king_pos, PAWNS, opponent, false, false)
- || is_a_valid_move(king_pos, PAWNS, opponent, false, true)
- || is_a_valid_move(king_pos, PAWNS, opponent, true, false));
- }
- bool Board::is_checkmate(Color c)
- {
- if (!is_check(c))
- return false;
- for (int m : BitboardHelper::get_positions(get_king_attacks(
- BitboardHelper::get_position(board_[c][KING]), c)))
- if (!is_check(m, c))
- return false;
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement