@@ -2,7 +2,9 @@ import { type GameType } from "./Types";
22
33// White = Positive, Black = Negative
44export 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
3335export 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