fixed getLegalMoves

This commit is contained in:
ramollia
2025-12-04 14:48:35 +01:00
parent f4ee992166
commit d74e7b4517

View File

@@ -123,35 +123,33 @@ public class BitboardReversi extends BitboardGame<BitboardReversi> {
} }
private long computeMoves(long player, long opponent, int shift, long mask) { private long computeMoves(long player, long opponent, int shift, long mask) {
long moves = player; long moves = shift(player, shift, mask) & opponent;
long captured = moves;
while (true) { while (moves != 0) {
if (shift > 0) moves = (moves << shift) & mask; moves = shift(moves, shift, mask) & opponent;
else moves = (moves >>> -shift) & mask; captured |= moves;
long newMoves = moves & opponent;
if (newMoves == 0) break;
moves = newMoves;
} }
if (shift > 0) moves = (moves << shift) & mask; long landing = shift(captured, shift, mask);
else moves = (moves >>> -shift) & mask; return landing & ~(player | opponent);
return moves & ~(player | opponent);
} }
private long computeFlips(long move, long player, long opponent, int shift, long mask) { private long computeFlips(long move, long player, long opponent, int shift, long mask) {
long flips = 0L; long flips = 0L;
long pos = move;
long moves = move;
while (true) { while (true) {
if (shift > 0) moves = (moves << shift) & mask; pos = shift(pos, shift, mask);
else moves = (moves >>> -shift) & mask; if (pos == 0) return 0L;
if ((moves & opponent) != 0) flips |= moves; if ((pos & opponent) != 0) flips |= pos;
else if ((moves & player) != 0) return flips; else if ((pos & player) != 0) return flips;
else return 0L; else return 0L;
} }
} }
private long shift(long bit, int shift, long mask) {
return shift > 0 ? (bit << shift) & mask : (bit >>> -shift) & mask;
}
} }