X-Git-Url: https://git.auder.net/?a=blobdiff_plain;ds=sidebyside;f=client%2Fsrc%2Fvariants%2FChakart.js;h=12a84bcae904cb43223d9b95f104faaa0a0556ea;hb=ad030c7d24804fbfa06158e93d89a3f101d2c8b3;hp=5d79f4d0888c5c1b060d982cbc1fdc4a2c69bfe8;hpb=c6624915379363caa432719a6d76a32e09d7136d;p=vchess.git diff --git a/client/src/variants/Chakart.js b/client/src/variants/Chakart.js index 5d79f4d0..12a84bca 100644 --- a/client/src/variants/Chakart.js +++ b/client/src/variants/Chakart.js @@ -1,23 +1,38 @@ import { ChessRules } from "@/base_rules"; export class ChakartRules extends ChessRules { - // NOTE: getBasicMove, ajouter les bonus à vanish array - // + déterminer leur effet (si cavalier) ou case (si banane ou bombe) - // (L'effet doit être caché au joueur : devrait être OK) - // - // Saut possible par dessus bonus ou champis mais pas bananes ou bombes -//==> redefinir isAttackedBySlide et getPotentialSlide... - -// keep track of captured pieces: comme Grand; pieces can get back to board with toadette bonus. -// --> pour ce bonus, passer "capture" temporairement en "reserve" pour permettre de jouer le coup. + static get CorrConfirm() { + // Because of bonus effects + return false; + } - // "pièces" supplémentaires : bananes, bombes, champis, bonus --> + couleur ? - // (Semble mieux sans couleur => couleur spéciale indiquant que c'est pas jouable) - // (Attention: pas jouables cf. getPotentialMoves...) + static get CanAnalyze() { + return false; + } hoverHighlight(x, y) { - // TODO: exact squares - return this.subTurn == 2; //&& this.firstMove.donkey or wario or bonus roi boo + if ( + this.firstMove.appear.length == 0 || + this.firstMove.vanish.length == 0 || + this.board[x][y] != V.EMPTY + ) { + return false; + } + const deltaX = Math.abs(this.firstMove.end.x - x); + const deltaY = Math.abs(this.firstMove.end.y - y); + return ( + this.subTurn == 2 && + // Condition: rook or bishop move, may capture, but no bonus move + [V.ROOK, V.BISHOP].includes(this.firstMove.vanish[0].p) && + ( + this.firstMove.vanish.length == 1 || + ['w', 'b'].includes(this.firstMove.vanish[1].c) + ) && + ( + this.firstMove.vanish[0].p == V.ROOK && deltaX == 1 && deltaY == 1 || + this.firstMove.vanish[0].p == V.BISHOP && deltaX + deltaY == 1 + ) + ); } static get IMMOBILIZE_CODE() { @@ -46,9 +61,33 @@ export class ChakartRules extends ChessRules { return 'i'; } + // Fictive color 'a', bomb banana mushroom egg + static get BOMB() { + // Doesn't collide with bishop because color 'a' + return 'b'; + } + static get BANANA() { + return 'n'; + } + static get EGG() { + return 'e'; + } + static get MUSHROOM() { + return 'm'; + } + + static get PIECES() { + return ( + ChessRules.PIECES.concat( + Object.keys(V.IMMOBILIZE_DECODE)).concat( + [V.BANANA, V.BOMB, V.EGG, V.MUSHROOM, V.INVISIBLE_QUEEN]) + ); + } + getPpath(b) { let prefix = ""; if ( + b[0] == 'a' || b[1] == V.INVISIBLE_QUEEN || Object.keys(V.IMMOBILIZE_DECODE).includes(b[1]) ) { @@ -97,7 +136,7 @@ export class ChakartRules extends ChessRules { setFlags(fenflags) { super.setFlags(fenflags); //castleFlags this.powerFlags = { - w: [...Array(2)], //king can send red shell? Queen can be invisible? + w: [...Array(2)], //king can send shell? Queen can be invisible? b: [...Array(2)] }; const flags = fenflags.substr(4); //skip first 4 letters, for castle @@ -166,7 +205,13 @@ export class ChakartRules extends ChessRules { return fen; } + addBonusYoshi() { + // TODO +// --> pour bonus toadette, passer "capture" temporairement en "reserve" pour permettre de jouer le coup. + } + getPotentialMovesFrom([x, y]) { + // TODO: si banane ou bombe ou... alors return [] ? // TODO: bananes et bombes limitent les déplacements (agissent comme un mur "capturable") // bananes jaunes et rouges ?! (agissant sur une seule couleur ?) --> mauvaise idée. if (this.subTurn == 2) { @@ -177,6 +222,17 @@ export class ChakartRules extends ChessRules { // TODO: un-immobilize my immobilized piece at the end of this turn, if any } + getBasicMove([x1, y1], [x2, y2]) { + // NOTE: getBasicMove, ajouter les bonus à vanish array + // + déterminer leur effet (si cavalier) ou case (si banane ou bombe) + // (L'effet doit être caché au joueur : devrait être OK) + } + + getSlideNJumpMpves(sq, steps, oneStep) { + // Saut possible par dessus bonus ou champis mais pas bananes ou bombes +//==> redefinir isAttackedBySlide et getPotentialSlide... + } + getPotentialPawnMoves(sq) { //Toad: pion // laisse sur sa case de départ un champi turbo permettant à Peach et cavalier et autres pions d'aller @@ -230,11 +286,19 @@ export class ChakartRules extends ChessRules { // Profite des accélérateurs posés par les pions (+ 1 case : obligatoire). } + isAttackedBySlideNJump() { + // TODO: + } + atLeastOneMove() { // TODO: check that return true; } + getAllPotentialMoves() { + // (Attention: objets pas jouables cf. getPotentialMoves...) + } + play(move) { // TODO: subTurn passe à 2 si arrivée sur bonus cavalier // potentiellement pose (tour, fou) ou si choix (reconnaître i (ok), ii (ok) et iii (si coup normal + pas immobilisé) ?)