PacMaze

thumbnail

介绍

PacMaze 是 WaterCoFire 为 DIICSU DI32002 - Games Programming(游戏编程)课程作业独立开发的一款游戏。非常幸运,它帮助了 WaterCoFire 取得了 DIICSU 专业课程中的首个 A1 的课程总成绩。

在这款游戏中,您需要操控 Pacboy 在错综复杂的迷宫中吃掉所有豆子,同时躲避那些饥肠辘辘的 Ghostron 们 —— 它们正寻找您,作为它们晚餐派对上的主菜!

受《吃豆人》游戏(南梦宫,1980 年)启发,PacMaze 在保留了许多经典元素的同时,引入了大量原创元素:

  • 3D 游戏设计
  • 第三人称视角与第一人称视角之间切换
  • 用于自定义您的理想地图的地图编辑器,从地图难度设置到地图墙体布局设置
  • 大量原创道具,赋予您各式各样的战略能力
  • 随机事件,为游戏增添趣味与不可预测性(可自由选择是否启用!)

地图概览

该图介绍了一个典型的 PacMaze 游戏地图 (11×11) 中出现的全部元素。

如果您是 DIICSU 计算机专业的学生

此图并不是一个 DI32002 - Games Programming(游戏编程)课程中 Assignment 1 的“游戏地图草图”部分的正确提交示例,因为它没有阐明所有该部分要求的信息。此图仅是本人从提交的原图中截取的一部分。

map-overview

游戏效果图(部分示例)

主页

home-page

选择地图页面

map-select-page

进行游戏(以第三人称视角)

gameplay

地图编辑器

map-editor

算法与技术

PacMaze 内置了一些非常酷的算法和技术,这包括:

用于 Ghostron 的有限状态机(FSM)

有限状态机被应用于了 Ghostron 们的行为,因为它提供了一种干净且结构清晰的方式来处理 Ghostron 们的状态(追逐、正常游荡、惊慌时的游荡、停滞),每个状态都有其独特的逻辑和转换规则。

不同类型的 Ghostron 的独特性格与行为特征

为了提升游戏的可玩性,PacMaze 从经典的《吃豆人》游戏(南梦宫,1980 年)中汲取灵感:不同类型的 Ghostron 被设计成具有不同的个性,即不同的行为模式。

例如,蓝色 Ghostron 是“内向”的,黄色 Ghostron 是“好奇”的,绿色 Ghostron 是“敏感”的。

改进版的分配算法与编织算法

由于大多数经典迷宫生成算法无法避免生成死胡同,PacMaze 借鉴了 Ioannidis(2016 年)提出的分配算法和编织算法,这两种算法能够生成编织迷宫。编织迷宫指的是没有死胡同的迷宫(Hybesis - H.urna,2019 年)。

分配算法生成一个分布矩阵,确定每个格子的邻居数量,而编织算法则根据分布矩阵生成迷宫。

为了使生成的地图更具可玩性并适合 PacMaze,PacMaze 基于原始方案进行了多项改进。通过分析,WaterCoFire 总结了出 PacMaze 地图的四种特征,并相应优化了分配算法,使其生成的邻居分布矩阵符合总结出的规律。WaterCoFire 也对编织算法也进行了优化,使其不再单纯依赖随机逻辑,而是根据格子的所在位置及其被分配的邻居数量的不同进行差异化处理。

这一改进确保了最终生成的地图能够具备所设计的特征,并比随机生成提供更好的可玩性。

如您想了解关于这一算法方案改进的更多细节,请点击此处(仅英文,注意网站将切换至转至英文版)。

用于地图合法性检查的修改版广度优先搜索(BFS)

为了确保游戏体验,一个合法的 PacMaze 地图必须满足以下规则:

  • 可到达性。 地图上的每个格子都必须可到达。
  • 易到达性。 玩家从地图中心到每个格子的路径长度不应过长,且(从中心点出发)前往所有格子的最短路径长度均应小于或等于 22 个格子。
  • 无死胡同。 即不应存在仅有一侧无墙的格子。这并不意味着所有格子都必须拥有超过两面墙,因为存在地图的边界。

广度优先搜索在此处被用于合法性检查,因为它非常适合最短路径发现和可达性分析。由于广度优先搜索无法直接识别死胡同,因此对其进行了一项小修改:将检查每个遍历的格子的邻居数量。如果邻居数量为 1,则此格子被视为死胡同。

鼠标位置检测与高亮互动

为了在地图编辑器中提供更为直观的操作体验,在某些编辑模式下,需要检测当前鼠标位置以实现高亮效果。这为玩家提供了实时反馈。在此过程中,Unity 的 Raycast 系统被用于检测鼠标射线与游戏对象的碰撞。

地图数据的安全保存/读取

所有地图设置均可存储为 JSON 文件以确保地图数据的持久性。这使玩家能够保存自定义地图和设置,并确保他们随时可以重新加载并编辑/游玩其自定义创作的地图。

为防止恶意玩家通过篡改地图数据进行作弊,还采用了带有随机初始化向量(IV)的 AES 加密算法对地图数据进行加密/解密。

访问

PacMaze 项目(含源代码)已在 GitHub 上开源。

仅供参考。请您自觉杜绝一切侵犯他人知识产权以及学术不端的行为。

🔗 PacMaze on GitHub

本项目将被(偶尔)维护。最新的版本为 v1.1.0。

引用

本引用列表采用 Harvard 风格。

Hybesis - H.urna. (2019) Maze generations: Algorithms and Visualizations. Analytics Vidhya. Available at: https://medium.com/analytics-vidhya/maze-generations-algorithms-and-visualizations-9f5e88a3ae37 (Accessed: 4 May 2025).

Ioannidis P.L. (2016) Procedural Maze Generation. Bachelor Thesis. National and Kapodistrian University of Athens. Available at: https://pergamos.lib.uoa.gr/uoa/dl/object/1324569/file.pdf (Accessed: 6 May 2025).

Namco. (1980) Pac-Man [Video game]. Bandai Namco Entertainment, Arcade.

PacMaze 使用的所有第三方图像/音频资源(及它们的许可证)均可在本项目 GitHub 仓库的 README 文档中被找到。