吃豆人 Pacman City:把「躲幽灵」玩成「限时路线规划」
120 秒、3 条命、323 颗豆:在方块城市迷宫里边吃边躲,能量豆的 8 秒攻守反转是全局唯一的节奏开关。
玩法拆解
- 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 绘制与摇杆/键盘输入
关键代码
Demo
本作专用试玩:方向键或左下角虚拟摇杆控制吃豆人,120 秒内吃豆得分、躲幽灵,吃金色能量豆可反吃幽灵冲分。
文章
吃豆人 Pacman City:把「躲幽灵」玩成「限时路线规划」
一句话本质
Pacman City 表面上是一款经典吃豆人复刻,实际上它把「躲避」母型改造成了一个限时分数竞速问题:120 秒内,玩家要在方块城市迷宫里持续做「吃豆推进度」与「躲幽灵保命」的权衡,而能量豆提供的 8 秒攻守反转是全局唯一的节奏开关——什么时候吃它、吃完后往哪追,决定了分数上限。
行为循环
- 观察:开局 323 颗豆铺满迷宫,4 只幽灵(红/青/粉/橙)在街道间巡逻,HUD 实时显示分数、生命与倒计时。
- 规划路线:选择一条既能连吃豆点、又不撞进幽灵巡逻路径的线路,这是本作「解谜」味的来源。
- 移动执行:方向键或左下角虚拟摇杆控制吃豆人转向,经过豆点自动吃掉,每颗 +10 分。
- 能量反转:吃掉角落的金色能量豆,+50 分并进入 8 秒能量模式,此时可以反吃幽灵,每只 +200 分。
- 回归躲避:能量模式结束,重新躲避;普通模式撞幽灵损失 1 条命(共 3 条)。
- 结算与重开: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 | 只 |
设计取舍
- 限时 120 秒,而不是「吃完为止」:纯吃豆模式的压力只来自幽灵,加入硬倒计时后,「贪分」与「保命」时刻互斥,躲避母型被压成了分数竞速;短局时长也让 result 页的「再来一局」成本极低。
- 8 秒能量窗口:攻守反转时间给得很短。窗口内玩家会主动冲向刚才还在躲的幽灵,情绪从紧张切换到释放再切回紧张——这是本作最强的心流波动来源,拖长了反而会稀释。
- 分值梯度 10 / 50 / 200:收益与风险严格对齐。豆是稳定基础收益,能量豆是节奏开关,反吃幽灵是高风险高回报,引导玩家为 200 分去规划「绕到能量豆再回头截幽灵」的路线。
- 摇杆 + 键盘双输入:虚拟摇杆服务触屏、方向键服务桌面,一套玩法逻辑同时覆盖两类设备,输入层与玩法层完全解耦。
- 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,并接管摇杆与键盘输入,向内核 emitpacman.move。 - 计时下沉到规则链:
game.tick每秒触发,规则把remaining写入timeRemaining,≤0 时置isGameActive=false并 emitgame.over,结算页据此展示。 - UI 层零定制:菜单、结算页的按钮事件绑定由
common-ui通用模块完成,boot 场景自动推进到 menu。
本文末尾嵌入了本作的可玩 demo:方向键或左下角摇杆控制,试试看能不能在 120 秒内靠两次能量反转把分数翻上去。
你可能也喜欢

文章解析肉鸽割草核心机制,拆解敌人密度曲线构建动态战斗节奏,阐述导演系统通过演算控制敌人分布以维持屏幕可读性,分析硬规则限制特效数量确保视觉清晰,揭示敌人数量随时间线性增长与玩家伤害随时间指数级上升的爽感来源,指导开发者平衡数值与体验。
极简自动跑酷案例拆解:分数=距离、一种障碍对应一个按钮的二分映射,以及 0.6 秒躲避窗口如何保证高速下的可读性。

文章深度拆解点击躲避玩法,解析判定宽容度设定与近失反馈机制,平衡失败风险;构建子弹速度曲线,实现难度平滑爬坡,为开发者提供兼顾操作手感与长期留存的核心设计策略。