add Game Rule that Double Stone in Pit
This commit is contained in:
parent
7b02d7efa3
commit
3d9ae0c524
44
src/common/game_rules/GRDoubleStoneInPit.ts
Normal file
44
src/common/game_rules/GRDoubleStoneInPit.ts
Normal file
@ -0,0 +1,44 @@
|
||||
import { GameRule } from '../../core/GameRule';
|
||||
import { GameStep } from '../../core/HistoryItem';
|
||||
import { MancalaGame } from '../../core/MancalaGame';
|
||||
|
||||
export const GAME_STEP_DOUBLE_STONE_IN_PIT = 'GAME_STEP_DOUBLE_STONE_IN_PIT';
|
||||
|
||||
export type DoubleStoneInPitData = { pitIndex: number; bankIndex: number };
|
||||
|
||||
export class GRDoubleStoneInPit implements GameRule {
|
||||
onGameMoveStart(game: MancalaGame, index: number): void {}
|
||||
onGameMove(game: MancalaGame, index: number): void {}
|
||||
onGameMoveEnd(game: MancalaGame, index: number): void {
|
||||
index = game.board.getPitIndexCircularly(index);
|
||||
const pit = game.board.pits[index];
|
||||
const pitType = game.board.getPitTypeByIndex(index);
|
||||
if (pit.stoneCount % 2 === 0) {
|
||||
if (pitType === 'player1Pit' && game.isTurnPlayer2()) {
|
||||
const pitIndex = index;
|
||||
const bankIndex = game.board.player2BankIndex();
|
||||
game.board.player2Bank.stoneCount +=
|
||||
game.board.getPitCircularly(pitIndex).stoneCount;
|
||||
game.board.getPitCircularly(pitIndex).stoneCount = 0;
|
||||
this.addGameStep(game, index, { pitIndex, bankIndex });
|
||||
} else if (pitType === 'player2Pit' && game.isTurnPlayer1()) {
|
||||
const pitIndex = index;
|
||||
const bankIndex = game.board.player1BankIndex();
|
||||
game.board.player1Bank.stoneCount +=
|
||||
game.board.getPitCircularly(pitIndex).stoneCount;
|
||||
game.board.getPitCircularly(pitIndex).stoneCount = 0;
|
||||
this.addGameStep(game, index, { pitIndex, bankIndex });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private addGameStep(
|
||||
game: MancalaGame,
|
||||
index: number,
|
||||
doubleStoneInPitData: DoubleStoneInPitData
|
||||
) {
|
||||
game.addGameStep(
|
||||
new GameStep(index, GAME_STEP_DOUBLE_STONE_IN_PIT, doubleStoneInPitData)
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user