X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=public%2Fjavascripts%2Fvariants%2FUpsidedown.js;h=3e389d0d13f2ea5eaa63cdd213a5df38d6809c04;hb=69f3d8014e594ef949792d04d97b8286e9c2c268;hp=aa9a696dd0c6fddbf136bbdd9447a3f3dff0d311;hpb=388e4c401f05b1f6a4c54e33c9da9114969a53c0;p=vchess.git diff --git a/public/javascripts/variants/Upsidedown.js b/public/javascripts/variants/Upsidedown.js index aa9a696d..3e389d0d 100644 --- a/public/javascripts/variants/Upsidedown.js +++ b/public/javascripts/variants/Upsidedown.js @@ -1,6 +1,8 @@ -class UpsidedownRules extends ChessRUles +class UpsidedownRules extends ChessRules { - static HasFlags() { return false; } + static get HasFlags() { return false; } + + static get HasEnpassant() { return false; } getPotentialKingMoves(sq) { @@ -16,27 +18,40 @@ class UpsidedownRules extends ChessRUles { let positions = _.range(8); - let randIndex = 2 * _.random(3); - let bishop1Pos = positions[randIndex]; - let randIndex_tmp = 2 * _.random(3) + 1; - let bishop2Pos = positions[randIndex_tmp]; + let randIndex = _.random(7); + const kingPos = positions[randIndex]; + positions.splice(randIndex, 1); + + // At least a knight must be next to the king: + let knight1Pos = undefined; + if (kingPos == 0) + knight1Pos = 1; + else if (kingPos == V.size.y-1) + knight1Pos = V.size.y-2; + else + knight1Pos = kingPos + (Math.random() < 0.5 ? 1 : -1); + // Search for knight1Pos index in positions and remove it + const knight1Index = positions.indexOf(knight1Pos); + positions.splice(knight1Index, 1); + + // King+knight1 are on two consecutive squares: one light, one dark + randIndex = 2 * _.random(2); + const bishop1Pos = positions[randIndex]; + let randIndex_tmp = 2 * _.random(2) + 1; + const bishop2Pos = positions[randIndex_tmp]; positions.splice(Math.max(randIndex,randIndex_tmp), 1); positions.splice(Math.min(randIndex,randIndex_tmp), 1); - randIndex = _.random(5); - let knight1Pos = positions[randIndex]; - positions.splice(randIndex, 1); - randIndex = _.random(4); - let knight2Pos = positions[randIndex]; + randIndex = _.random(3); + const knight2Pos = positions[randIndex]; positions.splice(randIndex, 1); - randIndex = _.random(3); - let queenPos = positions[randIndex]; + randIndex = _.random(2); + const queenPos = positions[randIndex]; positions.splice(randIndex, 1); - let rook1Pos = positions[0]; - let kingPos = positions[1]; - let rook2Pos = positions[2]; + const rook1Pos = positions[0]; + const rook2Pos = positions[1]; pieces[c][rook1Pos] = 'r'; pieces[c][knight1Pos] = 'n'; @@ -47,10 +62,10 @@ class UpsidedownRules extends ChessRUles pieces[c][knight2Pos] = 'n'; pieces[c][rook2Pos] = 'r'; } - return pieces["w"].join("") + + return pieces["w"].join("").toUpperCase() + "/PPPPPPPP/8/8/8/8/pppppppp/" + - pieces["b"].join("").toUpperCase() + - " w 1111 -"; //add turn + flags + enpassant + pieces["b"].join("") + + " w"; //no castle, no en-passant } }