X-Git-Url: https://git.auder.net/?p=xogo.git;a=blobdiff_plain;f=variants%2FDobutsu%2Fclass.js;fp=variants%2FDobutsu%2Fclass.js;h=7632a17bf1f3568b521f01a70755e15d408a4e96;hp=0000000000000000000000000000000000000000;hb=3232aba3419f129c70d5edd9a4ded1fefc146ea0;hpb=130a166fd08355be5f2dfc923777c1c6d03f09ce diff --git a/variants/Dobutsu/class.js b/variants/Dobutsu/class.js new file mode 100644 index 0000000..7632a17 --- /dev/null +++ b/variants/Dobutsu/class.js @@ -0,0 +1,100 @@ +import ChessRules from "/base_rules.js"; + +export default class DobutsuRules extends ChessRules { + + static get Options() { + return {}; + } + + get hasFlags() { + return false; + } + + get hasEnpassant() { + return false; + } + + pieces(color, x, y) { + const pawnShift = this.getPawnShift(color || 'w'); + // NOTE: classs change according to playerColor (orientation) + const mySide = (this.playerColor == color); + return { + 'c': { + "class": (mySide ? "" : "rev-") + "chick", + both: [{steps: [[pawnShift, 0]], range: 1}] + }, + 'h': { + "class": (mySide ? "" : "rev-") + "hen", + both: [ + { + steps: [ + [pawnShift, 1], [pawnShift, -1], + [0, 1], [0, -1], [1, 0], [-1, 0] + ], + range: 1 + } + ] + }, + 'e': { + "class": (mySide ? "" : "rev-") + "elephant", + both: [{steps: [[-1, 1], [-1, -1], [1, 1], [1, -1]], range: 1}] + }, + 'g': { + "class": (mySide ? "" : "rev-") + "giraffe", + both: [{steps: [[0, 1], [0, -1], [1, 0], [-1, 0]], range: 1}] + }, + 'l': { + "class": (mySide ? "" : "rev-") + "lion", + both: [{ + steps: [[-1, 1], [-1, -1], [1, 1], [1, -1], + [0, 1], [0, -1], [1, 0], [-1, 0]], + range: 1 + }] + } + }; + } + + isKing(x, y, p) { + if (!p) + p = this.getPiece(x, y); + return (p == 'l'); + } + + static get ReserveArray() { + return ['p', 'h', 'e', 'g']; + } + + constructor(o) { + o.options = {crazyhouse: true, taking: true}; + super(o); + } + + get pawnPromotions() { + return ['h']; + } + + genRandInitBaseFen() { + return { + fen: "gle/1c1/1C1/ELG", + o: {} + }; + } + + get size() { + return {x: 4, y: 4}; + } + + getCurrentScore(move_s) { + const res = super.getCurrentScore(move_s); + if (res != '*') + return res; + 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') + return (oppCol == 'w' ? "1-0" : "0-1"); + } + return "*"; + } + +};