shogiops 0.2.9 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -7
- package/attacks.js +7 -7
- package/attacks.js.map +1 -1
- package/board.d.ts +3 -0
- package/board.js +31 -0
- package/board.js.map +1 -1
- package/compat.d.ts +6 -24
- package/compat.js +17 -173
- package/compat.js.map +1 -1
- package/debug.js +30 -56
- package/debug.js.map +1 -1
- package/hand.d.ts +38 -0
- package/hand.js +74 -0
- package/hand.js.map +1 -0
- package/hash.d.ts +4 -3
- package/hash.js +9 -9
- package/hash.js.map +1 -1
- package/index.d.ts +13 -10
- package/index.js +14 -15
- package/index.js.map +1 -1
- package/{csa.d.ts → notation/csa/csa.d.ts} +9 -9
- package/{csa.js → notation/csa/csa.js} +52 -56
- package/notation/csa/csa.js.map +1 -0
- package/notation/japanese.d.ts +3 -0
- package/notation/japanese.js +65 -0
- package/notation/japanese.js.map +1 -0
- package/{kif.d.ts → notation/kif/kif.d.ts} +10 -9
- package/{kif.js → notation/kif/kif.js} +86 -84
- package/notation/kif/kif.js.map +1 -0
- package/{kifHandicaps.d.ts → notation/kif/kifHandicaps.d.ts} +0 -0
- package/{kifHandicaps.js → notation/kif/kifHandicaps.js} +5 -0
- package/notation/kif/kifHandicaps.js.map +1 -0
- package/notation/kitaoKawasaki.d.ts +3 -0
- package/notation/kitaoKawasaki.js +30 -0
- package/notation/kitaoKawasaki.js.map +1 -0
- package/notation/kitaokawasaki.d.ts +0 -0
- package/notation/kitaokawasaki.js +2 -0
- package/notation/kitaokawasaki.js.map +1 -0
- package/notation/notationUtil.d.ts +12 -0
- package/{kifUtil.js → notation/notationUtil.js} +43 -32
- package/notation/notationUtil.js.map +1 -0
- package/notation/western.d.ts +3 -0
- package/notation/western.js +27 -0
- package/notation/western.js.map +1 -0
- package/notation/westernEngine.d.ts +3 -0
- package/notation/westernEngine.js +27 -0
- package/notation/westernEngine.js.map +1 -0
- package/package.json +51 -36
- package/setup.d.ts +2 -32
- package/setup.js +3 -74
- package/setup.js.map +1 -1
- package/sfen.d.ts +33 -0
- package/sfen.js +201 -0
- package/sfen.js.map +1 -0
- package/shogi.d.ts +14 -7
- package/shogi.js +109 -106
- package/shogi.js.map +1 -1
- package/squareSet.d.ts +1 -5
- package/squareSet.js +0 -13
- package/squareSet.js.map +1 -1
- package/src/board.ts +34 -0
- package/src/compat.ts +18 -197
- package/src/debug.ts +26 -56
- package/src/hand.ts +94 -0
- package/src/hash.ts +8 -7
- package/src/index.ts +16 -12
- package/src/{csa.ts → notation/csa/csa.ts} +50 -51
- package/src/notation/japanese.ts +74 -0
- package/src/{kif.ts → notation/kif/kif.ts} +77 -78
- package/src/{kifHandicaps.ts → notation/kif/kifHandicaps.ts} +5 -0
- package/src/notation/kitaoKawasaki.ts +24 -0
- package/src/{kifUtil.ts → notation/notationUtil.ts} +37 -28
- package/src/notation/western.ts +21 -0
- package/src/notation/westernEngine.ts +21 -0
- package/src/setup.ts +4 -91
- package/src/sfen.ts +190 -0
- package/src/shogi.ts +75 -75
- package/src/squareSet.ts +1 -18
- package/src/transform.ts +3 -1
- package/src/types.ts +13 -16
- package/src/util.ts +8 -73
- package/src/variant.ts +44 -3
- package/src/variantUtil.ts +160 -0
- package/transform.js +3 -1
- package/transform.js.map +1 -1
- package/types.d.ts +3 -7
- package/types.js +13 -14
- package/types.js.map +1 -1
- package/util.d.ts +4 -7
- package/util.js +9 -60
- package/util.js.map +1 -1
- package/variant.d.ts +12 -1
- package/variant.js +38 -3
- package/variant.js.map +1 -1
- package/variantUtil.d.ts +13 -0
- package/variantUtil.js +160 -0
- package/variantUtil.js.map +1 -0
- package/csa.js.map +0 -1
- package/csaUtil.d.ts +0 -3
- package/csaUtil.js +0 -21
- package/csaUtil.js.map +0 -1
- package/fen.d.ts +0 -32
- package/fen.js +0 -197
- package/fen.js.map +0 -1
- package/kif.js.map +0 -1
- package/kifHandicaps.js.map +0 -1
- package/kifUtil.d.ts +0 -9
- package/kifUtil.js.map +0 -1
- package/san.d.ts +0 -6
- package/san.js +0 -135
- package/san.js.map +0 -1
- package/src/csaUtil.ts +0 -15
- package/src/fen.ts +0 -183
- package/src/san.ts +0 -136
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { Piece, Square } from '.';
|
|
2
|
+
import { SquareSet } from './squareSet';
|
|
3
|
+
import { Color, Role, Rules } from './types';
|
|
4
|
+
|
|
5
|
+
export function pieceCanPromote(rules: Rules): (piece: Piece, from: Square, to: Square) => boolean {
|
|
6
|
+
switch (rules) {
|
|
7
|
+
default:
|
|
8
|
+
return (piece: Piece, from: Square, to: Square) =>
|
|
9
|
+
promotableRoles(rules).includes(piece.role) &&
|
|
10
|
+
(promotionZone(rules)(piece.color).has(from) || promotionZone(rules)(piece.color).has(to));
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function pieceInDeadZone(rules: Rules): (piece: Piece, sq: Square) => boolean {
|
|
14
|
+
switch (rules) {
|
|
15
|
+
default:
|
|
16
|
+
return (piece: Piece, sq: Square) => {
|
|
17
|
+
if (piece.role === 'lance' || piece.role === 'pawn')
|
|
18
|
+
return backrank(rules)(piece.color).intersect(SquareSet.fromSquare(sq)).nonEmpty();
|
|
19
|
+
if (piece.role === 'knight')
|
|
20
|
+
return secondBackrank(rules)(piece.color)
|
|
21
|
+
.union(backrank(rules)(piece.color))
|
|
22
|
+
.intersect(SquareSet.fromSquare(sq))
|
|
23
|
+
.nonEmpty();
|
|
24
|
+
return false;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function allRoles(rules: Rules): Role[] {
|
|
30
|
+
switch (rules) {
|
|
31
|
+
case 'minishogi':
|
|
32
|
+
return ['rook', 'bishop', 'gold', 'silver', 'pawn', 'king', 'dragon', 'horse', 'promotedsilver', 'tokin'];
|
|
33
|
+
default:
|
|
34
|
+
return [
|
|
35
|
+
'rook',
|
|
36
|
+
'bishop',
|
|
37
|
+
'gold',
|
|
38
|
+
'silver',
|
|
39
|
+
'knight',
|
|
40
|
+
'lance',
|
|
41
|
+
'pawn',
|
|
42
|
+
'dragon',
|
|
43
|
+
'horse',
|
|
44
|
+
'tokin',
|
|
45
|
+
'promotedsilver',
|
|
46
|
+
'promotedknight',
|
|
47
|
+
'promotedlance',
|
|
48
|
+
'king',
|
|
49
|
+
];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function handRoles(rules: Rules): Role[] {
|
|
54
|
+
switch (rules) {
|
|
55
|
+
case 'minishogi':
|
|
56
|
+
return ['rook', 'bishop', 'gold', 'silver', 'pawn'];
|
|
57
|
+
default:
|
|
58
|
+
return ['rook', 'bishop', 'gold', 'silver', 'knight', 'lance', 'pawn'];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function promotableRoles(rules: Rules): Role[] {
|
|
63
|
+
switch (rules) {
|
|
64
|
+
case 'minishogi':
|
|
65
|
+
return ['pawn', 'silver', 'bishop', 'rook'];
|
|
66
|
+
default:
|
|
67
|
+
return ['pawn', 'lance', 'knight', 'silver', 'bishop', 'rook'];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function promote(rules: Rules): (role: Role) => Role {
|
|
72
|
+
switch (rules) {
|
|
73
|
+
case 'minishogi':
|
|
74
|
+
return standardPromote;
|
|
75
|
+
default:
|
|
76
|
+
return standardPromote;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function unpromote(rules: Rules): (role: Role) => Role {
|
|
81
|
+
switch (rules) {
|
|
82
|
+
case 'minishogi':
|
|
83
|
+
return standardUnpromote;
|
|
84
|
+
default:
|
|
85
|
+
return standardUnpromote;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function promotionZone(rules: Rules): (color: Color) => SquareSet {
|
|
90
|
+
switch (rules) {
|
|
91
|
+
case 'minishogi':
|
|
92
|
+
return (color: Color) => (color === 'sente' ? SquareSet.fromRank(8) : SquareSet.fromRank(4));
|
|
93
|
+
default:
|
|
94
|
+
return (color: Color) => (color === 'sente' ? new SquareSet(0, 0, 0x07ffffff) : new SquareSet(0x07ffffff, 0, 0));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function backrank(rules: Rules): (color: Color) => SquareSet {
|
|
99
|
+
switch (rules) {
|
|
100
|
+
case 'minishogi':
|
|
101
|
+
return promotionZone(rules);
|
|
102
|
+
default:
|
|
103
|
+
return (color: Color) => (color === 'sente' ? SquareSet.fromRank(8) : SquareSet.fromRank(0));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function secondBackrank(rules: Rules): (color: Color) => SquareSet {
|
|
108
|
+
switch (rules) {
|
|
109
|
+
case 'minishogi':
|
|
110
|
+
return (color: Color) => (color === 'sente' ? SquareSet.fromRank(7) : SquareSet.fromRank(5));
|
|
111
|
+
default:
|
|
112
|
+
return (color: Color) => (color === 'sente' ? SquareSet.fromRank(7) : SquareSet.fromRank(1));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function standardUnpromote(role: Role): Role {
|
|
117
|
+
switch (role) {
|
|
118
|
+
case 'pawn':
|
|
119
|
+
case 'tokin':
|
|
120
|
+
return 'pawn';
|
|
121
|
+
case 'lance':
|
|
122
|
+
case 'promotedlance':
|
|
123
|
+
return 'lance';
|
|
124
|
+
case 'knight':
|
|
125
|
+
case 'promotedknight':
|
|
126
|
+
return 'knight';
|
|
127
|
+
case 'silver':
|
|
128
|
+
case 'promotedsilver':
|
|
129
|
+
return 'silver';
|
|
130
|
+
case 'gold':
|
|
131
|
+
return 'gold';
|
|
132
|
+
case 'bishop':
|
|
133
|
+
case 'horse':
|
|
134
|
+
return 'bishop';
|
|
135
|
+
case 'rook':
|
|
136
|
+
case 'dragon':
|
|
137
|
+
return 'rook';
|
|
138
|
+
default:
|
|
139
|
+
return role;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function standardPromote(role: Role): Role {
|
|
144
|
+
switch (role) {
|
|
145
|
+
case 'pawn':
|
|
146
|
+
return 'tokin';
|
|
147
|
+
case 'lance':
|
|
148
|
+
return 'promotedlance';
|
|
149
|
+
case 'knight':
|
|
150
|
+
return 'promotedknight';
|
|
151
|
+
case 'silver':
|
|
152
|
+
return 'promotedsilver';
|
|
153
|
+
case 'bishop':
|
|
154
|
+
return 'horse';
|
|
155
|
+
case 'rook':
|
|
156
|
+
return 'dragon';
|
|
157
|
+
default:
|
|
158
|
+
return role;
|
|
159
|
+
}
|
|
160
|
+
}
|
package/transform.js
CHANGED
|
@@ -25,6 +25,8 @@ function rotate180(s) {
|
|
|
25
25
|
exports.rotate180 = rotate180;
|
|
26
26
|
function transformBoard(board, f) {
|
|
27
27
|
const b = board_1.Board.empty();
|
|
28
|
+
b.numberOfFiles = board.numberOfFiles;
|
|
29
|
+
b.numberOfRanks = board.numberOfRanks;
|
|
28
30
|
b.occupied = f(board.occupied);
|
|
29
31
|
for (const color of types_1.COLORS)
|
|
30
32
|
b[color] = f(board[color]);
|
|
@@ -36,7 +38,7 @@ exports.transformBoard = transformBoard;
|
|
|
36
38
|
function transformSetup(setup, f) {
|
|
37
39
|
return {
|
|
38
40
|
board: transformBoard(setup.board, f),
|
|
39
|
-
|
|
41
|
+
hands: setup.hands.clone(),
|
|
40
42
|
turn: setup.turn,
|
|
41
43
|
fullmoves: setup.fullmoves,
|
|
42
44
|
};
|
package/transform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","sourceRoot":"","sources":["src/transform.ts"],"names":[],"mappings":";;;AAAA,mCAAwC;AACxC,2CAAwC;AACxC,mCAAgC;AAGhC,SAAgB,YAAY,CAAC,CAAY;IACvC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AACrB,CAAC;AAFD,oCAEC;AAED,SAAgB,cAAc,CAAC,CAAY;IACzC,MAAM,EAAE,GAAG,IAAI,qBAAS,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,aAAa;IACxE,MAAM,EAAE,GAAG,IAAI,qBAAS,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,oBAAoB;IAC/E,MAAM,EAAE,GAAG,IAAI,qBAAS,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,kBAAkB;IAC7E,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,qBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AATD,wCASC;AAED,SAAgB,SAAS,CAAC,CAAY;IACpC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;AACpB,CAAC;AAFD,8BAEC;AAED,SAAgB,cAAc,CAAC,KAAY,EAAE,CAA8B;IACzE,MAAM,CAAC,GAAG,aAAK,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,cAAM;QAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,KAAK,MAAM,IAAI,IAAI,aAAK;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,CAAC;AACX,CAAC;
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["src/transform.ts"],"names":[],"mappings":";;;AAAA,mCAAwC;AACxC,2CAAwC;AACxC,mCAAgC;AAGhC,SAAgB,YAAY,CAAC,CAAY;IACvC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AACrB,CAAC;AAFD,oCAEC;AAED,SAAgB,cAAc,CAAC,CAAY;IACzC,MAAM,EAAE,GAAG,IAAI,qBAAS,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,aAAa;IACxE,MAAM,EAAE,GAAG,IAAI,qBAAS,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,oBAAoB;IAC/E,MAAM,EAAE,GAAG,IAAI,qBAAS,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,kBAAkB;IAC7E,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,qBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AATD,wCASC;AAED,SAAgB,SAAS,CAAC,CAAY;IACpC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;AACpB,CAAC;AAFD,8BAEC;AAED,SAAgB,cAAc,CAAC,KAAY,EAAE,CAA8B;IACzE,MAAM,CAAC,GAAG,aAAK,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IACtC,CAAC,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IACtC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,cAAM;QAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,KAAK,MAAM,IAAI,IAAI,aAAK;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,CAAC;AACX,CAAC;AARD,wCAQC;AAED,SAAgB,cAAc,CAAC,KAAY,EAAE,CAA8B;IACzE,OAAO;QACL,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACrC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE;QAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;AACJ,CAAC;AAPD,wCAOC"}
|
package/types.d.ts
CHANGED
|
@@ -10,12 +10,8 @@ export declare type Color = typeof COLORS[number];
|
|
|
10
10
|
export declare type ByColor<T> = {
|
|
11
11
|
[color in Color]: T;
|
|
12
12
|
};
|
|
13
|
-
export declare const ROLES: readonly ["
|
|
14
|
-
export declare const POCKET_ROLES: readonly ["rook", "bishop", "gold", "silver", "knight", "lance", "pawn"];
|
|
15
|
-
export declare const PROMOTABLE_ROLES: readonly ["pawn", "lance", "knight", "silver", "bishop", "rook"];
|
|
13
|
+
export declare const ROLES: readonly ["rook", "bishop", "gold", "silver", "knight", "lance", "pawn", "dragon", "horse", "tokin", "promotedsilver", "promotedknight", "promotedlance", "king"];
|
|
16
14
|
export declare type Role = typeof ROLES[number];
|
|
17
|
-
export declare type PocketRole = typeof POCKET_ROLES[number];
|
|
18
|
-
export declare type PromotableRole = typeof PROMOTABLE_ROLES[number];
|
|
19
15
|
export declare type ByRole<T> = {
|
|
20
16
|
[role in Role]: T;
|
|
21
17
|
};
|
|
@@ -29,13 +25,13 @@ export interface NormalMove {
|
|
|
29
25
|
promotion?: boolean;
|
|
30
26
|
}
|
|
31
27
|
export interface DropMove {
|
|
32
|
-
role:
|
|
28
|
+
role: Role;
|
|
33
29
|
to: Square;
|
|
34
30
|
}
|
|
35
31
|
export declare type Move = NormalMove | DropMove;
|
|
36
32
|
export declare function isDrop(v: Move): v is DropMove;
|
|
37
33
|
export declare function isNormal(v: Move): v is NormalMove;
|
|
38
|
-
export declare const RULES: readonly ["shogi"];
|
|
34
|
+
export declare const RULES: readonly ["shogi", "minishogi"];
|
|
39
35
|
export declare type Rules = typeof RULES[number];
|
|
40
36
|
export interface Outcome {
|
|
41
37
|
winner: Color | undefined;
|
package/types.js
CHANGED
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RULES = exports.isNormal = exports.isDrop = exports.
|
|
3
|
+
exports.RULES = exports.isNormal = exports.isDrop = exports.ROLES = exports.COLORS = exports.RANK_NAMES = exports.FILE_NAMES = void 0;
|
|
4
4
|
exports.FILE_NAMES = ['9', '8', '7', '6', '5', '4', '3', '2', '1'];
|
|
5
5
|
exports.RANK_NAMES = ['i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a'];
|
|
6
6
|
exports.COLORS = ['sente', 'gote'];
|
|
7
|
+
// correct order for sfen hand exporting
|
|
7
8
|
exports.ROLES = [
|
|
8
|
-
'pawn',
|
|
9
|
-
'lance',
|
|
10
|
-
'knight',
|
|
11
|
-
'silver',
|
|
12
|
-
'gold',
|
|
13
|
-
'bishop',
|
|
14
9
|
'rook',
|
|
10
|
+
'bishop',
|
|
11
|
+
'gold',
|
|
12
|
+
'silver',
|
|
13
|
+
'knight',
|
|
14
|
+
'lance',
|
|
15
|
+
'pawn',
|
|
16
|
+
'dragon',
|
|
17
|
+
'horse',
|
|
15
18
|
'tokin',
|
|
16
|
-
'promotedlance',
|
|
17
|
-
'promotedknight',
|
|
18
19
|
'promotedsilver',
|
|
19
|
-
'
|
|
20
|
-
'
|
|
20
|
+
'promotedknight',
|
|
21
|
+
'promotedlance',
|
|
21
22
|
'king',
|
|
22
23
|
];
|
|
23
|
-
exports.POCKET_ROLES = ['rook', 'bishop', 'gold', 'silver', 'knight', 'lance', 'pawn'];
|
|
24
|
-
exports.PROMOTABLE_ROLES = ['pawn', 'lance', 'knight', 'silver', 'bishop', 'rook'];
|
|
25
24
|
function isDrop(v) {
|
|
26
25
|
return 'role' in v;
|
|
27
26
|
}
|
|
@@ -31,5 +30,5 @@ function isNormal(v) {
|
|
|
31
30
|
}
|
|
32
31
|
exports.isNormal = isNormal;
|
|
33
32
|
// variant will be added later, once lishogi supports them
|
|
34
|
-
exports.RULES = ['shogi'];
|
|
33
|
+
exports.RULES = ['shogi', 'minishogi'];
|
|
35
34
|
//# sourceMappingURL=types.js.map
|
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["src/types.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAGpE,QAAA,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AASpE,QAAA,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["src/types.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAGpE,QAAA,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AASpE,QAAA,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,CAAU,CAAC;AAQjD,wCAAwC;AAC3B,QAAA,KAAK,GAAG;IACnB,MAAM;IACN,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,MAAM;IACN,QAAQ;IACR,OAAO;IACP,OAAO;IACP,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,MAAM;CACE,CAAC;AAyBX,SAAgB,MAAM,CAAC,CAAO;IAC5B,OAAO,MAAM,IAAI,CAAC,CAAC;AACrB,CAAC;AAFD,wBAEC;AAED,SAAgB,QAAQ,CAAC,CAAO;IAC9B,OAAO,MAAM,IAAI,CAAC,CAAC;AACrB,CAAC;AAFD,4BAEC;AAED,0DAA0D;AAC7C,QAAA,KAAK,GAAG,CAAC,OAAO,EAAE,WAAW,CAAU,CAAC"}
|
package/util.d.ts
CHANGED
|
@@ -1,24 +1,21 @@
|
|
|
1
|
-
import { Color, Square, Role,
|
|
1
|
+
import { Color, Square, Role, Move, SquareName } from './types';
|
|
2
2
|
export declare function defined<A>(v: A | undefined): v is A;
|
|
3
3
|
export declare function opposite(color: Color): Color;
|
|
4
4
|
export declare function squareRank(square: Square): number;
|
|
5
5
|
export declare function squareFile(square: Square): number;
|
|
6
|
-
export declare function
|
|
7
|
-
export declare function promote(role: Role): Role;
|
|
8
|
-
export declare function roleToChar(role: Role): string;
|
|
6
|
+
export declare function roleToString(role: Role): string;
|
|
9
7
|
export declare function roleToCsa(role: Role): string;
|
|
10
8
|
export declare function csaToRole(str: string): Role | undefined;
|
|
11
9
|
export declare function roleTo1Kanji(role: Role): string;
|
|
12
10
|
export declare function roleTo2Kanji(role: Role): string;
|
|
13
11
|
export declare function kanjiToRole(str: string): Role | undefined;
|
|
14
|
-
export declare function
|
|
15
|
-
export declare function
|
|
12
|
+
export declare function stringToRole(ch: 'p' | 'l' | 'n' | 's' | 'g' | 'b' | 'r' | '+p' | '+l' | '+n' | '+s' | '+b' | '+r' | 'P' | 'L' | 'N' | 'S' | 'G' | 'B' | 'R' | '+P' | '+L' | '+N' | '+S' | '+B' | '+R'): Role;
|
|
13
|
+
export declare function stringToRole(ch: string): Role | undefined;
|
|
16
14
|
export declare function parseSquare(str: SquareName): Square;
|
|
17
15
|
export declare function parseSquare(str: string): Square | undefined;
|
|
18
16
|
export declare function makeSquare(square: Square): SquareName;
|
|
19
17
|
export declare function parseUsi(str: string): Move | undefined;
|
|
20
18
|
export declare function makeUsi(move: Move): string;
|
|
21
|
-
export declare function canPiecePromote(piece: Piece, from: Square, to: Square): boolean;
|
|
22
19
|
export declare function toBW(color: string): 'b' | 'w';
|
|
23
20
|
export declare function toBlackWhite(color: string): 'black' | 'white';
|
|
24
21
|
export declare function toColor(color: string): Color;
|
package/util.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.toColor = exports.toBlackWhite = exports.toBW = exports.
|
|
4
|
-
const squareSet_1 = require("./squareSet");
|
|
3
|
+
exports.toColor = exports.toBlackWhite = exports.toBW = exports.makeUsi = exports.parseUsi = exports.makeSquare = exports.parseSquare = exports.stringToRole = exports.kanjiToRole = exports.roleTo2Kanji = exports.roleTo1Kanji = exports.csaToRole = exports.roleToCsa = exports.roleToString = exports.squareFile = exports.squareRank = exports.opposite = exports.defined = void 0;
|
|
5
4
|
const types_1 = require("./types");
|
|
6
5
|
function defined(v) {
|
|
7
6
|
return v !== undefined;
|
|
@@ -11,6 +10,7 @@ function opposite(color) {
|
|
|
11
10
|
return color === 'gote' ? 'sente' : 'gote';
|
|
12
11
|
}
|
|
13
12
|
exports.opposite = opposite;
|
|
13
|
+
// coordinate system starts at bottom left
|
|
14
14
|
function squareRank(square) {
|
|
15
15
|
return Math.floor(square / 9);
|
|
16
16
|
}
|
|
@@ -19,53 +19,7 @@ function squareFile(square) {
|
|
|
19
19
|
return square % 9;
|
|
20
20
|
}
|
|
21
21
|
exports.squareFile = squareFile;
|
|
22
|
-
function
|
|
23
|
-
switch (role) {
|
|
24
|
-
case 'pawn':
|
|
25
|
-
case 'tokin':
|
|
26
|
-
return 'pawn';
|
|
27
|
-
case 'lance':
|
|
28
|
-
case 'promotedlance':
|
|
29
|
-
return 'lance';
|
|
30
|
-
case 'knight':
|
|
31
|
-
case 'promotedknight':
|
|
32
|
-
return 'knight';
|
|
33
|
-
case 'silver':
|
|
34
|
-
case 'promotedsilver':
|
|
35
|
-
return 'silver';
|
|
36
|
-
case 'gold':
|
|
37
|
-
return 'gold';
|
|
38
|
-
case 'bishop':
|
|
39
|
-
case 'horse':
|
|
40
|
-
return 'bishop';
|
|
41
|
-
case 'rook':
|
|
42
|
-
case 'dragon':
|
|
43
|
-
return 'rook';
|
|
44
|
-
default:
|
|
45
|
-
return role;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
exports.unpromote = unpromote;
|
|
49
|
-
function promote(role) {
|
|
50
|
-
switch (role) {
|
|
51
|
-
case 'pawn':
|
|
52
|
-
return 'tokin';
|
|
53
|
-
case 'lance':
|
|
54
|
-
return 'promotedlance';
|
|
55
|
-
case 'knight':
|
|
56
|
-
return 'promotedknight';
|
|
57
|
-
case 'silver':
|
|
58
|
-
return 'promotedsilver';
|
|
59
|
-
case 'bishop':
|
|
60
|
-
return 'horse';
|
|
61
|
-
case 'rook':
|
|
62
|
-
return 'dragon';
|
|
63
|
-
default:
|
|
64
|
-
return role;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
exports.promote = promote;
|
|
68
|
-
function roleToChar(role) {
|
|
22
|
+
function roleToString(role) {
|
|
69
23
|
switch (role) {
|
|
70
24
|
case 'pawn':
|
|
71
25
|
return 'p';
|
|
@@ -97,7 +51,7 @@ function roleToChar(role) {
|
|
|
97
51
|
return 'k';
|
|
98
52
|
}
|
|
99
53
|
}
|
|
100
|
-
exports.
|
|
54
|
+
exports.roleToString = roleToString;
|
|
101
55
|
function roleToCsa(role) {
|
|
102
56
|
switch (role) {
|
|
103
57
|
case 'pawn':
|
|
@@ -251,7 +205,7 @@ function kanjiToRole(str) {
|
|
|
251
205
|
}
|
|
252
206
|
}
|
|
253
207
|
exports.kanjiToRole = kanjiToRole;
|
|
254
|
-
function
|
|
208
|
+
function stringToRole(ch) {
|
|
255
209
|
switch (ch) {
|
|
256
210
|
case 'P':
|
|
257
211
|
case 'p':
|
|
@@ -299,7 +253,7 @@ function charToRole(ch) {
|
|
|
299
253
|
return;
|
|
300
254
|
}
|
|
301
255
|
}
|
|
302
|
-
exports.
|
|
256
|
+
exports.stringToRole = stringToRole;
|
|
303
257
|
function parseSquare(str) {
|
|
304
258
|
if (str.length !== 2)
|
|
305
259
|
return;
|
|
@@ -316,7 +270,7 @@ function makeSquare(square) {
|
|
|
316
270
|
exports.makeSquare = makeSquare;
|
|
317
271
|
function parseUsi(str) {
|
|
318
272
|
if (str[1] === '*' && str.length === 4) {
|
|
319
|
-
const role =
|
|
273
|
+
const role = stringToRole(str[0]);
|
|
320
274
|
const to = parseSquare(str.slice(2));
|
|
321
275
|
if (defined(role) && defined(to))
|
|
322
276
|
return { role, to };
|
|
@@ -332,16 +286,11 @@ function parseUsi(str) {
|
|
|
332
286
|
}
|
|
333
287
|
exports.parseUsi = parseUsi;
|
|
334
288
|
function makeUsi(move) {
|
|
335
|
-
if (types_1.isDrop(move))
|
|
336
|
-
return `${
|
|
289
|
+
if ((0, types_1.isDrop)(move))
|
|
290
|
+
return `${roleToString(move.role).toUpperCase()}*${makeSquare(move.to)}`;
|
|
337
291
|
return makeSquare(move.from) + makeSquare(move.to) + (move.promotion ? '+' : '');
|
|
338
292
|
}
|
|
339
293
|
exports.makeUsi = makeUsi;
|
|
340
|
-
function canPiecePromote(piece, from, to) {
|
|
341
|
-
return (types_1.PROMOTABLE_ROLES.includes(piece.role) &&
|
|
342
|
-
(squareSet_1.SquareSet.promotionZone(piece.color).has(from) || squareSet_1.SquareSet.promotionZone(piece.color).has(to)));
|
|
343
|
-
}
|
|
344
|
-
exports.canPiecePromote = canPiecePromote;
|
|
345
294
|
function toBW(color) {
|
|
346
295
|
// white, w, gote, g
|
|
347
296
|
if (color[0] === 'w' || color[0] === 'g')
|
package/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["src/util.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["src/util.ts"],"names":[],"mappings":"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"}
|
package/variant.d.ts
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import { Result } from '@badrap/result';
|
|
2
|
-
import { Rules } from './types';
|
|
2
|
+
import { Role, Rules, Square } from './types';
|
|
3
3
|
import { Setup } from './setup';
|
|
4
4
|
import { PositionError, Position, IllegalSetup, Context, Shogi } from './shogi';
|
|
5
|
+
import { SquareSet } from './squareSet';
|
|
5
6
|
export { Position, PositionError, IllegalSetup, Context, Shogi };
|
|
6
7
|
export declare function defaultPosition(rules: Rules): Position;
|
|
7
8
|
export declare function setupPosition(rules: Rules, setup: Setup, strict?: boolean): Result<Position, PositionError>;
|
|
9
|
+
export declare class Minishogi extends Shogi {
|
|
10
|
+
protected constructor();
|
|
11
|
+
numberOfRanks: number;
|
|
12
|
+
numberOfFiles: number;
|
|
13
|
+
static default(): Minishogi;
|
|
14
|
+
static fromSetup(setup: Setup, strict: boolean): Result<Minishogi, PositionError>;
|
|
15
|
+
clone(): Minishogi;
|
|
16
|
+
dests(square: Square, ctx?: Context): SquareSet;
|
|
17
|
+
dropDests(role: Role, ctx?: Context): SquareSet;
|
|
18
|
+
}
|
package/variant.js
CHANGED
|
@@ -1,23 +1,58 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setupPosition = exports.defaultPosition = exports.Shogi = exports.IllegalSetup = exports.PositionError = exports.Position = void 0;
|
|
3
|
+
exports.Minishogi = exports.setupPosition = exports.defaultPosition = exports.Shogi = exports.IllegalSetup = exports.PositionError = exports.Position = void 0;
|
|
4
4
|
const shogi_1 = require("./shogi");
|
|
5
5
|
Object.defineProperty(exports, "PositionError", { enumerable: true, get: function () { return shogi_1.PositionError; } });
|
|
6
6
|
Object.defineProperty(exports, "Position", { enumerable: true, get: function () { return shogi_1.Position; } });
|
|
7
7
|
Object.defineProperty(exports, "IllegalSetup", { enumerable: true, get: function () { return shogi_1.IllegalSetup; } });
|
|
8
8
|
Object.defineProperty(exports, "Shogi", { enumerable: true, get: function () { return shogi_1.Shogi; } });
|
|
9
|
+
const squareSet_1 = require("./squareSet");
|
|
10
|
+
const board_1 = require("./board");
|
|
11
|
+
const hand_1 = require("./hand");
|
|
9
12
|
function defaultPosition(rules) {
|
|
10
13
|
switch (rules) {
|
|
11
|
-
case '
|
|
14
|
+
case 'minishogi':
|
|
15
|
+
return Minishogi.default();
|
|
16
|
+
default:
|
|
12
17
|
return shogi_1.Shogi.default();
|
|
13
18
|
}
|
|
14
19
|
}
|
|
15
20
|
exports.defaultPosition = defaultPosition;
|
|
16
21
|
function setupPosition(rules, setup, strict = true) {
|
|
17
22
|
switch (rules) {
|
|
18
|
-
case '
|
|
23
|
+
case 'minishogi':
|
|
24
|
+
return Minishogi.fromSetup(setup, strict);
|
|
25
|
+
default:
|
|
19
26
|
return shogi_1.Shogi.fromSetup(setup, strict);
|
|
20
27
|
}
|
|
21
28
|
}
|
|
22
29
|
exports.setupPosition = setupPosition;
|
|
30
|
+
class Minishogi extends shogi_1.Shogi {
|
|
31
|
+
constructor() {
|
|
32
|
+
super('minishogi');
|
|
33
|
+
this.numberOfRanks = 5;
|
|
34
|
+
this.numberOfFiles = 5;
|
|
35
|
+
}
|
|
36
|
+
static default() {
|
|
37
|
+
const pos = new this();
|
|
38
|
+
pos.board = board_1.Board.minishogi();
|
|
39
|
+
pos.hands = hand_1.Hands.empty();
|
|
40
|
+
pos.turn = 'sente';
|
|
41
|
+
pos.fullmoves = 1;
|
|
42
|
+
return pos;
|
|
43
|
+
}
|
|
44
|
+
static fromSetup(setup, strict) {
|
|
45
|
+
return super.fromSetup(setup, strict);
|
|
46
|
+
}
|
|
47
|
+
clone() {
|
|
48
|
+
return super.clone();
|
|
49
|
+
}
|
|
50
|
+
dests(square, ctx) {
|
|
51
|
+
return super.dests(square, ctx).intersect(new squareSet_1.SquareSet(0x0, 0x7c3e000, 0x7c3e1f0));
|
|
52
|
+
}
|
|
53
|
+
dropDests(role, ctx) {
|
|
54
|
+
return super.dropDests(role, ctx).intersect(new squareSet_1.SquareSet(0x0, 0x7c3e000, 0x7c3e1f0));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.Minishogi = Minishogi;
|
|
23
58
|
//# sourceMappingURL=variant.js.map
|
package/variant.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variant.js","sourceRoot":"","sources":["src/variant.ts"],"names":[],"mappings":";;;AAGA,mCAAgF;
|
|
1
|
+
{"version":3,"file":"variant.js","sourceRoot":"","sources":["src/variant.ts"],"names":[],"mappings":";;;AAGA,mCAAgF;AAK7D,8FALV,qBAAa,OAKU;AAAvB,yFALe,gBAAQ,OAKf;AAAiB,6FALA,oBAAY,OAKA;AAAW,sFALA,aAAK,OAKA;AAJ9D,2CAAwC;AACxC,mCAAgC;AAChC,iCAA+B;AAI/B,SAAgB,eAAe,CAAC,KAAY;IAC1C,QAAQ,KAAK,EAAE;QACb,KAAK,WAAW;YACd,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC;QAC7B;YACE,OAAO,aAAK,CAAC,OAAO,EAAE,CAAC;KAC1B;AACH,CAAC;AAPD,0CAOC;AAED,SAAgB,aAAa,CAAC,KAAY,EAAE,KAAY,EAAE,MAAM,GAAG,IAAI;IACrE,QAAQ,KAAK,EAAE;QACb,KAAK,WAAW;YACd,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5C;YACE,OAAO,aAAK,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;KACzC;AACH,CAAC;AAPD,sCAOC;AAED,MAAa,SAAU,SAAQ,aAAK;IAClC;QACE,KAAK,CAAC,WAAW,CAAC,CAAC;QAGrB,kBAAa,GAAG,CAAC,CAAC;QAClB,kBAAa,GAAG,CAAC,CAAC;IAHlB,CAAC;IAKD,MAAM,CAAC,OAAO;QACZ,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,GAAG,CAAC,KAAK,GAAG,aAAK,CAAC,SAAS,EAAE,CAAC;QAC9B,GAAG,CAAC,KAAK,GAAG,YAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;QACnB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;QAClB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAY,EAAE,MAAe;QAC5C,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAqC,CAAC;IAC5E,CAAC;IAED,KAAK;QACH,OAAO,KAAK,CAAC,KAAK,EAAe,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAc,EAAE,GAAa;QACjC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,qBAAS,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,SAAS,CAAC,IAAU,EAAE,GAAa;QACjC,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,qBAAS,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IACxF,CAAC;CACF;AAhCD,8BAgCC"}
|
package/variantUtil.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Piece, Square } from '.';
|
|
2
|
+
import { SquareSet } from './squareSet';
|
|
3
|
+
import { Color, Role, Rules } from './types';
|
|
4
|
+
export declare function pieceCanPromote(rules: Rules): (piece: Piece, from: Square, to: Square) => boolean;
|
|
5
|
+
export declare function pieceInDeadZone(rules: Rules): (piece: Piece, sq: Square) => boolean;
|
|
6
|
+
export declare function allRoles(rules: Rules): Role[];
|
|
7
|
+
export declare function handRoles(rules: Rules): Role[];
|
|
8
|
+
export declare function promotableRoles(rules: Rules): Role[];
|
|
9
|
+
export declare function promote(rules: Rules): (role: Role) => Role;
|
|
10
|
+
export declare function unpromote(rules: Rules): (role: Role) => Role;
|
|
11
|
+
export declare function promotionZone(rules: Rules): (color: Color) => SquareSet;
|
|
12
|
+
export declare function backrank(rules: Rules): (color: Color) => SquareSet;
|
|
13
|
+
export declare function secondBackrank(rules: Rules): (color: Color) => SquareSet;
|