Advertisement
Guest User

Untitled

a guest
Jul 6th, 2022
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. constexpr U64 RIGHT_MASK = 0x7F7F7F7F7F7F7F7FULL;
  2. constexpr U64 LEFT_MASK = 0xFEFEFEFEFEFEFEFEULL;
  3. inline bool GameState::hasPlayerWon(const bool player) const
  4. {
  5.     if (player)
  6.     {
  7.         const U64 defended_once = ((boards[0] >> 7) & LEFT_MASK) | ((boards[0] >> 9) & RIGHT_MASK);
  8.         const U64 defended_twice = ((boards[0] >> 7) & LEFT_MASK) & ((boards[0] >> 9) & RIGHT_MASK);
  9.  
  10.         const U64 attack_right = ((boards[1] << 7) & RIGHT_MASK);
  11.         const U64 attack_left = ((boards[1] << 9) & LEFT_MASK);
  12.         const U64 attack_up = (boards[1] << 8) & ~boards[0];
  13.  
  14.         const U64 attacked_once = attack_right | attack_left | attack_up;
  15.         const U64 attacked_twice = (attack_right & attack_left) | (attack_right & attack_up) | (attack_left & attack_up);
  16.         const U64 attacked_thrice = attack_right & attack_left & attack_up;
  17.  
  18.         return ((attacked_once & ~defended_once) | (attacked_twice & ~defended_twice) | (attacked_thrice)) & 0xFFFF000000000000ULL;
  19.     }
  20.     else
  21.     {
  22.         const U64 defended_once = ((boards[1] << 7) & RIGHT_MASK) | ((boards[1] << 9) & LEFT_MASK);
  23.         const U64 defended_twice = ((boards[1] << 7) & RIGHT_MASK) & ((boards[1] << 9) & LEFT_MASK);
  24.  
  25.         const U64 attack_right = ((boards[0] >> 9) & RIGHT_MASK);
  26.         const U64 attack_left = ((boards[0] >> 7) & LEFT_MASK);
  27.         const U64 attack_up = (boards[0] >> 8) & ~boards[1];
  28.  
  29.         const U64 attacked_once = attack_right | attack_left | attack_up;
  30.         const U64 attacked_twice = (attack_right & attack_left) | (attack_right & attack_up) | (attack_left & attack_up);
  31.         const U64 attacked_thrice = attack_right & attack_left & attack_up;
  32.  
  33.         return ((attacked_once & ~defended_once) | (attacked_twice & ~defended_twice) | (attacked_thrice)) & 0xFFFFULL;
  34.     }
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement