refactor: prompt def udpate

This commit is contained in:
2026-04-06 16:20:52 +08:00
parent bf20e53c6b
commit 20f722818d
7 changed files with 34 additions and 36 deletions
+7 -9
View File
@@ -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}`;
},
};
+1 -2
View File
@@ -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);
}