🎮 使用 EasyX 图形库开发 | 光线投射(Raycasting)原理实现 | 随机迷宫生成
大一上 C 语言结课项目之一 —— 灵感来自经典游戏《重返德军总部》。
这是一个使用 光线投射(Raycasting) 技术实现的伪 3D 迷宫探索游戏。
玩家将在随机生成的迷宫中探索、寻找出口,并破坏挡路的白色墙壁。
项目完全基于 C 语言与 EasyX 图形库编写。
💡 每次启动游戏都会生成全新的随机迷宫。
由于能力与时间限制(期末周作品 😭),游戏中仍存在部分小 BUG:
- 墙角可能存在空隙;
- 出生点可能生成白色墙壁;
- 音频文件
mili.wav未包含在仓库中(体积过大,可手动替换)。
| 按键 | 功能说明 |
|---|---|
| W / S | 前进 / 后退(在主菜单中控制光标) |
| A / D | 左右旋转视角 |
| E | 获取当前位置(用于辨路) |
| P | 放弃游戏(当你真的找不到出口时) |
🎯 游戏目标:
你是 Mostima —— the keeper of the lock & keys。
被困于迷宫之中。
打破白墙,找到黑墙出口,逃离这里!
| 文件 | 说明 |
|---|---|
| main.cpp | 项目入口。包含初始化(图形界面、随机种子、地图等),根据选择进入演示或游戏模式,调用 EngineForGame() 运行核心逻辑。 |
| Config.h | 定义全局宏、结构体和变量。包括时间、模式、贴图路径、音频路径、线程变量等。 |
| EngineForGame.cpp | 游戏主逻辑核心:处理输入、更新状态、调用 Generation_Frame_3D() 绘制伪3D场景。 |
| EngineForDev.cpp | 演示模式逻辑,主要处理二维图像渲染。 |
| misc.cpp | 各类辅助函数:音效线程(PlaySoundEffect)、透明图像绘制、信息提示、菜单界面、结算界面、排行榜(rank, datasFromFile, compare 等)。 |
| players.txt / times.txt | 玩家数据与通关时间记录文件。 |
默认背景音乐文件为:
mili.wav
由于体积较大未包含在仓库中。
如需正常播放,请在 config.h 中修改 BGM 路径或替换为你自己的音频文件。
- 🧠 Raycasting 光线投射:通过逐列投射光线计算墙面距离,渲染出伪 3D 效果。
- 🎲 随机迷宫生成算法:每次启动生成独立迷宫。
- 🖼️ EasyX 图形库:用于渲染图形与处理事件。
- 🎧 多线程音效播放:游戏与音效线程分离,保证运行流畅。
- 💾 排行榜系统:记录玩家姓名与完成时间。
作为大一上学生的课程项目,这个游戏在技术与美术上都还很粗糙。
但能用光线投射原理复现出伪3D效果、实现随机迷宫,我依然感到十分满足。
如果你有更好的优化建议,欢迎在 Issue 区或 PR 中留言!
本项目仅用于学习与展示,禁止商用。
若引用代码,请注明来源:
A-raycasting-maze-game by L1rics06