@real_one_chess_king/game-logic
Version:
R.O.C.K. chess game logic
279 lines • 11.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RulesRepository = void 0;
const color_1 = require("./color");
const piece_constants_1 = require("./piece/piece.constants");
const movement_rules_const_1 = require("./rules/piece-movement/movement-rules.const");
const crypto_1 = require("crypto");
const movement_rule_1 = require("./rules/piece-movement/movement-rule");
class RulesRepository {
pawnDefaultTransformationTypes = [
piece_constants_1.PieceType.Queen,
piece_constants_1.PieceType.Rook,
piece_constants_1.PieceType.Bishop,
piece_constants_1.PieceType.Knight,
];
getPawnTransformationPieces() {
return this.pawnDefaultTransformationTypes;
}
getDefaultPawnRules(color, withPostRulest = true) {
const verticalDirection = color == color_1.Color.white ? [movement_rule_1.Direction.Down] : [movement_rule_1.Direction.Up];
const diagonalDirection = color == color_1.Color.white
? [movement_rule_1.Direction.DownRight, movement_rule_1.Direction.DownLeft]
: [movement_rule_1.Direction.UpRight, movement_rule_1.Direction.UpLeft];
return {
movementRules: [
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.VerticalMovementRule,
moveToEmpty: true,
moveToKill: false,
collision: true,
distance: 1,
directions: verticalDirection,
speed: 1,
},
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.DiagonalMovementRule,
moveToEmpty: false,
moveToKill: true,
collision: true,
distance: 1,
directions: diagonalDirection,
speed: 1,
},
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.PositionSpecificMovementRule,
moveToEmpty: true,
moveToKill: false,
collision: true,
distance: 2,
speed: 2,
directions: verticalDirection,
activatePositions: {
y: color == color_1.Color.white ? [1] : [6],
},
},
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.TakeOnThePassMovementRule,
moveToEmpty: true,
moveToKill: false,
collision: true,
distance: 1,
speed: 1,
directions: diagonalDirection,
activatePositions: {
y: color == color_1.Color.white ? [4] : [3],
},
},
],
postMovementRules: withPostRulest
? [
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.PostMovementRules.TransformationOnPositionRule,
color,
maxCharges: 1,
triggerOnY: color === color_1.Color.white ? 7 : 0,
possiblePiecesTypes: this.pawnDefaultTransformationTypes,
},
]
: [],
};
}
getDefaultRookRules() {
return {
movementRules: [
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.VerticalMovementRule,
moveToEmpty: true,
moveToKill: true,
collision: true,
distance: 8,
directions: [movement_rule_1.Direction.Up, movement_rule_1.Direction.Down],
speed: 1,
},
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.HorizontalMovementRule,
moveToEmpty: true,
moveToKill: true,
collision: true,
distance: 8,
directions: [movement_rule_1.Direction.Left, movement_rule_1.Direction.Right],
speed: 1,
},
],
};
}
getDefaultBishopRules() {
return {
movementRules: [
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.DiagonalMovementRule,
moveToEmpty: true,
moveToKill: true,
collision: true,
distance: 8,
directions: [
movement_rule_1.Direction.UpLeft,
movement_rule_1.Direction.DownLeft,
movement_rule_1.Direction.UpRight,
movement_rule_1.Direction.DownRight,
],
speed: 1,
},
],
};
}
getDefaultKnightRules() {
return {
movementRules: [
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.KnightMovementRule,
moveToEmpty: true,
moveToKill: true,
collision: false,
distance: 1,
directions: [
movement_rule_1.Direction.UpLeft,
movement_rule_1.Direction.DownLeft,
movement_rule_1.Direction.UpRight,
movement_rule_1.Direction.DownRight,
movement_rule_1.Direction.Up,
movement_rule_1.Direction.Down,
movement_rule_1.Direction.Right,
movement_rule_1.Direction.Left,
],
speed: 1,
},
],
};
}
getDefaultQueenRules() {
return {
movementRules: [
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.DiagonalMovementRule,
moveToEmpty: true,
moveToKill: true,
collision: true,
distance: 8,
directions: [
movement_rule_1.Direction.UpLeft,
movement_rule_1.Direction.DownLeft,
movement_rule_1.Direction.UpRight,
movement_rule_1.Direction.DownRight,
],
speed: 1,
},
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.VerticalMovementRule,
moveToEmpty: true,
moveToKill: true,
collision: true,
distance: 8,
directions: [movement_rule_1.Direction.Up, movement_rule_1.Direction.Down],
speed: 1,
},
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.HorizontalMovementRule,
moveToEmpty: true,
moveToKill: true,
collision: true,
distance: 8,
directions: [movement_rule_1.Direction.Left, movement_rule_1.Direction.Right],
speed: 1,
},
],
};
}
getDefaultKingsideCastling(color) {
const kingPos = color === color_1.Color.white ? [3, 0] : [3, 7];
const rookPos = color === color_1.Color.white ? [0, 0] : [0, 7];
return {
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.CastlingMovementRule,
moveToEmpty: true,
moveToKill: false,
collision: true,
distance: 2,
directions: [movement_rule_1.Direction.Right, movement_rule_1.Direction.Left],
speed: 1,
color: color,
mainPieceCoordinate: kingPos,
foreginPieceCoordinate: rookPos,
};
}
getDefaultQueenSideCastling(color) {
const kingPos = color === color_1.Color.white ? [3, 0] : [3, 7];
const rookPos = color === color_1.Color.white ? [7, 0] : [7, 7];
return {
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.CastlingMovementRule,
moveToEmpty: true,
moveToKill: false,
collision: true,
distance: 2,
directions: [movement_rule_1.Direction.Right, movement_rule_1.Direction.Left],
speed: 1,
color: color,
mainPieceCoordinate: kingPos,
foreginPieceCoordinate: rookPos,
};
}
getDefaultKingRules(color) {
return {
movementRules: [
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.DiagonalMovementRule,
moveToEmpty: true,
moveToKill: true,
collision: true,
distance: 1,
directions: [
movement_rule_1.Direction.UpLeft,
movement_rule_1.Direction.DownLeft,
movement_rule_1.Direction.UpRight,
movement_rule_1.Direction.DownRight,
],
speed: 1,
},
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.VerticalMovementRule,
moveToEmpty: true,
moveToKill: true,
collision: true,
distance: 1,
directions: [movement_rule_1.Direction.Up, movement_rule_1.Direction.Down],
speed: 1,
},
{
id: (0, crypto_1.randomUUID)(),
name: movement_rules_const_1.MovementRules.HorizontalMovementRule,
moveToEmpty: true,
moveToKill: true,
collision: true,
distance: 1,
directions: [movement_rule_1.Direction.Left, movement_rule_1.Direction.Right],
speed: 1,
},
this.getDefaultKingsideCastling(color),
this.getDefaultQueenSideCastling(color),
],
};
}
}
exports.RulesRepository = RulesRepository;
//# sourceMappingURL=rules.repository.js.map