X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FBall.js;h=734a921882fbb90787f12d25cdf87006de9de103;hb=7ddfec38b0804bf0bd0c5b5c6972d355902e9fb0;hp=85e33e6116b46bf6714cb9bdf356b63d6784dc1b;hpb=0d5335de5c94d780e03ac0aa3279b731c69455cc;p=vchess.git diff --git a/client/src/variants/Ball.js b/client/src/variants/Ball.js index 85e33e61..734a9218 100644 --- a/client/src/variants/Ball.js +++ b/client/src/variants/Ball.js @@ -7,7 +7,7 @@ export class BallRules extends ChessRules { return Object.assign( {}, ChessRules.PawnSpecs, - { promotions: ChessRules.PawnSpecs.promotions.concat([V.CHAMPION]) } + { promotions: ChessRules.PawnSpecs.promotions.concat([V.PHOENIX]) } ); } @@ -15,8 +15,8 @@ export class BallRules extends ChessRules { return false; } - static get CHAMPION() { - return 'c'; + static get PHOENIX() { + return 'h'; } static get BALL() { @@ -38,7 +38,7 @@ export class BallRules extends ChessRules { 'b': 'd', 'q': 't', 'k': 'l', - 'c': 'h' + 'h': 'i' }; } @@ -50,13 +50,13 @@ export class BallRules extends ChessRules { 'd': 'b', 't': 'q', 'l': 'k', - 'h': 'c' + 'i': 'h' }; } static get PIECES() { return ChessRules.PIECES - .concat([V.CHAMPION]) + .concat([V.PHOENIX]) .concat(Object.keys(V.HAS_BALL_DECODE)) .concat(['a']); } @@ -105,7 +105,7 @@ export class BallRules extends ChessRules { let prefix = ""; const withPrefix = Object.keys(V.HAS_BALL_DECODE) - .concat([V.CHAMPION]) + .concat([V.PHOENIX]) .concat(['a']); if (withPrefix.includes(b[1])) prefix = "Ball/"; return prefix + b; @@ -125,7 +125,7 @@ export class BallRules extends ChessRules { static GenRandInitFen(randomness) { if (randomness == 0) - return "rnbcqcnbr/ppppppppp/9/9/4a4/9/9/PPPPPPPPP/RNBCQCNBR w 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"]) { @@ -134,17 +134,26 @@ export class BallRules extends ChessRules { break; } - // Get random squares for every piece, totally freely + // Get random squares for every piece, with bishops and phoenixes + // on different colors: let positions = shuffle(ArrayFun.range(9)); - const composition = ['b', 'b', 'r', 'r', 'n', 'n', 'c', 'c', 'q']; - const rem2 = positions[0] % 2; + const composition = ['b', 'b', 'h', 'h', 'n', 'n', 'r', 'r', 'q']; + let rem2 = positions[0] % 2; if (rem2 == positions[1] % 2) { // Fix bishops (on different colors) - for (let i=2; i<9; i++) { + for (let i=4; i<9; i++) { if (positions[i] % 2 != rem2) [positions[1], positions[i]] = [positions[i], positions[1]]; } } + rem2 = positions[2] % 2; + if (rem2 == positions[3] % 2) { + // Fix phoenixes too: + for (let i=4; i<9; i++) { + if (positions[i] % 2 != rem2) + [positions[3], positions[i]] = [positions[i], positions[3]]; + } + } for (let i = 0; i < 9; i++) pieces[c][positions[i]] = composition[i]; } return ( @@ -173,16 +182,12 @@ export class BallRules extends ChessRules { return Object.assign( {}, ChessRules.steps, - // Add champion moves + // Add phoenix moves { - c: [ + h: [ [-2, -2], - [-2, 0], [-2, 2], - [0, -2], - [0, 2], [2, -2], - [2, 0], [2, 2], [-1, 0], [1, 0], @@ -258,8 +263,8 @@ export class BallRules extends ChessRules { // So base implementation is fine. getPotentialMovesFrom([x, y]) { - if (this.getPiece(x, y) == V.CHAMPION) - return this.getPotentialChampionMoves([x, y]); + if (this.getPiece(x, y) == V.PHOENIX) + return this.getPotentialPhoenixMoves([x, y]); return super.getPotentialMovesFrom([x, y]); } @@ -283,8 +288,8 @@ export class BallRules extends ChessRules { return moves; } - getPotentialChampionMoves(sq) { - return this.getSlideNJumpMoves(sq, V.steps[V.CHAMPION], "oneStep"); + getPotentialPhoenixMoves(sq) { + return this.getSlideNJumpMoves(sq, V.steps[V.PHOENIX], "oneStep"); } filterValid(moves) { @@ -321,10 +326,10 @@ export class BallRules extends ChessRules { return { p: 1, r: 3, - n: 4, + n: 3, b: 2, q: 5, - c: 4, + h: 3, a: 0 //ball: neutral }; }