From: Benjamin Auder Date: Wed, 3 Jan 2024 16:10:33 +0000 (+0100) Subject: Fix Dobutsu X-Git-Url: https://git.auder.net/%7B%7B%20asset%28%27mixstore/css/user/doc/pieces/cp.svg?a=commitdiff_plain;h=c4d2eb5bdf1b23d8c4a9d09322f84a9e0da9d60c;p=xogo.git Fix Dobutsu --- diff --git a/base_rules.js b/base_rules.js index 217d055..9a364e8 100644 --- a/base_rules.js +++ b/base_rules.js @@ -465,7 +465,7 @@ export default class ChessRules { // VISUAL UTILS getPieceWidth(rwidth) { - return (rwidth / this.size.y); + return (rwidth / Math.max(this.size.x, this.size.y)); } getReserveSquareSize(rwidth, nbR) { @@ -856,9 +856,10 @@ export default class ChessRules { y = (this.playerColor == i ? y = r.height + 5 : - 5 - rsqSize); } else { - const sqSize = r.width / this.size.y; + const sqSize = r.width / Math.max(this.size.x, this.size.y); const flipped = this.flippedBoard; - x = (flipped ? this.size.y - 1 - j : j) * sqSize; + x = (flipped ? this.size.y - 1 - j : j) * sqSize + + Math.abs(this.size.x - this.size.y) * sqSize / 2; y = (flipped ? this.size.x - 1 - i : i) * sqSize; } return [r.x + x, r.y + y]; @@ -2284,11 +2285,6 @@ export default class ChessRules { if (this.hasCastle) this.updateCastleFlags(move); if (this.options["crazyhouse"]) { - move.vanish.forEach(v => { - const square = C.CoordsToSquare({x: v.x, y: v.y}); - if (this.ispawn[square]) - delete this.ispawn[square]; - }); if (move.appear.length > 0 && move.vanish.length > 0) { // Assumption: something is moving const initSquare = C.CoordsToSquare(move.start); @@ -2307,6 +2303,11 @@ export default class ChessRules { delete this.ispawn[destSquare]; } } + move.vanish.forEach(v => { + const square = C.CoordsToSquare({x: v.x, y: v.y}); + if (this.ispawn[square]) + delete this.ispawn[square]; + }); } const minSize = Math.min(move.appear.length, move.vanish.length); if ( diff --git a/variants/Dobutsu/class.js b/variants/Dobutsu/class.js index 7632a17..29b0708 100644 --- a/variants/Dobutsu/class.js +++ b/variants/Dobutsu/class.js @@ -19,7 +19,7 @@ export default class DobutsuRules extends ChessRules { // NOTE: classs change according to playerColor (orientation) const mySide = (this.playerColor == color); return { - 'c': { + 'p': { "class": (mySide ? "" : "rev-") + "chick", both: [{steps: [[pawnShift, 0]], range: 1}] }, @@ -43,7 +43,7 @@ export default class DobutsuRules extends ChessRules { "class": (mySide ? "" : "rev-") + "giraffe", both: [{steps: [[0, 1], [0, -1], [1, 0], [-1, 0]], range: 1}] }, - 'l': { + 'k': { "class": (mySide ? "" : "rev-") + "lion", both: [{ steps: [[-1, 1], [-1, -1], [1, 1], [1, -1], @@ -54,16 +54,15 @@ export default class DobutsuRules extends ChessRules { }; } - isKing(x, y, p) { - if (!p) - p = this.getPiece(x, y); - return (p == 'l'); - } - static get ReserveArray() { return ['p', 'h', 'e', 'g']; } + updateReserve(color, piece, count) { + if (piece != 'k') + super.updateReserve(color, piece, count); + } + constructor(o) { o.options = {crazyhouse: true, taking: true}; super(o); @@ -75,13 +74,13 @@ export default class DobutsuRules extends ChessRules { genRandInitBaseFen() { return { - fen: "gle/1c1/1C1/ELG", + fen: "gke/1p1/1P1/EKG", o: {} }; } get size() { - return {x: 4, y: 4}; + return {x: 4, y: 3}; } getCurrentScore(move_s) { @@ -91,7 +90,7 @@ export default class DobutsuRules extends ChessRules { const oppCol = C.GetOppTurn(this.turn); const oppLastRank = (oppCol == 'b' ? 3 : 0); for (let j=0; j < this.size.y; j++) { - if (this.board[oppLastRank][j] == oppCol + 'l') + if (this.board[oppLastRank][j] == oppCol + 'k') return (oppCol == 'w' ? "1-0" : "0-1"); } return "*";