Fix Parachute, allow 3 squares in Ball variant
authorBenjamin Auder <benjamin.auder@somewhere>
Thu, 2 Apr 2020 09:37:11 +0000 (11:37 +0200)
committerBenjamin Auder <benjamin.auder@somewhere>
Thu, 2 Apr 2020 09:37:11 +0000 (11:37 +0200)
client/src/translations/rules/Ball/en.pug
client/src/translations/rules/Ball/es.pug
client/src/translations/rules/Ball/fr.pug
client/src/variants/Ball.js
client/src/variants/Parachute.js

index 63859cf..c70fb46 100644 (file)
@@ -14,7 +14,7 @@ ul
 
 p.
   All pieces represent players on a field of some ball game,
 
 p.
   All pieces represent players on a field of some ball game,
-  so they can move up to two squares only for a better realism.
+  so they can move up to three squares only for a better realism.
 
 figure.diagram-container
   .diagram.diag12
 
 figure.diagram-container
   .diagram.diag12
index 69c18c0..916ef80 100644 (file)
@@ -14,7 +14,7 @@ ul
 
 p.
   Todas las piezas representan jugadores en un área de juego de pelota,
 
 p.
   Todas las piezas representan jugadores en un área de juego de pelota,
-  entonces solo se mueven dos casillas como máximo para un mejor realismo.
+  entonces solo se mueven tres casillas como máximo para un mejor realismo.
 
 figure.diagram-container
   .diagram.diag12
 
 figure.diagram-container
   .diagram.diag12
index 141cd09..f38bfbd 100644 (file)
@@ -14,7 +14,7 @@ ul
 
 p.
   Toutes les pièces représentent des joueurs sur un terrain d'un certain
 
 p.
   Toutes les pièces représentent des joueurs sur un terrain d'un certain
-  jeu de ballon, donc elles ne se déplacent que de deux cases au maximum
+  jeu de ballon, donc elles ne se déplacent que de trois cases au maximum
   pour un meilleur réalisme.
 
 figure.diagram-container
   pour un meilleur réalisme.
 
 figure.diagram-container
index 734a921..3903e2b 100644 (file)
@@ -268,7 +268,7 @@ export class BallRules extends ChessRules {
     return super.getPotentialMovesFrom([x, y]);
   }
 
     return super.getPotentialMovesFrom([x, y]);
   }
 
-  // "Sliders": at most 2 steps
+  // "Sliders": at most 3 steps
   getSlideNJumpMoves([x, y], steps, oneStep) {
     let moves = [];
     outerLoop: for (let step of steps) {
   getSlideNJumpMoves([x, y], steps, oneStep) {
     let moves = [];
     outerLoop: for (let step of steps) {
@@ -277,7 +277,7 @@ export class BallRules extends ChessRules {
       let stepCount = 1;
       while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
         moves.push(this.getBasicMove([x, y], [i, j]));
       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 == 2) continue outerLoop;
+        if (oneStep || stepCount == 3) continue outerLoop;
         i += step[0];
         j += step[1];
         stepCount++;
         i += step[0];
         j += step[1];
         stepCount++;
index 0718635..86b1ce8 100644 (file)
@@ -14,6 +14,25 @@ export class ParachuteRules extends ChessRules {
     return true;
   }
 
     return true;
   }
 
+  static IsGoodPosition(position) {
+    if (position.length == 0) return false;
+    const rows = position.split("/");
+    if (rows.length != V.size.x) return false;
+    for (let row of rows) {
+      let sumElts = 0;
+      for (let i = 0; i < row.length; i++) {
+        if (V.PIECES.includes(row[i].toLowerCase())) sumElts++;
+        else {
+          const num = parseInt(row[i]);
+          if (isNaN(num)) return false;
+          sumElts += num;
+        }
+      }
+      if (sumElts != V.size.y) return false;
+    }
+    return true;
+  }
+
   static ParseFen(fen) {
     const fenParts = fen.split(" ");
     return Object.assign(
   static ParseFen(fen) {
     const fenParts = fen.split(" ");
     return Object.assign(
@@ -166,6 +185,13 @@ export class ParachuteRules extends ChessRules {
     return true;
   }
 
     return true;
   }
 
+  underCheck(color) {
+    if (this.kingPos[color][0] < 0)
+      // A king outside the board isn't under check
+      return false;
+    return this.isAttacked(this.kingPos[color], V.GetOppCol(color));
+  }
+
   prePlay(move) {
     super.prePlay(move);
     if (move.vanish.length == 0) this.reserve[this.turn][move.appear[0].p]--;
   prePlay(move) {
     super.prePlay(move);
     if (move.vanish.length == 0) this.reserve[this.turn][move.appear[0].p]--;