getSlideNJumpMoves([x, y], steps, oneStep) {
let moves = [];
+ // Don't add move twice when running on an infinite file:
+ let infiniteSteps = {};
outerLoop: for (let step of steps) {
+ if (!!infiniteSteps[(-step[0]) + "." + (-step[1])]) continue;
let i = V.ComputeX(x + step[0]);
let j = y + step[1];
while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
i = V.ComputeX(i + step[0]);
j += step[1];
}
- if (V.OnBoard(i, j) && this.canTake([x, y], [i, j]))
- moves.push(this.getBasicMove([x, y], [i, j]));
+ if (V.OnBoard(i, j)) {
+ if (i == x && j == y)
+ // Looped back onto initial square
+ infiniteSteps[step[0] + "." + step[1]] = true;
+ else if (this.canTake([x, y], [i, j]))
+ moves.push(this.getBasicMove([x, y], [i, j]));
+ }
}
return moves;
}
getSlideNJumpMoves([x, y], steps, oneStep) {
let moves = [];
+ // Don't add move twice when running on an infinite rank:
+ let infiniteSteps = {};
outerLoop: for (let step of steps) {
+ if (!!infiniteSteps[(-step[0]) + "." + (-step[1])]) continue;
let i = x + step[0];
let j = V.ComputeY(y + step[1]);
while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
i += step[0];
j = V.ComputeY(j + step[1]);
}
- if (V.OnBoard(i, j) && this.canTake([x, y], [i, j]))
- moves.push(this.getBasicMove([x, y], [i, j]));
+ if (V.OnBoard(i, j)) {
+ if (i == x && j == y)
+ // Looped back onto initial square
+ infiniteSteps[step[0] + "." + step[1]] = true;
+ else if (this.canTake([x, y], [i, j]))
+ moves.push(this.getBasicMove([x, y], [i, j]));
+ }
}
return moves;
}