ecs-observable/examples/three-monks/design.md

4.2 KiB
Raw Permalink Blame History

三个和尚

三个和尚是 3-8 人进行的卡牌游戏。

玩家在游戏中扮演挑水生活的和尚。但是挑水的人越多,挑到的水却越少。

首先喝到 10 口水的玩家赢得游戏胜利。

游戏流程

游戏按轮进行。

每轮游戏进行以下阶段:

  • 出牌阶段:每名玩家各选择一张手牌扣下,同时翻开。将上一轮打出的牌收回手牌。
  • 行动阶段:依次进行有玩家提议进行的行动阶段。
    • 念经阶段:
      • 参与玩家:提议念经的玩家。
      • 将木鱼标记交给最后一名念经的玩家。
    • 挑水阶段:
      • 参与玩家:持有挑水道具,且没有休息的玩家。
      • 每名参与玩家将 2 个自己的水标记放在挑水道具上;若水不足,则不放。
      • 从供应堆拿取玩家人数减去参与玩家数的水标记,放入桌面中央。
    • 交换阶段:
      • 参与玩家:没有提议念经的玩家。
      • 每名参与玩家将自己的道具交换给左侧参与玩家。
      • 道具上的水标记一同交换。
    • 喝水阶段:
      • 参与玩家:所有玩家。
      • 每名参与玩家依次从桌面中央获得 1 个水标记。
      • 喝水时,可以从自己面前的道具上获得最多 2 个水标记。

游戏开始时,每名玩家获得 2 个水标记,然后随机挑选一名玩家获得木鱼标记。

所有的结算从持有木鱼标记的玩家开始顺时针依次进行。

规则细化

  • 行动阶段按固定顺序结算:念经 → 挑水 → 交换 → 喝水。只要任意玩家提议某阶段,该阶段本轮会结算一次。
  • 出牌时,上一轮打出的行动牌本轮不可选择;所有玩家完成本轮选择后,上一轮行动牌回到手牌,本轮行动牌成为下一轮不可选择的牌。
  • 游戏开始时洗混 10 张道具牌,每名玩家随机获得 1 张;未使用的道具牌不进入本局。发给玩家的道具牌中,挑水道具始终占一半;玩家人数为奇数时,挑水道具数量向上取整。
  • 喝水阶段中,玩家按木鱼标记开始的顺时针顺序逐个结算。玩家喝水后若达到 10 口水,立即获胜;若多人同阶段可能达到 10结算顺序靠前者先胜利。
  • 木鱼道具在一轮结束时将木鱼标记交给其拥有者,会覆盖本轮念经阶段得到的木鱼标记。
  • 挑水时,水从参与玩家已喝到的水移动到其挑水道具上;若玩家的水不足以支付需要放置的数量,则本次不移动水,因此该玩家和其道具上的水总量不变。
  • 净瓶的水来自供应堆。
  • 老鼠在念经时总共移动 1 个水标记:从左右相邻玩家任一有水的道具上移动 1 个水到老鼠上。
  • 大碗在其拥有者喝水时,若本次没有从大碗上喝到水,则可从桌面中央将 1 个水标记放到大碗上。
  • 水缸拥有者只有自己提议喝水时才参与喝水阶段;参与时从供应堆额外获得 1 口水。

游戏配件

玩家配件8 组)

  • 5x 行动牌:
    • 提议挑水/交换/喝水/念经:若有任何玩家打出,本轮会进行此阶段。
    • 休息:不参与挑水阶段。

公共配件:

  • 若干水标记物
  • 木鱼标记
  • 10x 道具牌
    • 木鱼:一轮结束时,获得木鱼标记。
    • 水桶:挑水道具。挑水时只需将 1 个自己的水放在桶里。
    • 净瓶:念经时,在净瓶上放一个水标记。
    • 木桶:挑水道具。若有其他玩家参与挑水,无需将水放在桶里。
    • 大碗:喝水时若未从大碗里喝到水,可从桌面中央将 1 个水标记放在大碗上。
    • 大桶:挑水道具。喝水时可从桶里喝任意口水。
    • 老鼠:念经时,可从两侧玩家的道具上将一个水移动到老鼠上。
    • 扁担:挑水道具。被交换时,将扁担上的水放回桌面中央。
    • 水缸:喝水时从供应堆额外获得一口水。必须自己提议喝水才能参与喝水。
    • 水瓢:挑水道具。挑水后,从中央将一个水放在瓢里。

设计实现

  • components.ts: 游戏数据与状态
  • gameflow.ts: 规则流程行为树
  • rules.ts: 规则引擎(阶段包装器 + 核心结算函数)
  • logging.ts: 日志输出
  • simulate.ts: 对局模拟与统计
  • random-playthrough.ts: 单局详细回放