UNPKG

tsshogi

Version:

TypeScript library for Shogi (Japanese chess)

157 lines 9.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SpecialMoveType = exports.Move = void 0; exports.parseUSIMove = parseUSIMove; exports.specialMove = specialMove; exports.anySpecialMove = anySpecialMove; exports.isKnownSpecialMove = isKnownSpecialMove; exports.areSameSpecialMoves = areSameSpecialMoves; exports.areSameMoves = areSameMoves; const piece_1 = require("./piece.cjs"); const square_1 = require("./square.cjs"); /** * 指し手 */ class Move { from; to; promote; color; pieceType; capturedPieceType; constructor(from, to, promote, color, pieceType, capturedPieceType) { this.from = from; this.to = to; this.promote = promote; this.color = color; this.pieceType = pieceType; this.capturedPieceType = capturedPieceType; } /** * 指し手が等しいかどうかを判定します。 * @param move */ equals(move) { if (!move) { return false; } return (((this.from instanceof square_1.Square && move.from instanceof square_1.Square && this.from.equals(move.from)) || (!(this.from instanceof square_1.Square) && !(move.from instanceof square_1.Square) && this.from === move.from)) && this.to.equals(move.to) && this.promote === move.promote && this.color === move.color && this.pieceType === move.pieceType && this.capturedPieceType === move.capturedPieceType); } /** * 成る手を返します。 */ withPromote() { return new Move(this.from, this.to, true, this.color, this.pieceType, this.capturedPieceType); } /** * USI形式の文字列を取得します。 */ get usi() { let ret = ""; if (this.from instanceof square_1.Square) { ret += this.from.usi; } else { ret += (0, piece_1.pieceTypeToSFEN)(this.from) + "*"; } ret += this.to.usi; if (this.promote) { ret += "+"; } return ret; } } exports.Move = Move; /** * USI形式の文字列を解析します。 * @param usiMove */ function parseUSIMove(usiMove) { let from; if (usiMove[1] === "*") { const piece = piece_1.Piece.newBySFEN(usiMove[0]); if (!piece) { return null; } from = piece.type; } else { const square = square_1.Square.newByUSI(usiMove); if (!square) { return null; } from = square; } const to = square_1.Square.newByUSI(usiMove.substring(2)); if (!to) { return null; } const promote = usiMove.length >= 5 && usiMove[4] === "+"; return { from, to, promote }; } var SpecialMoveType; (function (SpecialMoveType) { SpecialMoveType["START"] = "start"; SpecialMoveType["INTERRUPT"] = "interrupt"; SpecialMoveType["RESIGN"] = "resign"; SpecialMoveType["MAX_MOVES"] = "maxMoves"; SpecialMoveType["IMPASS"] = "impass"; SpecialMoveType["DRAW"] = "draw"; SpecialMoveType["REPETITION_DRAW"] = "repetitionDraw"; SpecialMoveType["MATE"] = "mate"; SpecialMoveType["NO_MATE"] = "noMate"; SpecialMoveType["TIMEOUT"] = "timeout"; SpecialMoveType["FOUL_WIN"] = "foulWin"; SpecialMoveType["FOUL_LOSE"] = "foulLose"; SpecialMoveType["ENTERING_OF_KING"] = "enteringOfKing"; SpecialMoveType["WIN_BY_DEFAULT"] = "winByDefault"; SpecialMoveType["LOSE_BY_DEFAULT"] = "loseByDefault"; SpecialMoveType["TRY"] = "try"; })(SpecialMoveType || (exports.SpecialMoveType = SpecialMoveType = {})); /** * 定義済みの特殊な指し手を作成します。 * @param type */ function specialMove(type) { return { type }; } /** * 未定義の特殊な指し手を作成します。 * @param name */ function anySpecialMove(name) { return { type: "any", name }; } /** * 定義済みの特殊な指し手かどうかを判定します。 * @param move */ function isKnownSpecialMove(move) { return !(move instanceof Move) && move.type !== "any"; } function areSameSpecialMoves(a, b) { if (a.type === "any" && b.type === "any") { return a.name === b.name; } return a.type === b.type; } function areSameMoves(a, b) { if (a instanceof Move && b instanceof Move) { return a.equals(b); } if (a instanceof Move || b instanceof Move) { return false; } return areSameSpecialMoves(a, b); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb3ZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXFFQSxvQ0F5QkM7QUFvQ0Qsa0NBRUM7QUFNRCx3Q0FFQztBQU1ELGdEQUVDO0FBRUQsa0RBS0M7QUFFRCxvQ0FRQztBQXBLRCxtQ0FBNEQ7QUFDNUQscUNBQWtDO0FBRWxDOztHQUVHO0FBQ0gsTUFBYSxJQUFJO0lBRU47SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBTlQsWUFDUyxJQUF3QixFQUN4QixFQUFVLEVBQ1YsT0FBZ0IsRUFDaEIsS0FBWSxFQUNaLFNBQW9CLEVBQ3BCLGlCQUFtQztRQUxuQyxTQUFJLEdBQUosSUFBSSxDQUFvQjtRQUN4QixPQUFFLEdBQUYsRUFBRSxDQUFRO1FBQ1YsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1osY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO0lBQ3pDLENBQUM7SUFFSjs7O09BR0c7SUFDSCxNQUFNLENBQUMsSUFBNkI7UUFDbEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxDQUNMLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLGVBQU07WUFDM0IsSUFBSSxDQUFDLElBQUksWUFBWSxlQUFNO1lBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLGVBQU0sQ0FBQztnQkFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksZUFBTSxDQUFDO2dCQUM5QixJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixJQUFJLENB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