diff --git a/examples/three-monks/design.md b/examples/three-monks/design.md new file mode 100644 index 0000000..1f67706 --- /dev/null +++ b/examples/three-monks/design.md @@ -0,0 +1,74 @@ +# 三个和尚 + +三个和尚是 3-8 人进行的卡牌游戏。 + +玩家在游戏中扮演挑水生活的和尚。但是挑水的人越多,挑到的水却越少。 + +首先喝到 10 口水的玩家赢得游戏胜利。 + +## 游戏流程 + +游戏按轮进行。 + +每轮游戏进行以下阶段: +- 出牌阶段:每名玩家各选择一张手牌扣下,同时翻开。将上一轮打出的牌收回手牌。 +- 行动阶段:依次进行有玩家提议进行的行动阶段。 + - 挑水阶段: + - 参与玩家:持有挑水道具,且没有休息的玩家。 + - 每名参与玩家将 2 个水标记放在挑水道具上。 + - 从供应堆拿取玩家人数减去参与玩家数的水标记,放入桌面中央。 + - 交换阶段: + - 参与玩家:没有提议念经的玩家。 + - 每名参与玩家将自己的道具交换给左侧参与玩家。 + - 道具上的水标记一同交换。 + - 喝水阶段: + - 参与玩家:所有玩家。 + - 每名参与玩家依次从桌面中央获得 1 个水标记。 + - 喝水时,可以从自己面前的道具上获得最多 2 个水标记。 + - 念经阶段: + - 参与玩家:提议念经的玩家。 + - 将木鱼标记交给第一名念经的玩家。 + +游戏开始时,随机挑选一名玩家获得木鱼标记。 + +所有的结算从持有木鱼标记的玩家开始顺时针依次进行。 + +## 规则细化 + +- 行动阶段按固定顺序结算:挑水 → 交换 → 喝水 → 念经。只要任意玩家提议某阶段,该阶段本轮会结算一次。 +- 出牌时,上一轮打出的行动牌本轮不可选择;所有玩家完成本轮选择后,上一轮行动牌回到手牌,本轮行动牌成为下一轮不可选择的牌。 +- 游戏开始时洗混 10 张道具牌,每名玩家随机获得 1 张;未使用的道具牌不进入本局。 +- 喝水阶段中,玩家按木鱼标记开始的顺时针顺序逐个结算。玩家喝水后若达到 10 口水,立即获胜;若多人同阶段可能达到 10,结算顺序靠前者先胜利。 +- 木鱼道具在一轮结束时将木鱼标记交给其拥有者,会覆盖本轮念经阶段得到的木鱼标记。 +- 净瓶的水来自供应堆。 +- 老鼠在念经时总共移动 1 个水标记:从左右相邻玩家任一有水的道具上移动 1 个水到老鼠上。 +- 大碗在其拥有者喝水时,若本次没有从大碗上喝到水,则可从桌面中央将 1 个水标记放到大碗上。 +- 水缸拥有者只有自己提议喝水时才参与喝水阶段;参与时从供应堆额外获得 1 口水。 + +## 游戏配件 + +玩家配件(8 组) +- 5x 行动牌: + - 提议挑水/交换/喝水/念经:若有任何玩家打出,本轮会进行此阶段。 + - 休息:不参与挑水阶段。 + +公共配件: +- 若干水标记物 +- 木鱼标记 +- 10x 道具牌 + - 木鱼:一轮结束时,获得木鱼标记。 + - 水桶:挑水道具。挑水时只需将 1 个自己的水放在桶里。 + - 净瓶:念经时,在净瓶上放一个水标记。 + - 木桶:挑水道具。若有其他玩家参与挑水,无需将水放在桶里。 + - 大碗:喝水时若未从大碗里喝到水,可从桌面中央将 1 个水标记放在大碗上。 + - 大桶:挑水道具。喝水时可从桶里喝任意口水。 + - 老鼠:念经时,可从两侧玩家的道具上将一个水移动到老鼠上。 + - 扁担:挑水道具。被交换时,将扁担上的水放回桌面中央。 + - 水缸:喝水时从供应堆额外获得一口水。必须自己提议喝水才能参与喝水。 + - 水瓢:挑水道具。挑水后,从中央将一个水放在瓢里。 + +## 设计实现 + +- `components.ts`: 游戏数据与状态 +- `commands.ts`: 玩家命令与规则命令实现 +- `gameflow.ts`: 规则流程行为树