Advertisement
Guest User

Untitled

a guest
May 24th, 2015
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. /* is_check for the current king position */
  2. bool Board::is_check(Color c)
  3. {
  4.     Color opponent = get_opponent_color(c);
  5.     int king_pos = BitboardHelper::get_position(board_[c][KING]);
  6.  
  7.     return
  8.         (is_a_valid_move(king_pos, KING, opponent, false, false)
  9.          || is_a_valid_move(king_pos, QUEEN, opponent, false, false)
  10.          || is_a_valid_move(king_pos, KNIGHTS, opponent, false, false)
  11.          || is_a_valid_move(king_pos, ROOKS, opponent, false, false)
  12.          || is_a_valid_move(king_pos, BISHOPS, opponent, false, false)
  13.          || is_a_valid_move(king_pos, PAWNS, opponent, false, false)
  14.          || is_a_valid_move(king_pos, PAWNS, opponent, false, true)
  15.          || is_a_valid_move(king_pos, PAWNS, opponent, true, false));
  16. }
  17.  
  18. /* is_check for a given king position (each possible move) */
  19. bool Board::is_check(int king_pos, Color c)
  20. {
  21.     Color opponent = get_opponent_color(c);
  22.  
  23.     return
  24.         (is_a_valid_move(king_pos, KING, opponent, false, false)
  25.          || is_a_valid_move(king_pos, QUEEN, opponent, false, false)
  26.          || is_a_valid_move(king_pos, KNIGHTS, opponent, false, false)
  27.          || is_a_valid_move(king_pos, ROOKS, opponent, false, false)
  28.          || is_a_valid_move(king_pos, BISHOPS, opponent, false, false)
  29.          || is_a_valid_move(king_pos, PAWNS, opponent, false, false)
  30.          || is_a_valid_move(king_pos, PAWNS, opponent, false, true)
  31.          || is_a_valid_move(king_pos, PAWNS, opponent, true, false));
  32. }
  33.  
  34. bool Board::is_checkmate(Color c)
  35. {
  36.     if (!is_check(c))
  37.         return false;
  38.  
  39.     for (int m : BitboardHelper::get_positions(get_king_attacks(
  40.                     BitboardHelper::get_position(board_[c][KING]), c)))
  41.         if (!is_check(m, c))
  42.             return false;
  43.  
  44.     return true;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement