X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fvariants%2FChakart.js;h=119ad5490854225eface2e7a9870adb8a7e03586;hb=978fa11c8c9838018124a36ec14e06856d948d1e;hp=1c7225c7bd6b3bf8a6911f2df2d02c007a30ceb2;hpb=b36db5258400648f66727aba97fd0f1ee0de7640;p=vchess.git diff --git a/client/src/variants/Chakart.js b/client/src/variants/Chakart.js index 1c7225c7..119ad549 100644 --- a/client/src/variants/Chakart.js +++ b/client/src/variants/Chakart.js @@ -155,7 +155,7 @@ export class ChakartRules extends ChessRules { } if (sumElts != V.size.y) return false; } - if (kings['k'] + kings['l'] != 1 || kings['K'] + kings['L'] != 1) + if (kings['k'] + kings['l'] == 0 || kings['K'] + kings['L'] == 0) return false; return true; } @@ -1316,10 +1316,45 @@ export class ChakartRules extends ChessRules { return moves; } + static get VALUES() { + return Object.assign( + {}, + ChessRules.VALUES, + { + s: 1, + u: 5, + o: 3, + c: 3, + t: 9, + l: 1000, + e: 0, + d: 0, + w: 0, + m: 0 + } + ); + } + + static get SEARCH_DEPTH() { + return 1; + } + getComputerMove() { - // Random mover: const moves = this.getAllValidMoves(); - let move1 = moves[randInt(moves.length)]; + // Split into "normal" and "random" moves: + // (Next splitting condition is OK because cannot take self object + // without a banana or bomb on the way). + const deterministicMoves = moves.filter(m => { + return m.vanish.every(a => a.c != 'a' || a.p == V.MUSHROOM); + }); + const randomMoves = moves.filter(m => { + return m.vanish.some(a => a.c == 'a' && a.p != V.MUSHROOM); + }); + if (Math.random() < deterministicMoves.length / randomMoves.length) + // Play a deterministic one: capture king or material if possible + return super.getComputerMove(deterministicMoves); + // Play a random effect move, at random: + let move1 = randomMoves[randInt(moves.length)]; this.play(move1); let move2 = undefined; if (this.subTurn == 2) {