Skip to content

Commit 267b25a

Browse files
Dean SoferDean Sofer
authored andcommitted
WIP
1 parent 8395752 commit 267b25a

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

src/Utils.ts

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ import { type GameType } from "./Types";
22

33
// White = Positive, Black = Negative
44
export const DEFAULT_BOARD = [
5+
// index: 6 11
56
5, 0, 0, 0, -3, 0, -5, 0, 0, 0, 0, 2,
7+
// index: 18 23
68
-5, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, -2,
79
];
810

@@ -31,12 +33,30 @@ export const newGame = (oldGame?: GameType) => ({
3133
} as GameType);
3234

3335
export function nextMove(state: GameType, usedDice: number[] = [], from?: number) {
34-
let availableMoves: number[] = []
36+
const availableMoves = new Set<number>();
37+
const player = state.color;
38+
const unprotected = (pieces: number) => player === 'white' ? pieces >= -1 : pieces <= 1;
39+
const availableDice = [...state.dice]
40+
// Check for Doubles
41+
if (availableDice[0] === availableDice[1]) availableDice.push(availableDice[0], availableDice[0])
42+
// Filter used 
43+
usedDice.forEach(die => {
44+
const index = availableDice.indexOf(die)
45+
if (~index) availableDice.splice(index,1)
46+
})
3547

36-
if (from !== undefined) {
37-
// calculate available destinations
38-
} else {
39-
// calculate available starting points
48+
if (from === undefined) { // calculate starting points
49+
if (state.prison[player]) { // pieces are on bar
50+
availableDice.forEach(die => {
51+
const point = player == 'white' ? 12 - die : 24 - die
52+
if (unprotected(state.board[point]))
53+
availableMoves.add(point)
54+
})
55+
} else { // normal
56+
57+
}
58+
} else { // calculate destinations
59+
4060
}
4161

4262
return availableMoves

0 commit comments

Comments
 (0)