From efb20746c30ac26f258f9c5de6dfb70b91980de4 Mon Sep 17 00:00:00 2001 From: Benjamin Auder Date: Tue, 27 Nov 2018 11:50:49 +0100 Subject: [PATCH] Fix captures and some moves for Grand & Wildebeest --- public/javascripts/base_rules.js | 15 +++++++++------ public/javascripts/components/game.js | 7 ++++++- public/javascripts/variants/Grand.js | 1 - public/javascripts/variants/Wildebeest.js | 2 ++ 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/public/javascripts/base_rules.js b/public/javascripts/base_rules.js index 26c74477..42775dab 100644 --- a/public/javascripts/base_rules.js +++ b/public/javascripts/base_rules.js @@ -284,7 +284,7 @@ class ChessRules i += step[0]; j += step[1]; } - if (i>=0 && i<8 && j>=0 && j<8 && this.canTake([x,y], [i,j])) + if (i>=0 && i=0 && j=0 && x+pawnShift<8) + if (x+pawnShift>=0 && x+pawnShift=0 && y+i<8 && this.getPiece(x+pawnShift,y+i)==VariantRules.PAWN + if (y+i>=0 && y+i=0 && rx<8 && ry>=0 && ry<8 && this.board[rx][ry] == VariantRules.EMPTY - && !oneStep) + while (rx>=0 && rx=0 && ry=0 && rx<8 && ry>=0 && ry<8 && this.board[rx][ry] != VariantRules.EMPTY + if (rx>=0 && rx=0 && ry0 ? document.cookie.substr(-1)=="1" : false, + gameId: "", //used to limit computer moves' time }; }, render(h) { @@ -585,7 +586,6 @@ Vue.component('my-game', { this.newGame("computer"); }, newGame: function(mode, fenInit, color, oppId, moves, continuation) { - //const fen = "1n2T1n0/p2pO2p/1s1k1s2/8/3S2p1/2U2cO1/P3PuPP/3K1BR1 0100"; const fen = fenInit || VariantRules.GenRandInitFen(); console.log(fen); //DEBUG this.score = "*"; @@ -614,6 +614,8 @@ Vue.component('my-game', { } return; } + // random enough (TODO: function) + this.gameId = (Date.now().toString(36) + Math.random().toString(36).substr(2, 7)).toUpperCase(); this.vr = new VariantRules(fen, moves || []); this.pgnTxt = ""; //redundant with this.score = "*", but cleaner this.mode = mode; @@ -654,8 +656,11 @@ Vue.component('my-game', { playComputerMove: function() { const timeStart = Date.now(); const nbMoves = this.vr.moves.length; //using played moves to know if search finished + const gameId = this.gameId; //to know if game was reset before timer end setTimeout( () => { + if (gameId != this.gameId) + return; //game stopped const L = this.vr.moves.length; if (nbMoves == L || !this.vr.moves[L-1].notation) //move search didn't finish this.vr.shouldReturn = true; diff --git a/public/javascripts/variants/Grand.js b/public/javascripts/variants/Grand.js index db0543fc..8cdf6d7d 100644 --- a/public/javascripts/variants/Grand.js +++ b/public/javascripts/variants/Grand.js @@ -191,7 +191,6 @@ class GrandRules extends ChessRules if (move.vanish.length==2 && move.appear.length==1 && move.vanish[1].p != VariantRules.PAWN) { - // Capture: update this.captures this.captures[move.vanish[1].c][move.vanish[1].p] = Math.max(0, this.captures[move.vanish[1].c][move.vanish[1].p]-1); } diff --git a/public/javascripts/variants/Wildebeest.js b/public/javascripts/variants/Wildebeest.js index 2ecc01be..f198eeb0 100644 --- a/public/javascripts/variants/Wildebeest.js +++ b/public/javascripts/variants/Wildebeest.js @@ -165,6 +165,8 @@ class WildebeestRules extends ChessRules V.steps[V.KNIGHT].concat(V.steps[V.CAMEL])); } + // TODO: stalemate is a win (?!) + static get VALUES() { return Object.assign( ChessRules.VALUES, -- 2.44.0