Some simplifactions, a few fixes, update TODO
[vchess.git] / client / src / variants / Knightrelay1.js
index 3e7bf38..aba9529 100644 (file)
@@ -1,10 +1,25 @@
 import { ChessRules } from "@/base_rules";
 
-export const VariantRules = class Knightrelay1Rules extends ChessRules {
+export class Knightrelay1Rules extends ChessRules {
+
   static get HasEnpassant() {
     return false;
   }
 
+  static IsGoodPosition(position) {
+    if (!ChessRules.IsGoodPosition(position)) return false;
+    // Check that (at least) 2 knights per side are on the board
+    const rows = position.split("/");
+    let knights = { 'N': 0, 'n': 0 };
+    for (let row of rows) {
+      for (let i = 0; i < row.length; i++) {
+        if (['N','n'].includes(row[i])) knights[row[i]]++;
+      }
+    }
+    if (Object.values(knights).some(v => v < 2)) return false;
+    return true;
+  }
+
   getPotentialMovesFrom([x, y]) {
     let moves = super.getPotentialMovesFrom([x, y]);
 
@@ -97,7 +112,7 @@ export const VariantRules = class Knightrelay1Rules extends ChessRules {
     return {
       p: 1,
       r: 5,
-      n: 7, //the knight is valuable
+      n: 0, //the knight isn't captured - value doesn't matter
       b: 3,
       q: 9,
       k: 1000
@@ -118,7 +133,8 @@ export const VariantRules = class Knightrelay1Rules extends ChessRules {
     const finalSquare = V.CoordsToSquare(move.end);
     const piece = this.getPiece(move.start.x, move.start.y);
 
-    // Since pieces and pawns could move like knight, indicate start and end squares
+    // Since pieces and pawns could move like knight,
+    // indicate start and end squares
     let notation =
       piece.toUpperCase() +
       initSquare +
@@ -136,4 +152,5 @@ export const VariantRules = class Knightrelay1Rules extends ChessRules {
 
     return notation;
   }
+
 };