First working draft of MarseilleRules; almost OK (bug in computerMove turn/subturn)
[vchess.git] / public / javascripts / variants / Grand.js
index ec2afd8..7f5fe42 100644 (file)
@@ -18,10 +18,30 @@ class GrandRules extends ChessRules
                return true;
        }
 
-       static GenRandInitFen()
+       static IsGoodEnpassant(enpassant)
        {
-               const fen = ChessRules.GenRandInitFen();
-               return fen.replace(" w 1111", " w 1111 0000000000");
+               if (enpassant != "-")
+               {
+                       const squares = enpassant.split(",");
+                       if (squares.length > 2)
+                               return false;
+                       for (let sq of squares)
+                       {
+                               const ep = V.SquareToCoords(sq);
+                               if (isNaN(ep.x) || !V.OnBoard(ep))
+                                       return false;
+                       }
+               }
+               return true;
+       }
+
+       static ParseFen(fen)
+       {
+               const fenParts = fen.split(" ");
+               return Object.assign(
+                       ChessRules.ParseFen(fen),
+                       { captured: fenParts[4] }
+               );
        }
 
        getFen()
@@ -32,7 +52,7 @@ class GrandRules extends ChessRules
        getCapturedFen()
        {
                let counts = _.map(_.range(10), 0);
-               for (let i=0; i<V.PIECES.length; i++)
+               for (let i=0; i<V.PIECES.length-1; i++) //-1: no king captured
                {
                        counts[i] = this.captured["w"][V.PIECES[i]];
                        counts[5+i] = this.captured["b"][V.PIECES[i]];
@@ -215,13 +235,12 @@ class GrandRules extends ChessRules
                                // TODO: some redundant checks
                                if (epsq.x == x+shift && Math.abs(epsq.y - y) == 1)
                                {
-                                       let epStep = epsq.y - y;
-                                       var enpassantMove = this.getBasicMove([x,y], [x+shift,y+epStep]);
+                                       var enpassantMove = this.getBasicMove([x,y], [x+shift,epsq.y]);
                                        enpassantMove.vanish.push({
                                                x: x,
-                                               y: y+epStep,
+                                               y: epsq.y,
                                                p: 'p',
-                                               c: this.getColor(x,y+epStep)
+                                               c: this.getColor(x,epsq.y)
                                        });
                                        moves.push(enpassantMove);
                                }
@@ -355,7 +374,7 @@ class GrandRules extends ChessRules
                return pieces["b"].join("") +
                        "/pppppppppp/10/10/10/10/10/10/PPPPPPPPPP/" +
                        pieces["w"].join("").toUpperCase() +
-                       " w 1111 -";
+                       " w 1111 - 0000000000";
        }
 }