boardgame-phaser/QWEN.md

2.0 KiB
Raw Permalink Blame History

boardgame-phaser

基于Phaser3/boardgame-core的游戏框架

概述

项目使用pnpm monorepo管理包含以下包

  • framework:通用框架
  • boop-gameboop样例
  • sample-gametic tac toe样例

游戏应当使用vite构建基于preact/signals进行状态管理,使用phaser3实现游戏功能。

boardgame-core

项目使用boardgame-core进行游戏定义。 boardgame-core的内容可以在framework/node_modules/boardgame-core找到。 这个文件夹被.gitignore忽略查看时需要绕开这一限制。

编写Phaser App

使用framework/src/ui/PhaserBridge来创建Phaser App。

使用framework/src/scenes/GameHostScene来创建游戏场景。

使用GameHost来控制游戏状态。

export class GameHost<TState extends Record<string, unknown>, TResult=unknown> {
    // 获取游戏状态的只读快照
    get state(): TState{}
    // 获取随机数
    get rng(): ReadonlyRNG{}

    // 运行状态
    readonly status: ReadonlySignal<GameHostStatus>;

    // 运行中途需要玩家输入时使用
    readonly activePromptSchema: ReadonlySignal<CommandSchema | null>;
    readonly activePromptPlayer: ReadonlySignal<string | null>;

    // 玩家响应activePrompt的输入若报错则返回string否则返回null
    // promptDef应当从game module中导出
    tryAnswerPrompt<TArgs extends any[]>(promptDef: Promptdef<TArgs>,...args: TArgs): string | null {}
    
    // 添加中断context.produceAsync会等待所有中断结束之后再继续
    addInterruption(promise: Promise<void>): void {}
    
    // 开始或者重新开始游戏
    start(seed?: number): Promise<TResult>{}
    
    // 销毁
    dispose(): void {}

    // 事件侦听
    on(event: 'start' | 'dispose', listener: () => void): () => void {}
}

使用Spawner来创建动态游戏对象:

  • 卡牌
  • 棋子
  • UI高亮提示对象

使用MutableSignal创建状态信号。

import {MutableSignal} from "boardgame-core"

export const x = MutableSignal(0);
x.produce(x => x + 1);