X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FBall.js;h=47689757d5e78c7d18ee1e7fae1f0e0d5724ca88;hb=4313762da3237b04f204e121a20cab3ba7bb5dd2;hp=04ad1feb697d2324be2ad6e2fc8d9a7eaf82c495;hpb=7e8a7ea1cb66adb4a987badfb0a3c2f99a21bd0a;p=vchess.git diff --git a/client/src/variants/Ball.js b/client/src/variants/Ball.js index 04ad1feb..47689757 100644 --- a/client/src/variants/Ball.js +++ b/client/src/variants/Ball.js @@ -36,7 +36,7 @@ export class BallRules extends ChessRules { } static get BALL() { - // Ball is already taken: + // 'b' is already taken: return "aa"; } @@ -95,17 +95,18 @@ export class BallRules extends ChessRules { const rows = position.split("/"); if (rows.length != V.size.x) return false; let pieces = { "w": 0, "b": 0 }; - const withBall = Object.keys(V.HAS_BALL_DECODE).concat([V.BALL]); + const withBall = Object.keys(V.HAS_BALL_DECODE).concat(['a']); let ballCount = 0; for (let row of rows) { let sumElts = 0; for (let i = 0; i < row.length; i++) { const lowerRi = row[i].toLowerCase(); if (V.PIECES.includes(lowerRi)) { - if (lowerRi != V.BALL) pieces[row[i] == lowerRi ? "b" : "w"]++; + if (lowerRi != 'a') pieces[row[i] == lowerRi ? "b" : "w"]++; if (withBall.includes(lowerRi)) ballCount++; sumElts++; - } else { + } + else { const num = parseInt(row[i], 10); if (isNaN(num)) return false; sumElts += num; @@ -136,7 +137,7 @@ export class BallRules extends ChessRules { const withPrefix = Object.keys(V.HAS_BALL_DECODE) .concat([V.PHOENIX]) - .concat(['a']); + .concat(['a', 'w']); //TODO: 'w' for backward compatibility - to remove if (withPrefix.includes(b[1])) prefix = "Ball/"; return prefix + b; } @@ -185,13 +186,13 @@ export class BallRules extends ChessRules { ); } - static GenRandInitFen(randomness) { - if (randomness == 0) + static GenRandInitFen(options) { + if (options.randomness == 0) return "hbnrqrnhb/ppppppppp/9/9/4a4/9/9/PPPPPPPPP/HBNRQRNHB w 0 - -"; let pieces = { w: new Array(9), b: new Array(9) }; for (let c of ["w", "b"]) { - if (c == 'b' && randomness == 1) { + if (c == 'b' && options.randomness == 1) { pieces['b'] = pieces['w']; break; } @@ -204,8 +205,10 @@ export class BallRules extends ChessRules { if (rem2 == positions[1] % 2) { // Fix bishops (on different colors) for (let i=4; i<9; i++) { - if (positions[i] % 2 != rem2) + if (positions[i] % 2 != rem2) { [positions[1], positions[i]] = [positions[i], positions[1]]; + break; + } } } rem2 = positions[2] % 2; @@ -337,7 +340,8 @@ export class BallRules extends ChessRules { }) ); } - } else if (mv.vanish[1].c == mv.vanish[0].c) { + } + else if (mv.vanish[1].c == mv.vanish[0].c) { // Pass the ball: the passing unit does not disappear mv.appear.push(JSON.parse(JSON.stringify(mv.vanish[0]))); mv.appear[0].p = V.HAS_BALL_CODE[mv.vanish[1].p]; @@ -407,28 +411,13 @@ export class BallRules extends ChessRules { return moves; } - // "Sliders": at most 3 steps - getSlideNJumpMoves([x, y], steps, oneStep) { - let moves = []; - outerLoop: for (let step of steps) { - let i = x + step[0]; - let j = y + step[1]; - let stepCount = 1; - while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) { - moves.push(this.getBasicMove([x, y], [i, j])); - if (oneStep || stepCount == 3) continue outerLoop; - i += step[0]; - j += step[1]; - stepCount++; - } - if (V.OnBoard(i, j) && this.canTake([x, y], [i, j])) - moves.push(this.getBasicMove([x, y], [i, j])); - } - return moves; + getSlideNJumpMoves(sq, steps, nbSteps) { + // "Sliders": at most 3 steps + return super.getSlideNJumpMoves(sq, steps, !nbSteps ? 3 : 1); } getPotentialPhoenixMoves(sq) { - return this.getSlideNJumpMoves(sq, V.steps[V.PHOENIX], "oneStep"); + return super.getSlideNJumpMoves(sq, V.steps[V.PHOENIX], 1); } getPmove(move) {