js-chess-engine 1.0.2 → 2.0.1-rc.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 +586 -205
- package/dist/adapters/APIAdapter.d.ts +88 -0
- package/dist/adapters/APIAdapter.d.ts.map +1 -0
- package/dist/adapters/APIAdapter.js +225 -0
- package/dist/adapters/APIAdapter.js.map +1 -0
- package/dist/ai/AIEngine.d.ts +42 -0
- package/dist/ai/AIEngine.d.ts.map +1 -0
- package/dist/ai/AIEngine.js +62 -0
- package/dist/ai/AIEngine.js.map +1 -0
- package/dist/ai/Evaluator.d.ts +48 -0
- package/dist/ai/Evaluator.d.ts.map +1 -0
- package/dist/ai/Evaluator.js +248 -0
- package/dist/ai/Evaluator.js.map +1 -0
- package/dist/ai/MoveOrdering.d.ts +60 -0
- package/dist/ai/MoveOrdering.d.ts.map +1 -0
- package/dist/ai/MoveOrdering.js +173 -0
- package/dist/ai/MoveOrdering.js.map +1 -0
- package/dist/ai/Search.d.ts +62 -0
- package/dist/ai/Search.d.ts.map +1 -0
- package/dist/ai/Search.js +340 -0
- package/dist/ai/Search.js.map +1 -0
- package/dist/ai/TranspositionTable.d.ts +100 -0
- package/dist/ai/TranspositionTable.d.ts.map +1 -0
- package/dist/ai/TranspositionTable.js +176 -0
- package/dist/ai/TranspositionTable.js.map +1 -0
- package/dist/core/AttackDetector.d.ts +52 -0
- package/dist/core/AttackDetector.d.ts.map +1 -0
- package/dist/core/AttackDetector.js +387 -0
- package/dist/core/AttackDetector.js.map +1 -0
- package/dist/core/Board.d.ts +109 -0
- package/dist/core/Board.d.ts.map +1 -0
- package/dist/core/Board.js +410 -0
- package/dist/core/Board.js.map +1 -0
- package/dist/core/MoveGenerator.d.ts +48 -0
- package/dist/core/MoveGenerator.d.ts.map +1 -0
- package/dist/core/MoveGenerator.js +678 -0
- package/dist/core/MoveGenerator.js.map +1 -0
- package/dist/core/Position.d.ts +135 -0
- package/dist/core/Position.d.ts.map +1 -0
- package/dist/core/Position.js +351 -0
- package/dist/core/Position.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +25 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/zobrist.d.ts +93 -0
- package/dist/core/zobrist.d.ts.map +1 -0
- package/dist/core/zobrist.js +273 -0
- package/dist/core/zobrist.js.map +1 -0
- package/dist/index.d.ts +154 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +353 -0
- package/dist/index.js.map +1 -0
- package/dist/types/ai.types.d.ts +97 -0
- package/dist/types/ai.types.d.ts.map +1 -0
- package/dist/types/ai.types.js +17 -0
- package/dist/types/ai.types.js.map +1 -0
- package/dist/types/board.types.d.ts +140 -0
- package/dist/types/board.types.d.ts.map +1 -0
- package/dist/types/board.types.js +34 -0
- package/dist/types/board.types.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +26 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/move.types.d.ts +70 -0
- package/dist/types/move.types.d.ts.map +1 -0
- package/dist/types/move.types.js +53 -0
- package/dist/types/move.types.js.map +1 -0
- package/dist/utils/constants.d.ts +123 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +259 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/conversion.d.ts +152 -0
- package/dist/utils/conversion.d.ts.map +1 -0
- package/dist/utils/conversion.js +288 -0
- package/dist/utils/conversion.js.map +1 -0
- package/dist/utils/environment.d.ts +33 -0
- package/dist/utils/environment.d.ts.map +1 -0
- package/dist/utils/environment.js +71 -0
- package/dist/utils/environment.js.map +1 -0
- package/dist/utils/fen.d.ts +28 -0
- package/dist/utils/fen.d.ts.map +1 -0
- package/dist/utils/fen.js +203 -0
- package/dist/utils/fen.js.map +1 -0
- package/package.json +27 -28
- package/.eslintrc.json +0 -16
- package/.github/workflows/main.yml +0 -20
- package/CHANGELOG.md +0 -587
- package/dist/js-chess-engine.js +0 -1
- package/example/aiMatch.mjs +0 -21
- package/example/console.mjs +0 -37
- package/example/server.mjs +0 -27
- package/lib/Board.mjs +0 -943
- package/lib/const/board.mjs +0 -838
- package/lib/js-chess-engine.mjs +0 -99
- package/lib/utils.mjs +0 -154
- package/test/.eslintrc.json +0 -11
- package/test/ai.test.mjs +0 -132
- package/test/badge.svg +0 -1
- package/test/importExport.mjs +0 -108
- package/test/moves.test.mjs +0 -773
- package/webpack.config.js +0 -12
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Internal board representation using hybrid bitboards + mailbox
|
|
4
|
+
*
|
|
5
|
+
* This module provides the core board state with:
|
|
6
|
+
* - Bitboards for fast attack detection and piece locations
|
|
7
|
+
* - Mailbox (Int8Array) for O(1) piece lookup by square
|
|
8
|
+
* - Zobrist hashing for transposition table
|
|
9
|
+
* - Efficient copying and comparison
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.createEmptyBoard = createEmptyBoard;
|
|
13
|
+
exports.createStartingBoard = createStartingBoard;
|
|
14
|
+
exports.setPiece = setPiece;
|
|
15
|
+
exports.removePiece = removePiece;
|
|
16
|
+
exports.getPiece = getPiece;
|
|
17
|
+
exports.getBitboard = getBitboard;
|
|
18
|
+
exports.copyBoard = copyBoard;
|
|
19
|
+
exports.isPieceColor = isPieceColor;
|
|
20
|
+
exports.getPieceColor = getPieceColor;
|
|
21
|
+
exports.oppositeColor = oppositeColor;
|
|
22
|
+
exports.isSquareEmpty = isSquareEmpty;
|
|
23
|
+
exports.isSquareEnemy = isSquareEnemy;
|
|
24
|
+
exports.isSquareFriendly = isSquareFriendly;
|
|
25
|
+
const types_1 = require("../types");
|
|
26
|
+
const constants_1 = require("../utils/constants");
|
|
27
|
+
/**
|
|
28
|
+
* Create a new empty internal board
|
|
29
|
+
*
|
|
30
|
+
* @returns Empty board with no pieces
|
|
31
|
+
*/
|
|
32
|
+
function createEmptyBoard() {
|
|
33
|
+
return {
|
|
34
|
+
// Mailbox (64 squares, each can hold a piece enum value)
|
|
35
|
+
mailbox: new Int8Array(constants_1.TOTAL_SQUARES),
|
|
36
|
+
// White piece bitboards
|
|
37
|
+
whitePawns: 0n,
|
|
38
|
+
whiteKnights: 0n,
|
|
39
|
+
whiteBishops: 0n,
|
|
40
|
+
whiteRooks: 0n,
|
|
41
|
+
whiteQueens: 0n,
|
|
42
|
+
whiteKing: 0n,
|
|
43
|
+
// Black piece bitboards
|
|
44
|
+
blackPawns: 0n,
|
|
45
|
+
blackKnights: 0n,
|
|
46
|
+
blackBishops: 0n,
|
|
47
|
+
blackRooks: 0n,
|
|
48
|
+
blackQueens: 0n,
|
|
49
|
+
blackKing: 0n,
|
|
50
|
+
// Composite bitboards
|
|
51
|
+
whitePieces: 0n,
|
|
52
|
+
blackPieces: 0n,
|
|
53
|
+
allPieces: 0n,
|
|
54
|
+
// Game state
|
|
55
|
+
turn: types_1.InternalColor.WHITE,
|
|
56
|
+
castlingRights: {
|
|
57
|
+
whiteShort: true,
|
|
58
|
+
blackShort: true,
|
|
59
|
+
whiteLong: true,
|
|
60
|
+
blackLong: true,
|
|
61
|
+
},
|
|
62
|
+
enPassantSquare: null,
|
|
63
|
+
halfMoveClock: 0,
|
|
64
|
+
fullMoveNumber: 1,
|
|
65
|
+
// Zobrist hash (will be computed)
|
|
66
|
+
zobristHash: 0n,
|
|
67
|
+
// Game status
|
|
68
|
+
isCheck: false,
|
|
69
|
+
isCheckmate: false,
|
|
70
|
+
isStalemate: false,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Create a new board for the starting position
|
|
75
|
+
*
|
|
76
|
+
* @returns Board set up for standard chess starting position
|
|
77
|
+
*/
|
|
78
|
+
function createStartingBoard() {
|
|
79
|
+
const board = createEmptyBoard();
|
|
80
|
+
// White pawns (rank 2, indices 8-15)
|
|
81
|
+
for (let i = 8; i < 16; i++) {
|
|
82
|
+
setPiece(board, i, types_1.Piece.WHITE_PAWN);
|
|
83
|
+
}
|
|
84
|
+
// Black pawns (rank 7, indices 48-55)
|
|
85
|
+
for (let i = 48; i < 56; i++) {
|
|
86
|
+
setPiece(board, i, types_1.Piece.BLACK_PAWN);
|
|
87
|
+
}
|
|
88
|
+
// White pieces (rank 1, indices 0-7)
|
|
89
|
+
setPiece(board, 0, types_1.Piece.WHITE_ROOK); // A1
|
|
90
|
+
setPiece(board, 1, types_1.Piece.WHITE_KNIGHT); // B1
|
|
91
|
+
setPiece(board, 2, types_1.Piece.WHITE_BISHOP); // C1
|
|
92
|
+
setPiece(board, 3, types_1.Piece.WHITE_QUEEN); // D1
|
|
93
|
+
setPiece(board, 4, types_1.Piece.WHITE_KING); // E1
|
|
94
|
+
setPiece(board, 5, types_1.Piece.WHITE_BISHOP); // F1
|
|
95
|
+
setPiece(board, 6, types_1.Piece.WHITE_KNIGHT); // G1
|
|
96
|
+
setPiece(board, 7, types_1.Piece.WHITE_ROOK); // H1
|
|
97
|
+
// Black pieces (rank 8, indices 56-63)
|
|
98
|
+
setPiece(board, 56, types_1.Piece.BLACK_ROOK); // A8
|
|
99
|
+
setPiece(board, 57, types_1.Piece.BLACK_KNIGHT); // B8
|
|
100
|
+
setPiece(board, 58, types_1.Piece.BLACK_BISHOP); // C8
|
|
101
|
+
setPiece(board, 59, types_1.Piece.BLACK_QUEEN); // D8
|
|
102
|
+
setPiece(board, 60, types_1.Piece.BLACK_KING); // E8
|
|
103
|
+
setPiece(board, 61, types_1.Piece.BLACK_BISHOP); // F8
|
|
104
|
+
setPiece(board, 62, types_1.Piece.BLACK_KNIGHT); // G8
|
|
105
|
+
setPiece(board, 63, types_1.Piece.BLACK_ROOK); // H8
|
|
106
|
+
// Enable castling rights for starting position
|
|
107
|
+
board.castlingRights = {
|
|
108
|
+
whiteShort: true,
|
|
109
|
+
whiteLong: true,
|
|
110
|
+
blackShort: true,
|
|
111
|
+
blackLong: true,
|
|
112
|
+
};
|
|
113
|
+
return board;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Set a piece on the board
|
|
117
|
+
*
|
|
118
|
+
* @param board - Board to modify
|
|
119
|
+
* @param index - Square index (0-63)
|
|
120
|
+
* @param piece - Piece to place
|
|
121
|
+
*/
|
|
122
|
+
function setPiece(board, index, piece) {
|
|
123
|
+
// Remove any existing piece at this square first
|
|
124
|
+
const existingPiece = board.mailbox[index];
|
|
125
|
+
if (existingPiece !== types_1.Piece.EMPTY) {
|
|
126
|
+
removePiece(board, index);
|
|
127
|
+
}
|
|
128
|
+
// Set piece in mailbox
|
|
129
|
+
board.mailbox[index] = piece;
|
|
130
|
+
if (piece === types_1.Piece.EMPTY) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
// Set bit in appropriate bitboard
|
|
134
|
+
const bitboard = 1n << BigInt(index);
|
|
135
|
+
switch (piece) {
|
|
136
|
+
case types_1.Piece.WHITE_PAWN:
|
|
137
|
+
board.whitePawns |= bitboard;
|
|
138
|
+
board.whitePieces |= bitboard;
|
|
139
|
+
break;
|
|
140
|
+
case types_1.Piece.WHITE_KNIGHT:
|
|
141
|
+
board.whiteKnights |= bitboard;
|
|
142
|
+
board.whitePieces |= bitboard;
|
|
143
|
+
break;
|
|
144
|
+
case types_1.Piece.WHITE_BISHOP:
|
|
145
|
+
board.whiteBishops |= bitboard;
|
|
146
|
+
board.whitePieces |= bitboard;
|
|
147
|
+
break;
|
|
148
|
+
case types_1.Piece.WHITE_ROOK:
|
|
149
|
+
board.whiteRooks |= bitboard;
|
|
150
|
+
board.whitePieces |= bitboard;
|
|
151
|
+
break;
|
|
152
|
+
case types_1.Piece.WHITE_QUEEN:
|
|
153
|
+
board.whiteQueens |= bitboard;
|
|
154
|
+
board.whitePieces |= bitboard;
|
|
155
|
+
break;
|
|
156
|
+
case types_1.Piece.WHITE_KING:
|
|
157
|
+
board.whiteKing |= bitboard;
|
|
158
|
+
board.whitePieces |= bitboard;
|
|
159
|
+
break;
|
|
160
|
+
case types_1.Piece.BLACK_PAWN:
|
|
161
|
+
board.blackPawns |= bitboard;
|
|
162
|
+
board.blackPieces |= bitboard;
|
|
163
|
+
break;
|
|
164
|
+
case types_1.Piece.BLACK_KNIGHT:
|
|
165
|
+
board.blackKnights |= bitboard;
|
|
166
|
+
board.blackPieces |= bitboard;
|
|
167
|
+
break;
|
|
168
|
+
case types_1.Piece.BLACK_BISHOP:
|
|
169
|
+
board.blackBishops |= bitboard;
|
|
170
|
+
board.blackPieces |= bitboard;
|
|
171
|
+
break;
|
|
172
|
+
case types_1.Piece.BLACK_ROOK:
|
|
173
|
+
board.blackRooks |= bitboard;
|
|
174
|
+
board.blackPieces |= bitboard;
|
|
175
|
+
break;
|
|
176
|
+
case types_1.Piece.BLACK_QUEEN:
|
|
177
|
+
board.blackQueens |= bitboard;
|
|
178
|
+
board.blackPieces |= bitboard;
|
|
179
|
+
break;
|
|
180
|
+
case types_1.Piece.BLACK_KING:
|
|
181
|
+
board.blackKing |= bitboard;
|
|
182
|
+
board.blackPieces |= bitboard;
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
// Update composite bitboards
|
|
186
|
+
board.allPieces = board.whitePieces | board.blackPieces;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Remove a piece from the board
|
|
190
|
+
*
|
|
191
|
+
* @param board - Board to modify
|
|
192
|
+
* @param index - Square index (0-63)
|
|
193
|
+
*/
|
|
194
|
+
function removePiece(board, index) {
|
|
195
|
+
const piece = board.mailbox[index];
|
|
196
|
+
if (piece === types_1.Piece.EMPTY) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
// Clear piece in mailbox
|
|
200
|
+
board.mailbox[index] = types_1.Piece.EMPTY;
|
|
201
|
+
// Clear bit in appropriate bitboard
|
|
202
|
+
const bitboard = ~(1n << BigInt(index));
|
|
203
|
+
switch (piece) {
|
|
204
|
+
case types_1.Piece.WHITE_PAWN:
|
|
205
|
+
board.whitePawns &= bitboard;
|
|
206
|
+
board.whitePieces &= bitboard;
|
|
207
|
+
break;
|
|
208
|
+
case types_1.Piece.WHITE_KNIGHT:
|
|
209
|
+
board.whiteKnights &= bitboard;
|
|
210
|
+
board.whitePieces &= bitboard;
|
|
211
|
+
break;
|
|
212
|
+
case types_1.Piece.WHITE_BISHOP:
|
|
213
|
+
board.whiteBishops &= bitboard;
|
|
214
|
+
board.whitePieces &= bitboard;
|
|
215
|
+
break;
|
|
216
|
+
case types_1.Piece.WHITE_ROOK:
|
|
217
|
+
board.whiteRooks &= bitboard;
|
|
218
|
+
board.whitePieces &= bitboard;
|
|
219
|
+
break;
|
|
220
|
+
case types_1.Piece.WHITE_QUEEN:
|
|
221
|
+
board.whiteQueens &= bitboard;
|
|
222
|
+
board.whitePieces &= bitboard;
|
|
223
|
+
break;
|
|
224
|
+
case types_1.Piece.WHITE_KING:
|
|
225
|
+
board.whiteKing &= bitboard;
|
|
226
|
+
board.whitePieces &= bitboard;
|
|
227
|
+
break;
|
|
228
|
+
case types_1.Piece.BLACK_PAWN:
|
|
229
|
+
board.blackPawns &= bitboard;
|
|
230
|
+
board.blackPieces &= bitboard;
|
|
231
|
+
break;
|
|
232
|
+
case types_1.Piece.BLACK_KNIGHT:
|
|
233
|
+
board.blackKnights &= bitboard;
|
|
234
|
+
board.blackPieces &= bitboard;
|
|
235
|
+
break;
|
|
236
|
+
case types_1.Piece.BLACK_BISHOP:
|
|
237
|
+
board.blackBishops &= bitboard;
|
|
238
|
+
board.blackPieces &= bitboard;
|
|
239
|
+
break;
|
|
240
|
+
case types_1.Piece.BLACK_ROOK:
|
|
241
|
+
board.blackRooks &= bitboard;
|
|
242
|
+
board.blackPieces &= bitboard;
|
|
243
|
+
break;
|
|
244
|
+
case types_1.Piece.BLACK_QUEEN:
|
|
245
|
+
board.blackQueens &= bitboard;
|
|
246
|
+
board.blackPieces &= bitboard;
|
|
247
|
+
break;
|
|
248
|
+
case types_1.Piece.BLACK_KING:
|
|
249
|
+
board.blackKing &= bitboard;
|
|
250
|
+
board.blackPieces &= bitboard;
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
// Update composite bitboards
|
|
254
|
+
board.allPieces = board.whitePieces | board.blackPieces;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Get the piece at a square
|
|
258
|
+
*
|
|
259
|
+
* @param board - Board to query
|
|
260
|
+
* @param index - Square index (0-63)
|
|
261
|
+
* @returns Piece at the square
|
|
262
|
+
*/
|
|
263
|
+
function getPiece(board, index) {
|
|
264
|
+
return board.mailbox[index];
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get the bitboard for a specific piece type
|
|
268
|
+
*
|
|
269
|
+
* @param board - Board to query
|
|
270
|
+
* @param piece - Piece type
|
|
271
|
+
* @returns Bitboard with all pieces of this type
|
|
272
|
+
*/
|
|
273
|
+
function getBitboard(board, piece) {
|
|
274
|
+
switch (piece) {
|
|
275
|
+
case types_1.Piece.WHITE_PAWN: return board.whitePawns;
|
|
276
|
+
case types_1.Piece.WHITE_KNIGHT: return board.whiteKnights;
|
|
277
|
+
case types_1.Piece.WHITE_BISHOP: return board.whiteBishops;
|
|
278
|
+
case types_1.Piece.WHITE_ROOK: return board.whiteRooks;
|
|
279
|
+
case types_1.Piece.WHITE_QUEEN: return board.whiteQueens;
|
|
280
|
+
case types_1.Piece.WHITE_KING: return board.whiteKing;
|
|
281
|
+
case types_1.Piece.BLACK_PAWN: return board.blackPawns;
|
|
282
|
+
case types_1.Piece.BLACK_KNIGHT: return board.blackKnights;
|
|
283
|
+
case types_1.Piece.BLACK_BISHOP: return board.blackBishops;
|
|
284
|
+
case types_1.Piece.BLACK_ROOK: return board.blackRooks;
|
|
285
|
+
case types_1.Piece.BLACK_QUEEN: return board.blackQueens;
|
|
286
|
+
case types_1.Piece.BLACK_KING: return board.blackKing;
|
|
287
|
+
default: return 0n;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Copy a board (efficient struct copy)
|
|
292
|
+
*
|
|
293
|
+
* @param source - Source board
|
|
294
|
+
* @returns New board with same state
|
|
295
|
+
*/
|
|
296
|
+
function copyBoard(source) {
|
|
297
|
+
return {
|
|
298
|
+
// Copy mailbox
|
|
299
|
+
mailbox: new Int8Array(source.mailbox),
|
|
300
|
+
// Copy bitboards (primitives, so direct copy)
|
|
301
|
+
whitePawns: source.whitePawns,
|
|
302
|
+
whiteKnights: source.whiteKnights,
|
|
303
|
+
whiteBishops: source.whiteBishops,
|
|
304
|
+
whiteRooks: source.whiteRooks,
|
|
305
|
+
whiteQueens: source.whiteQueens,
|
|
306
|
+
whiteKing: source.whiteKing,
|
|
307
|
+
blackPawns: source.blackPawns,
|
|
308
|
+
blackKnights: source.blackKnights,
|
|
309
|
+
blackBishops: source.blackBishops,
|
|
310
|
+
blackRooks: source.blackRooks,
|
|
311
|
+
blackQueens: source.blackQueens,
|
|
312
|
+
blackKing: source.blackKing,
|
|
313
|
+
whitePieces: source.whitePieces,
|
|
314
|
+
blackPieces: source.blackPieces,
|
|
315
|
+
allPieces: source.allPieces,
|
|
316
|
+
// Copy game state
|
|
317
|
+
turn: source.turn,
|
|
318
|
+
castlingRights: { ...source.castlingRights },
|
|
319
|
+
enPassantSquare: source.enPassantSquare,
|
|
320
|
+
halfMoveClock: source.halfMoveClock,
|
|
321
|
+
fullMoveNumber: source.fullMoveNumber,
|
|
322
|
+
zobristHash: source.zobristHash,
|
|
323
|
+
isCheck: source.isCheck,
|
|
324
|
+
isCheckmate: source.isCheckmate,
|
|
325
|
+
isStalemate: source.isStalemate,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Check if a piece belongs to a specific color
|
|
330
|
+
*
|
|
331
|
+
* @param piece - Piece to check
|
|
332
|
+
* @param color - Color to check
|
|
333
|
+
* @returns true if piece is of the given color
|
|
334
|
+
*/
|
|
335
|
+
function isPieceColor(piece, color) {
|
|
336
|
+
if (piece === types_1.Piece.EMPTY) {
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
339
|
+
if (color === types_1.InternalColor.WHITE) {
|
|
340
|
+
return piece >= types_1.Piece.WHITE_PAWN && piece <= types_1.Piece.WHITE_KING;
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
return piece >= types_1.Piece.BLACK_PAWN && piece <= types_1.Piece.BLACK_KING;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Get the color of a piece
|
|
348
|
+
*
|
|
349
|
+
* @param piece - Piece to check
|
|
350
|
+
* @returns Color of the piece, or null if empty
|
|
351
|
+
*/
|
|
352
|
+
function getPieceColor(piece) {
|
|
353
|
+
if (piece === types_1.Piece.EMPTY) {
|
|
354
|
+
return null;
|
|
355
|
+
}
|
|
356
|
+
return piece >= types_1.Piece.WHITE_PAWN && piece <= types_1.Piece.WHITE_KING
|
|
357
|
+
? types_1.InternalColor.WHITE
|
|
358
|
+
: types_1.InternalColor.BLACK;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Get the opposite color
|
|
362
|
+
*
|
|
363
|
+
* @param color - Color
|
|
364
|
+
* @returns Opposite color
|
|
365
|
+
*/
|
|
366
|
+
function oppositeColor(color) {
|
|
367
|
+
return color === types_1.InternalColor.WHITE ? types_1.InternalColor.BLACK : types_1.InternalColor.WHITE;
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Check if a square is empty
|
|
371
|
+
*
|
|
372
|
+
* @param board - Board to check
|
|
373
|
+
* @param index - Square index
|
|
374
|
+
* @returns true if square is empty
|
|
375
|
+
*/
|
|
376
|
+
function isSquareEmpty(board, index) {
|
|
377
|
+
return board.mailbox[index] === types_1.Piece.EMPTY;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Check if a square is occupied by an enemy piece
|
|
381
|
+
*
|
|
382
|
+
* @param board - Board to check
|
|
383
|
+
* @param index - Square index
|
|
384
|
+
* @param color - Our color
|
|
385
|
+
* @returns true if square has enemy piece
|
|
386
|
+
*/
|
|
387
|
+
function isSquareEnemy(board, index, color) {
|
|
388
|
+
const piece = board.mailbox[index];
|
|
389
|
+
if (piece === types_1.Piece.EMPTY) {
|
|
390
|
+
return false;
|
|
391
|
+
}
|
|
392
|
+
const pieceColor = getPieceColor(piece);
|
|
393
|
+
return pieceColor !== null && pieceColor !== color;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Check if a square is occupied by a friendly piece
|
|
397
|
+
*
|
|
398
|
+
* @param board - Board to check
|
|
399
|
+
* @param index - Square index
|
|
400
|
+
* @param color - Our color
|
|
401
|
+
* @returns true if square has friendly piece
|
|
402
|
+
*/
|
|
403
|
+
function isSquareFriendly(board, index, color) {
|
|
404
|
+
const piece = board.mailbox[index];
|
|
405
|
+
if (piece === types_1.Piece.EMPTY) {
|
|
406
|
+
return false;
|
|
407
|
+
}
|
|
408
|
+
return isPieceColor(piece, color);
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=Board.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Board.js","sourceRoot":"","sources":["../../src/core/Board.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Move generation for all piece types
|
|
3
|
+
*
|
|
4
|
+
* This module generates all legal moves for a given position using
|
|
5
|
+
* bitboard-based algorithms for performance.
|
|
6
|
+
*/
|
|
7
|
+
import { InternalBoard, SquareIndex, InternalMove } from '../types';
|
|
8
|
+
/**
|
|
9
|
+
* Generate all legal moves for the current position
|
|
10
|
+
*
|
|
11
|
+
* @param board - Board state
|
|
12
|
+
* @returns Array of legal moves
|
|
13
|
+
*/
|
|
14
|
+
export declare function generateLegalMoves(board: InternalBoard): InternalMove[];
|
|
15
|
+
/**
|
|
16
|
+
* Generate all pseudo-legal moves (may leave king in check)
|
|
17
|
+
*
|
|
18
|
+
* @param board - Board state
|
|
19
|
+
* @returns Array of pseudo-legal moves
|
|
20
|
+
*/
|
|
21
|
+
export declare function generatePseudoLegalMoves(board: InternalBoard): InternalMove[];
|
|
22
|
+
/**
|
|
23
|
+
* Get all legal moves for a specific piece
|
|
24
|
+
*
|
|
25
|
+
* @param board - Board state
|
|
26
|
+
* @param square - Square of the piece
|
|
27
|
+
* @returns Array of legal moves for that piece
|
|
28
|
+
*/
|
|
29
|
+
export declare function getMovesForPiece(board: InternalBoard, square: SquareIndex): InternalMove[];
|
|
30
|
+
/**
|
|
31
|
+
* Check if a move is legal
|
|
32
|
+
*
|
|
33
|
+
* @param board - Board state
|
|
34
|
+
* @param from - From square
|
|
35
|
+
* @param to - To square
|
|
36
|
+
* @returns true if move is legal
|
|
37
|
+
*/
|
|
38
|
+
export declare function isMoveLegal(board: InternalBoard, from: SquareIndex, to: SquareIndex): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Apply a move to the board with full state updates (mutates the board)
|
|
41
|
+
* Updates turn, castling rights, en passant, move counters, and game status
|
|
42
|
+
*
|
|
43
|
+
* @param board - Board state to modify
|
|
44
|
+
* @param move - Move to apply
|
|
45
|
+
* @returns The applied move
|
|
46
|
+
*/
|
|
47
|
+
export declare function applyMoveComplete(board: InternalBoard, move: InternalMove): InternalMove;
|
|
48
|
+
//# sourceMappingURL=MoveGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MoveGenerator.d.ts","sourceRoot":"","sources":["../../src/core/MoveGenerator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACH,aAAa,EAEb,WAAW,EAGX,YAAY,EAEf,MAAM,UAAU,CAAC;AAmBlB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY,EAAE,CAoCvE;AA+ED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY,EAAE,CAiB7E;AAkcD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,CAG1F;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,GAAG,OAAO,CAG7F;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,GAAG,YAAY,CA+ExF"}
|