返回
玩法拆解 · 代码 · Demo
躲避解谜

吃豆人 Pacman City:把「躲幽灵」玩成「限时路线规划」

120 秒、3 条命、323 颗豆:在方块城市迷宫里边吃边躲,能量豆的 8 秒攻守反转是全局唯一的节奏开关。

0

玩法拆解

规则骨架
  • 120 秒倒计时 + 3 条命,时间归零或命数耗尽即 game.over
  • 普通豆 +10 分,能量道具 +50 分并进入 8 秒能量模式,能量模式下反吃幽灵 +200 分
  • 普通模式撞到幽灵触发 handlePlayerDeath 损失生命;吃光全部豆点进入下一关
行为循环
  • 观察迷宫与幽灵位置 → 规划吃豆路线 → 方向键/摇杆移动 → 吃豆得分
  • 吃能量豆 → 8 秒攻守反转 → 主动追幽灵冲高分 → 模式结束回归躲避
  • 时间到/命尽 → result 结算 → 再来一局(全量重置)或返回菜单
实现要点
  • 玩法数据与规则挂在 v2-kernel 状态机(boot/menu/gameplay/result),事件驱动迁移
  • core/pacman-city 承载迷宫、豆点、幽灵 AI 与碰撞判定,规则层只做数据读写
  • 场景私有渲染器 __OV.Games.PacmanCity.Game 负责 PIXI 绘制与摇杆/键盘输入

关键代码

能量豆攻守反转与反吃结算(core/pacman-city)
js· 26 行
玩法行为:本文属于「躲避」母型在持续压力与空间限制下保持生存;核心是判定、窗口与节奏。
查看母型详解

Demo

本作专用试玩:方向键或左下角虚拟摇杆控制吃豆人,120 秒内吃豆得分、躲幽灵,吃金色能量豆可反吃幽灵冲分。

吃豆人 Pacman City:把「躲幽灵」玩成「限时路线规划」 Demo
游戏加载中…

文章

吃豆人 Pacman City:把「躲幽灵」玩成「限时路线规划」

一句话本质

Pacman City 表面上是一款经典吃豆人复刻,实际上它把「躲避」母型改造成了一个限时分数竞速问题:120 秒内,玩家要在方块城市迷宫里持续做「吃豆推进度」与「躲幽灵保命」的权衡,而能量豆提供的 8 秒攻守反转是全局唯一的节奏开关——什么时候吃它、吃完后往哪追,决定了分数上限。

行为循环

  1. 观察:开局 323 颗豆铺满迷宫,4 只幽灵(红/青/粉/橙)在街道间巡逻,HUD 实时显示分数、生命与倒计时。
  2. 规划路线:选择一条既能连吃豆点、又不撞进幽灵巡逻路径的线路,这是本作「解谜」味的来源。
  3. 移动执行:方向键或左下角虚拟摇杆控制吃豆人转向,经过豆点自动吃掉,每颗 +10 分。
  4. 能量反转:吃掉角落的金色能量豆,+50 分并进入 8 秒能量模式,此时可以反吃幽灵,每只 +200 分。
  5. 回归躲避:能量模式结束,重新躲避;普通模式撞幽灵损失 1 条命(共 3 条)。
  6. 结算与重开:120 秒倒计时归零或命数耗尽进入 result 页,可「再来一局」全量重置,或返回菜单。

原语标注

  • SetDirection(dx, dy) – 摇杆/方向键输入,转为吃豆人移动方向
  • EatDot(+10) – 经过豆点自动吃掉并加分,同时检查是否吃光过关
  • EnterPowerMode(8s) – 吃能量道具,攻守反转并 +50 分
  • EatGhost(+200) – 能量模式下撞幽灵,获得全场最高单分
  • CollideGhost() – 普通模式撞幽灵,损失 1 条命并重置位置
  • Tick(-1s) – 每秒倒计时,归零即结束
  • Reset(score/lives/time) – 再来一局,全部数据回初始值

参数速查表

| 参数 | 说明 | 默认值 | 单位 | |------|------|--------|------| | timeRemaining | 单局限时 | 120 | 秒 | | lives | 初始生命 | 3 | 条 | | dotScore | 每颗豆得分 | 10 | 分 | | powerupScore | 能量道具得分 | 50 | 分 | | ghostScore | 反吃幽灵得分 | 200 | 分 | | powerTime | 能量模式持续 | 8 | 秒 | | pacmanSpeed | 吃豆人移动速度 | 180 | 像素/秒 | | pacmanSize | 吃豆人半径 | 16 | 像素 | | dotsTotal | 全图豆点数 | 323 | 颗 | | enemyCount | 同场幽灵数 | 4 | 只 |

设计取舍

  1. 限时 120 秒,而不是「吃完为止」:纯吃豆模式的压力只来自幽灵,加入硬倒计时后,「贪分」与「保命」时刻互斥,躲避母型被压成了分数竞速;短局时长也让 result 页的「再来一局」成本极低。
  2. 8 秒能量窗口:攻守反转时间给得很短。窗口内玩家会主动冲向刚才还在躲的幽灵,情绪从紧张切换到释放再切回紧张——这是本作最强的心流波动来源,拖长了反而会稀释。
  3. 分值梯度 10 / 50 / 200:收益与风险严格对齐。豆是稳定基础收益,能量豆是节奏开关,反吃幽灵是高风险高回报,引导玩家为 200 分去规划「绕到能量豆再回头截幽灵」的路线。
  4. 摇杆 + 键盘双输入:虚拟摇杆服务触屏、方向键服务桌面,一套玩法逻辑同时覆盖两类设备,输入层与玩法层完全解耦。
  5. 4 只幽灵同场:数量刚好能在迷宫主干道形成移动封锁,又不至于堵死所有通路——配合 3 条命的容错,新手能活、高手有压迫感。

实现要点

  • 状态机薄规则厚模块:boot → menu → gameplay → result 四态由事件驱动迁移(boot.complete / game.start / game.over / game.restart / game.menu),规则层只做数据读写与事件转发,不碰渲染。
  • 核心模块 `core/pacman-city`:承载迷宫数据、豆点分布、幽灵 AI 与碰撞判定,对外暴露 reset / setDirection / checkLevelComplete / handlePlayerDeath 四个动作;吃光全部豆点即推进关卡。
  • 场景私有渲染器:__OV.Games.PacmanCity.Game 在 PIXI 中绘制城市迷宫、吃豆人、幽灵、豆点与 HUD,并接管摇杆与键盘输入,向内核 emit pacman.move。
  • 计时下沉到规则链:game.tick 每秒触发,规则把 remaining 写入 timeRemaining,≤0 时置 isGameActive=false 并 emit game.over,结算页据此展示。
  • UI 层零定制:菜单、结算页的按钮事件绑定由 common-ui 通用模块完成,boot 场景自动推进到 menu。

本文末尾嵌入了本作的可玩 demo:方向键或左下角摇杆控制,试试看能不能在 120 秒内靠两次能量反转把分数翻上去。