Skip to content

Commit da2f0ea

Browse files
committed
add stages
1 parent d5e2b55 commit da2f0ea

12 files changed

Lines changed: 394 additions & 316 deletions

File tree

src/ai/bot.js

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ export function Simulate({ game, bots, state, depth }) {
2323

2424
let metadata = null;
2525
let iter = 0;
26-
while (
27-
state.ctx.gameover === undefined &&
28-
state.ctx.actionPlayers.length > 0 &&
29-
iter < depth
30-
) {
31-
const playerID = state.ctx.actionPlayers[0];
26+
while (state.ctx.gameover === undefined && iter < depth) {
27+
let playerID = state.ctx.currentPlayer;
28+
if (state.ctx.stage) {
29+
playerID = Object.keys(state.ctx.stage)[0];
30+
}
31+
3232
const bot = bots instanceof Bot ? bots : bots[playerID];
3333
const t = bot.play(state, playerID);
3434

@@ -128,11 +128,16 @@ export class MCTSBot extends Bot {
128128
if (playerID !== undefined) {
129129
actions = this.enumerate(G, ctx, playerID);
130130
objectives = this.objectives(G, ctx, playerID);
131-
} else {
132-
for (let playerID of ctx.actionPlayers) {
131+
} else if (ctx.stage) {
132+
for (let playerID in ctx.stage) {
133133
actions = actions.concat(this.enumerate(G, ctx, playerID));
134134
objectives = objectives.concat(this.objectives(G, ctx, playerID));
135135
}
136+
} else {
137+
actions = actions.concat(this.enumerate(G, ctx, ctx.currentPlayer));
138+
objectives = objectives.concat(
139+
this.objectives(G, ctx, ctx.currentPlayer)
140+
);
136141
}
137142

138143
return {
@@ -212,7 +217,11 @@ export class MCTSBot extends Bot {
212217
i++
213218
) {
214219
const { G, ctx } = state;
215-
const moves = this.enumerate(G, ctx, ctx.actionPlayers[0]);
220+
let playerID = ctx.currentPlayer;
221+
if (ctx.stage) {
222+
playerID = Object.keys(ctx.stage)[0];
223+
}
224+
const moves = this.enumerate(G, ctx, playerID);
216225

217226
// Check if any objectives are met.
218227
const objectives = this.objectives(G, ctx);

src/client/client.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,12 @@ class _ClientImpl {
112112

113113
this.step = async () => {
114114
const state = this.store.getState();
115-
const playerID = state.ctx.actionPlayers[0];
115+
116+
let playerID = state.ctx.currentPlayer;
117+
if (state.ctx.stage) {
118+
playerID = Object.keys(state.ctx.stage)[0];
119+
}
120+
116121
const { action, metadata } = await bot.play(state, playerID);
117122

118123
if (action) {
@@ -315,7 +320,7 @@ class _ClientImpl {
315320

316321
let isActive = true;
317322

318-
const canPlayerMakeMove = this.game.flow.canPlayerMakeMove(
323+
const canPlayerMakeMove = this.game.flow.canPlayerMakeAnyMove(
319324
state.G,
320325
state.ctx,
321326
this.playerID

src/client/client.test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ describe('event dispatchers', () => {
310310
test('default', () => {
311311
const game = {};
312312
const client = Client({ game });
313-
expect(Object.keys(client.events)).toEqual(['endTurn']);
313+
expect(Object.keys(client.events)).toEqual(['endTurn', 'setStage']);
314314
expect(client.getState().ctx.turn).toBe(1);
315315
client.events.endTurn();
316316
expect(client.getState().ctx.turn).toBe(2);
@@ -321,15 +321,14 @@ describe('event dispatchers', () => {
321321
events: {
322322
endPhase: true,
323323
endGame: true,
324-
setActionPlayers: true,
325324
},
326325
};
327326
const client = Client({ game });
328327
expect(Object.keys(client.events)).toEqual([
329328
'endTurn',
330329
'endPhase',
331330
'endGame',
332-
'setActionPlayers',
331+
'setStage',
333332
]);
334333
expect(client.getState().ctx.turn).toBe(1);
335334
client.events.endTurn();
@@ -341,6 +340,7 @@ describe('event dispatchers', () => {
341340
events: {
342341
endPhase: false,
343342
endTurn: false,
343+
setStage: false,
344344
},
345345
};
346346
const client = Client({ game });

0 commit comments

Comments
 (0)