X-Git-Url: https://git.auder.net/?p=xogo.git;a=blobdiff_plain;f=base_rules.js;h=88197ea0bed834c970659b95068aa5bec6f0b1aa;hp=217d0556f1c6402bc9ac3c12b4539b3f6e39b8f4;hb=HEAD;hpb=3232aba3419f129c70d5edd9a4ded1fefc146ea0 diff --git a/base_rules.js b/base_rules.js index 217d055..3d8e463 100644 --- a/base_rules.js +++ b/base_rules.js @@ -175,6 +175,22 @@ export default class ChessRules { return Object.values(cd).map(c => c.toString(36)).join(""); } + // c10 --> 02 (assuming 10 rows) + static SquareFromUsual(sq) { + return ( + (this.size.x - parseInt(sq.substring(1), 10)).toString(36) + + (sq.charCodeAt(0) - 97).toString(36) + ); + } + + // 02 --> c10 + static UsualFromSquare(sq) { + return ( + String.fromCharCode(parseInt(sq.charAt(1), 36) + 97) + + (this.size.x - parseInt(sq.charAt(0), 36)).toString(10) + ); + } + coordsToId(cd) { if (typeof cd.x == "number") { return ( @@ -465,7 +481,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) { @@ -651,10 +667,8 @@ export default class ChessRules { this[arrName] = ArrayFun.init(this.size.x, this.size.y, null); if (arrName == "d_pieces") this.marks.forEach((m) => { - const formattedSquare = - (this.size.x - parseInt(m.substring(1), 10)).toString(36) + - (m.charCodeAt(0) - 97).toString(36); - const mCoords = V.SquareToCoords(formattedSquare); + const formattedSquare = C.SquareFromUsual(m); + const mCoords = C.SquareToCoords(formattedSquare); addPiece(mCoords.x, mCoords.y, arrName, "mark"); }); }; @@ -856,9 +870,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 +2299,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 +2317,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 (