tsshogi
Version:
TypeScript library for Shogi (Japanese chess)
157 lines • 9.49 kB
JavaScript
"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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