tsshogi
Version:
TypeScript library for Shogi (Japanese chess)
168 lines • 11 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Square = void 0;
const direction_1 = require("./direction.cjs");
function usiFileToNumber(usi) {
return usi >= "1" && usi <= "9" ? Number(usi) : null;
}
function usiRankToNumber(usi) {
switch (usi) {
case "a":
return 1;
case "b":
return 2;
case "c":
return 3;
case "d":
return 4;
case "e":
return 5;
case "f":
return 6;
case "g":
return 7;
case "h":
return 8;
case "i":
return 9;
default:
return null;
}
}
const sfenRanks = ["a", "b", "c", "d", "e", "f", "g", "h", "i"];
/**
* マス目
*/
class Square {
file;
rank;
constructor(file, rank) {
this.file = file;
this.rank = rank;
}
/**
* 9筋を0としたx座標
*/
get x() {
return 9 - this.file;
}
/**
* 1段目を0としたy座標
*/
get y() {
return this.rank - 1;
}
/**
* 0~80のインデックス
* 0=「9一」, 1=「8一」, ..., 80=「1九」
*/
get index() {
return this.y * 9 + this.x;
}
/**
* 先後を反転したマスを取得します。
*/
get opposite() {
return new Square(10 - this.file, 10 - this.rank);
}
neighbor(arg0, arg1) {
switch (arg0) {
case direction_1.Direction.UP:
return new Square(this.file, this.rank - 1);
case direction_1.Direction.DOWN:
return new Square(this.file, this.rank + 1);
case direction_1.Direction.LEFT:
return new Square(this.file + 1, this.rank);
case direction_1.Direction.RIGHT:
return new Square(this.file - 1, this.rank);
case direction_1.Direction.LEFT_UP:
return new Square(this.file + 1, this.rank - 1);
case direction_1.Direction.RIGHT_UP:
return new Square(this.file - 1, this.rank - 1);
case direction_1.Direction.LEFT_DOWN:
return new Square(this.file + 1, this.rank + 1);
case direction_1.Direction.RIGHT_DOWN:
return new Square(this.file - 1, this.rank + 1);
case direction_1.Direction.LEFT_UP_KNIGHT:
return new Square(this.file + 1, this.rank - 2);
case direction_1.Direction.RIGHT_UP_KNIGHT:
return new Square(this.file - 1, this.rank - 2);
case direction_1.Direction.LEFT_DOWN_KNIGHT:
return new Square(this.file + 1, this.rank + 2);
case direction_1.Direction.RIGHT_DOWN_KNIGHT:
return new Square(this.file - 1, this.rank + 2);
}
const dx = arg0;
const dy = arg1;
return new Square(this.file - dx, this.rank + dy);
}
/** 指定したマスへの方向を返します。 */
directionTo(square) {
return (0, direction_1.vectorToDirectionAndDistance)(square.x - this.x, square.y - this.y).direction;
}
/** 有効なマス目であるか判定します。 */
get valid() {
return this.file >= 1 && this.file <= 9 && this.rank >= 1 && this.rank <= 9;
}
/** 同じマス目か判定します。 */
equals(square) {
return !!square && this.file === square.file && this.rank === square.rank;
}
/**
* 座標を指定してマスを取得します。
* @param x
* @param y
*/
static newByXY(x, y) {
return new Square(9 - x, y + 1);
}
/**
* インデクスを指定してマスを取得します。
* @param index
*/
static newByIndex(index) {
return new Square(9 - (index % 9), Math.trunc(index / 9) + 1);
}
/**
* 全てのマス目の一覧
*/
static all = [];
/**
* SFEN形式の文字列を取得します。
* @deprecated Use usi instead.
*/
get sfen() {
return this.usi;
}
/**
* USI形式の文字列を取得します。
*/
get usi() {
return this.file + sfenRanks[this.rank - 1];
}
/**
* SFEN形式のマス目をパースします。
* @param sfen
* @deprecated Use newByUSI instead.
*/
static parseSFENSquare(sfen) {
return Square.newByUSI(sfen);
}
/**
* USI形式のマス目をパースします。
* @param usi
*/
static newByUSI(usi) {
const file = usiFileToNumber(usi[0]);
const rank = usiRankToNumber(usi[1]);
if (!file || !rank) {
return null;
}
return new Square(file, rank);
}
}
exports.Square = Square;
for (let index = 0; index < 81; index += 1) {
Square.all.push(Square.newByIndex(index));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3F1YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NxdWFyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBc0U7QUFFdEUsU0FBUyxlQUFlLENBQUMsR0FBVztJQUNsQyxPQUFPLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEdBQVc7SUFDbEMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNaLEtBQUssR0FBRztZQUNOLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsS0FBSyxHQUFHO1lBQ04sT0FBTyxDQUFDLENBQUM7UUFDWCxLQUFLLEdBQUc7WUFDTixPQUFPLENBQUMsQ0FBQztRQUNYLEtBQUssR0FBRztZQUNOLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsS0FBSyxHQUFHO1lBQ04sT0FBTyxDQUFDLENBQUM7UUFDWCxLQUFLLEdBQUc7WUFDTixPQUFPLENBQUMsQ0FBQztRQUNYLEtBQUssR0FBRztZQUNOLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsS0FBSyxHQUFHO1lBQ04sT0FBTyxDQUFDLENBQUM7UUFDWCxLQUFLLEdBQUc7WUFDTixPQUFPLENBQUMsQ0FBQztRQUNYO1lBQ0UsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFaEU7O0dBRUc7QUFDSCxNQUFhLE1BQU07SUFFUjtJQUNBO0lBRlQsWUFDUyxJQUFZLEVBQ1osSUFBWTtRQURaLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixTQUFJLEdBQUosSUFB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