Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- constexpr U64 RIGHT_MASK = 0x7F7F7F7F7F7F7F7FULL;
- constexpr U64 LEFT_MASK = 0xFEFEFEFEFEFEFEFEULL;
- inline bool GameState::hasPlayerWon(const bool player) const
- {
- if (player)
- {
- const U64 defended_once = ((boards[0] >> 7) & LEFT_MASK) | ((boards[0] >> 9) & RIGHT_MASK);
- const U64 defended_twice = ((boards[0] >> 7) & LEFT_MASK) & ((boards[0] >> 9) & RIGHT_MASK);
- const U64 attack_right = ((boards[1] << 7) & RIGHT_MASK);
- const U64 attack_left = ((boards[1] << 9) & LEFT_MASK);
- const U64 attack_up = (boards[1] << 8) & ~boards[0];
- const U64 attacked_once = attack_right | attack_left | attack_up;
- const U64 attacked_twice = (attack_right & attack_left) | (attack_right & attack_up) | (attack_left & attack_up);
- const U64 attacked_thrice = attack_right & attack_left & attack_up;
- return ((attacked_once & ~defended_once) | (attacked_twice & ~defended_twice) | (attacked_thrice)) & 0xFFFF000000000000ULL;
- }
- else
- {
- const U64 defended_once = ((boards[1] << 7) & RIGHT_MASK) | ((boards[1] << 9) & LEFT_MASK);
- const U64 defended_twice = ((boards[1] << 7) & RIGHT_MASK) & ((boards[1] << 9) & LEFT_MASK);
- const U64 attack_right = ((boards[0] >> 9) & RIGHT_MASK);
- const U64 attack_left = ((boards[0] >> 7) & LEFT_MASK);
- const U64 attack_up = (boards[0] >> 8) & ~boards[1];
- const U64 attacked_once = attack_right | attack_left | attack_up;
- const U64 attacked_twice = (attack_right & attack_left) | (attack_right & attack_up) | (attack_left & attack_up);
- const U64 attacked_thrice = attack_right & attack_left & attack_up;
- return ((attacked_once & ~defended_once) | (attacked_twice & ~defended_twice) | (attacked_thrice)) & 0xFFFFULL;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement