refactor: prompt def udpate
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import {
|
||||
createGameCommandRegistry, Part, createRegion,
|
||||
IGameContext, createRegionAxis, GameModule
|
||||
IGameContext, createRegionAxis, GameModule,
|
||||
createPromptDef
|
||||
} from 'boardgame-core';
|
||||
|
||||
const BOARD_SIZE = 3;
|
||||
@@ -21,6 +22,9 @@ export type WinnerType = PlayerType | 'draw' | null;
|
||||
export type TicTacToePart = Part<{ player: PlayerType }>;
|
||||
export type TicTacToeState = ReturnType<typeof createInitialState>;
|
||||
export type TicTacToeGame = IGameContext<TicTacToeState>;
|
||||
export const prompts = {
|
||||
play: createPromptDef<[PlayerType, number, number]>('play <player> <row:number> <col:number>'),
|
||||
}
|
||||
|
||||
export function createInitialState() {
|
||||
return {
|
||||
@@ -57,8 +61,8 @@ export async function start(game: TicTacToeGame) {
|
||||
|
||||
async function handleTurn(game: TicTacToeGame, turnPlayer: PlayerType, turnNumber: number) {
|
||||
const {player, row, col} = await game.prompt(
|
||||
'play <player> <row:number> <col:number>',
|
||||
(player: PlayerType, row: number, col: number) => {
|
||||
prompts.play,
|
||||
(player, row, col) => {
|
||||
if (player !== turnPlayer) {
|
||||
throw `Invalid player: ${player}. Expected ${turnPlayer}.`;
|
||||
} else if (!isValidMove(row, col)) {
|
||||
@@ -130,10 +134,4 @@ export const gameModule: GameModule<TicTacToeState> = {
|
||||
registry,
|
||||
createInitialState,
|
||||
start
|
||||
};
|
||||
|
||||
export const prompts = {
|
||||
play: (player: PlayerType, row: number, col: number) => {
|
||||
return `play ${player} ${row} ${col}`;
|
||||
},
|
||||
};
|
||||
@@ -61,8 +61,7 @@ export class GameScene extends GameHostScene<TicTacToeState> {
|
||||
if (this.state.winner) return;
|
||||
if (this.isCellOccupied(row, col)) return;
|
||||
|
||||
const cmd = prompts.play(this.state.currentPlayer, row, col);
|
||||
const error = this.gameHost.onInput(cmd);
|
||||
const error = this.gameHost.tryAnswerPrompt(prompts.play, this.state.currentPlayer, row, col);
|
||||
if (error) {
|
||||
console.warn('Invalid move:', error);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user