制作可撤销的推箱子游戏 是一门面向已有语言基础的学习者的 C++ 项目课程。你将制作可玩的终端游戏,让玩家把箱子推到目标位置,拒绝不允许的移动,并能完整撤销上一次操作。
课程包含 2 个引导实验和 1 个独立挑战。你先实现行走、推动单个箱子和真实目标完成判断,再保存完整状态值并通过撤销恢复它们,最后把相同规则应用到不同的双箱仓库。每个实验都独立提供文件,不依赖上一环境中的文件或运行中的游戏。
你将学到什么
完成本课程后,你将能够:
- 将固定的墙壁、目标与会变化的玩家、箱子位置分开表示;
- 在修改状态前检查行走和推动条件,让被拒绝的操作不改变任何状态;
- 根据每个箱子是否占据目标判断完成状态,并在移动或撤销后重新计算;
- 仅为合法移动将完整状态值复制到
vector历史中,再安全恢复玩家和全部箱子; - 编译并游玩可复用的 C++ 游戏引擎,支持不同合法路线,同时保留原始关卡。
本课程适合谁
本课程适合希望用对象、值拷贝和标准容器制作规则明确的交互程序的 C++ 学习者。
前置要求: 掌握基本终端导航,熟悉 C++ 类、函数、字符串和 vector。引导实验会讲解本项目使用的固定地形模型、移动条件、完整状态快照和历史操作。
学习环境: LabEx 提供浏览器中的预配置 Linux 环境,包含 C++17 编译器、源码框架、小型关卡、可运行的样例和 Terminal。游戏控件、消息和命令输出保留英文。
常见问题
我需要编写整个游戏应用吗?
你将在 engine.cpp 中实现移动、完成判断和撤销函数。关卡加载、文字渲染和命令读取均已准备好。你将把自己的引擎编译成可玩的程序,无需本地安装或图形引擎。
我必须找到最短解吗?
不需要。不同合法路线都可接受。项目关注正确的状态变化和完整撤销,不要求自动求解或最少步数。
我可以撤销让游戏完成的推动吗?
可以。关卡完成后仍可继续操作,撤销会恢复玩家和全部箱子,包括获胜推动之前的状态。历史只属于当前内存中的游戏;重新启动程序会开始新游戏,不会载入已保存的会话。

