@real_one_chess_king/game-logic
Version:
R.O.C.K. chess game logic
157 lines • 8.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GameInitializer = void 0;
const crypto_1 = require("crypto");
const check_mate_global_rule_1 = require("./rules/global/check-mate.global-rule");
const rules_repository_1 = require("./rules.repository");
const color_1 = require("./color");
const piece_constants_1 = require("./piece/piece.constants");
class GameInitializer {
getDefaultGlobalRules() {
return [new check_mate_global_rule_1.CheckMateGlobalRule()];
}
spawnDefaultRulesAndDefaultPosition(board) {
const whitePawnSpawnLine = 1;
const blackPawnSpawnLine = 6;
const whiteSpawnLine = 0;
const blackSpawnLine = 7;
const position = {
[color_1.Color.white]: [
{ type: piece_constants_1.PieceType.Rook, coordinate: [0, whiteSpawnLine] },
{ type: piece_constants_1.PieceType.Knight, coordinate: [1, whiteSpawnLine] },
{ type: piece_constants_1.PieceType.Bishop, coordinate: [2, whiteSpawnLine] },
{ type: piece_constants_1.PieceType.King, coordinate: [3, whiteSpawnLine] },
{ type: piece_constants_1.PieceType.Queen, coordinate: [4, whiteSpawnLine] },
{ type: piece_constants_1.PieceType.Bishop, coordinate: [5, whiteSpawnLine] },
{ type: piece_constants_1.PieceType.Knight, coordinate: [6, whiteSpawnLine] },
{ type: piece_constants_1.PieceType.Rook, coordinate: [7, whiteSpawnLine] },
],
[color_1.Color.black]: [
{ type: piece_constants_1.PieceType.Rook, coordinate: [0, blackSpawnLine] },
{ type: piece_constants_1.PieceType.Knight, coordinate: [1, blackSpawnLine] },
{ type: piece_constants_1.PieceType.Bishop, coordinate: [2, blackSpawnLine] },
{ type: piece_constants_1.PieceType.King, coordinate: [3, blackSpawnLine] },
{ type: piece_constants_1.PieceType.Queen, coordinate: [4, blackSpawnLine] },
{ type: piece_constants_1.PieceType.Bishop, coordinate: [5, blackSpawnLine] },
{ type: piece_constants_1.PieceType.Knight, coordinate: [6, blackSpawnLine] },
{ type: piece_constants_1.PieceType.Rook, coordinate: [7, blackSpawnLine] },
],
};
for (let i = 0; i <= 7; i++) {
// todo debug thing
position[color_1.Color.white].push({
type: piece_constants_1.PieceType.Pawn,
coordinate: [i, whitePawnSpawnLine],
});
position[color_1.Color.black].push({
type: piece_constants_1.PieceType.Pawn,
coordinate: [i, blackPawnSpawnLine],
});
}
this.spawnDefaultRulesCustomPosition(board, position);
return position;
}
rulesRepository = new rules_repository_1.RulesRepository();
getDefaultRulesForPiece(type, color, withPostRulest = true) {
switch (type) {
case piece_constants_1.PieceType.Pawn:
return this.rulesRepository.getDefaultPawnRules(color, withPostRulest);
case piece_constants_1.PieceType.Rook:
return this.rulesRepository.getDefaultRookRules();
case piece_constants_1.PieceType.Bishop:
return this.rulesRepository.getDefaultBishopRules();
case piece_constants_1.PieceType.Knight:
return this.rulesRepository.getDefaultKnightRules();
case piece_constants_1.PieceType.Queen:
return this.rulesRepository.getDefaultQueenRules();
case piece_constants_1.PieceType.King:
return this.rulesRepository.getDefaultKingRules(color);
}
}
spawnBeforeTransformPostiion(board) {
const whitePawnSpawnLine = 4;
const blackPawnSpawnLine = 3;
const whiteSpawnLine = 0;
const blackSpawnLine = 7;
const position = {
[color_1.Color.white]: [
{ type: piece_constants_1.PieceType.Rook, coordinate: [0, whiteSpawnLine] },
{ type: piece_constants_1.PieceType.Knight, coordinate: [1, whiteSpawnLine] },
{ type: piece_constants_1.PieceType.Bishop, coordinate: [2, whiteSpawnLine] },
{ type: piece_constants_1.PieceType.King, coordinate: [3, whiteSpawnLine] },
{ type: piece_constants_1.PieceType.Queen, coordinate: [4, whiteSpawnLine] },
{ type: piece_constants_1.PieceType.Bishop, coordinate: [5, whiteSpawnLine] },
{ type: piece_constants_1.PieceType.Knight, coordinate: [6, whiteSpawnLine] },
{ type: piece_constants_1.PieceType.Rook, coordinate: [7, whiteSpawnLine] },
],
[color_1.Color.black]: [
{ type: piece_constants_1.PieceType.Rook, coordinate: [0, blackSpawnLine] },
{ type: piece_constants_1.PieceType.Knight, coordinate: [1, blackSpawnLine] },
{ type: piece_constants_1.PieceType.Bishop, coordinate: [2, blackSpawnLine] },
{ type: piece_constants_1.PieceType.King, coordinate: [3, blackSpawnLine] },
{ type: piece_constants_1.PieceType.Queen, coordinate: [4, blackSpawnLine] },
{ type: piece_constants_1.PieceType.Bishop, coordinate: [5, blackSpawnLine] },
{ type: piece_constants_1.PieceType.Knight, coordinate: [6, blackSpawnLine] },
{ type: piece_constants_1.PieceType.Rook, coordinate: [7, blackSpawnLine] },
],
};
for (let i = 0; i <= 7; i++) {
position[color_1.Color.white].push({
type: piece_constants_1.PieceType.Pawn,
coordinate: [i, whitePawnSpawnLine],
});
position[color_1.Color.black].push({
type: piece_constants_1.PieceType.Pawn,
coordinate: [i, blackPawnSpawnLine],
});
}
this.spawnDefaultRulesCustomPosition(board, position);
return position;
}
buildPieceMeta(type, color, rulesMeta) {
return {
id: (0, crypto_1.randomUUID)(),
type,
color: color,
movementRulesMeta: rulesMeta.movementRules.map((rule) => rule.id),
postMovementRulesMeta: rulesMeta.postMovementRules?.map((rule) => rule.id),
};
}
spawnDefaultRulesCustomPosition(board, position, withPostRulest = true) {
const meta = {
cellsMeta: [],
movementRules: [],
postMovementRules: [],
pieceMeta: [],
};
for (let i = 0; i < board.size; i++) {
meta.cellsMeta.push(new Array(board.size).fill(null));
}
for (const color in position) {
for (const piece of position[color]) {
const { type, coordinate } = piece;
const [x, y] = coordinate;
const rulesMeta = this.getDefaultRulesForPiece(type, color, withPostRulest);
const pieceMeta = this.buildPieceMeta(type, color, rulesMeta);
meta.cellsMeta[y][x] = pieceMeta.id;
meta.movementRules.push(...rulesMeta.movementRules);
meta.postMovementRules.push(...(rulesMeta.postMovementRules || []));
meta.pieceMeta.push(pieceMeta);
}
}
// const additionalMeta: PieceMeta[] = [];
this.rulesRepository.getPawnTransformationPieces().forEach((type) => {
const rulesMetaBlack = this.getDefaultRulesForPiece(type, color_1.Color.black, withPostRulest);
meta.pieceMeta.push(this.buildPieceMeta(type, color_1.Color.black, rulesMetaBlack));
meta.movementRules.push(...rulesMetaBlack.movementRules);
meta.postMovementRules.push(...(rulesMetaBlack.postMovementRules || []));
const rulesMetaWhite = this.getDefaultRulesForPiece(type, color_1.Color.white, withPostRulest);
meta.pieceMeta.push(this.buildPieceMeta(type, color_1.Color.white, rulesMetaWhite));
meta.movementRules.push(...rulesMetaWhite.movementRules);
meta.postMovementRules.push(...(rulesMetaWhite.postMovementRules || []));
});
board.fillBoardByMeta(meta);
}
}
exports.GameInitializer = GameInitializer;
//# sourceMappingURL=game-initializer.js.map