c语言迷宫小游戏350行(课程设计报告)

目录

摘 要...........................................................................................................................................1
关键词.........................................................................................................................................1
Abstract.....................................................................................................................................1
Key words...................................................................................................................................1
1 绪论.......................................................................................................................................2
1.1 课程介绍..........................................................................................................................2
1.2 课程设计目的和意义......................................................................................................2
2 需求分析...............................................................................................................................3
2.1 功能概要描述..................................................................................................................3
2.2 功能详细描述..................................................................................................................3
3 系统的设计...........................................................................................................................4
3.1 总体设计..........................................................................................................................4
3.2 详细设计..........................................................................................................................4
4 系统功能实现.......................................................................................................................7
4.1 随机迷宫生成功能的实现..............................................................................................7
4.2 用户输入验证与异常处理..............................................................................................8
4.3 关卡初始化与动态难度调整..........................................................................................9
4.4 计数功能的实现..............................................................................................................9
4.5 玩家移动功能的实现......................................................................................................9
5 系统测试.............................................................................................................................11
6 设计感言...............................................................................................................................13
参考文献...................................................................................................................................15

1.摘 要 

走迷宫游戏的设计与实现
摘 要
迷宫游戏是计算机科学中经典的算法与交互设计实践案例。本项目基于 C 语言开发
了一款具备动态迷宫生成、多模式交互的走迷宫游戏。系统通过递归分割算法生成随机
迷宫,支持玩家通过键盘输入(W/A/S/D)控制角色移动,并提供“极限逃脱模式”和
“无尽模式”两种玩法。极限逃脱模式要求玩家在规定步数内躲避敌人追捕并到达终点,
无尽模式通过逐级增加迷宫复杂度提升挑战性。项目综合运用递归、数组、指针等技术,
实现了迷宫生成、实时交互及游戏逻辑控制。测试结果表明,系统功能完整,运行稳定。
 关键词
迷宫生成;递归算法;C 语言;游戏设计;多模式交互
Design and Implementation of Maze Game
Abstract
The maze game is a classic case of algorithm and interactive design in computer science. This project developed a maze game based on C language, which includes dynamic maze
generation and multi-mode interaction. The system generates random mazes through a
recursive division algorithm, supports player movement via keyboard input (W/A/S/D), and
provides two gameplay modes: "Escape Mode" and "Endless Mode". The Escape Mode
requires players to reach the endpoint within a limited number of steps while avoiding enemy
pursuit, while the Endless Mode increases the maze complexity progressively to enhance
challenges. The project comprehensively utilizes recursion, arrays, pointers, and other
technologies to implement maze generation, real-time interaction, and game logic control. Test results show that the system is fully functional and stable.
 Key words
Maze Generation; Recursive Algorithm; C Language; Game Design; Multi-Mode Interaction

2.绪论

1. 绪论
1.1 课程介绍
《高级语言程序设计》是计算类专业的一门基础课程,通过本课程的学习,使学生
系统学习 C 语言程序设计的基本语法、结构、流程、思路和方法,训练学生解决问题
的逻辑思维、分析解决问题和编程实践能力,使学生具有较强的 C 语言编程技能并应
用编程技能有效求解实际复杂工程问题能力,为培养学生有较强的软件开发能力打下基
础。
1.2 课程设计目的和意义
(1)巩固与整合所学知识:课程设计旨在促使学生综合运用所学的 C 语言核心知
识,涵盖数组、指针、函数、结构体等多方面的知识。通过实践项目的设计与实现,学
生不仅能够将零散的知识点整合为系统的知识体系,还能在实践中深化对理论知识的理
解和应用,从而提升理论学习的深度与广度。
(2)提升实践应用能力:实践项目是检验知识掌握程度的试金石。学生需将所学
理论知识应用于解决实际问题,这一过程不仅锻炼了他们的编程实践能力,还使他们全
面体验了从需求分析、系统设计、代码编写到测试维护的软件开发全生命周期。通过亲
身参与,学生能够熟练掌握应用软件的分析方法和工程设计技巧,进而提升分析问题、
解决问题及计算思维的能力,为未来的专业实践奠定坚实基础。
(3)培养创新思维与问题解决能力:在项目开发过程中,学生可能会遇到未预见
的问题和挑战,需要灵活运用所学知识进行创造性解决。这一过程不仅激发了学生的创
新思维,还锻炼了他们的独立思考和问题解决能力。同时,通过不断尝试与解决问题,
有助于培养学生实事求是、严谨认真的科学态度和刻苦钻研不断创新的精神,逐步建立
正确的全局观念。

3.需求分析

2. 需求分析
2.1 功能概要描述
这是一款基于控制台的双模式迷宫冒险游戏。在极限逃脱模式中,玩家需操控角色
"A"在三个精心设计的关卡中躲避追踪者"B",通过 WASD 键在 100 步限制内抵达终点
"@",关卡包含特殊地形和动态敌人机制。无尽模式则采用随机生成的渐进式迷宫,每
关迷宫尺寸随等级扩大,玩家需在无限扩展的迷宫中不断挑战。游戏提供可视化操作界
面,通过方向键控制移动,支持中途退出功能。两种模式分别提供 3 个固定关卡和无限
递增关卡,通过启动菜单选择模式后即可开始冒险,考验玩家的路径规划能力和反应速
度。
2.2 功能详细描述
玩家在游戏开始时可以选择两种模式之一:极限逃脱模式或无尽挑战模式。模式选
择通过控制台输入实现,玩家通过输入数字 1 或 2 来选择相应的模式。两种模式的详细
说明如下:
(1)极限逃脱模式
玩家需要在有限的步数内(例如 100 步)控制角色 A 从起点移动到终点@,同时躲
避追逐的敌人 B。玩家使用 w(上)、s(下)、a(左)、d(右)四个键来控制角色 A
的移动。每移动一次,步数计数器减 1。如果步数为 0 且玩家仍未到达终点,则游戏失
败,显示“失败”提示信息。如果玩家在规定步数内到达终点@,则成功通过当前关卡,
进入下一关。每个关卡的地图是预定义的,玩家需要逐个通过关卡。
(2)无尽挑战模式
玩家需要控制角色 A 从起点移动到终点@,没有步数限制,但迷宫会随着关卡数增
加而变得更大、更复杂。玩家同样使用 w(上)、s(下)、a(左)、d(右)四个键
来控制角色 A 的移动。每通过一关,关卡数增加,迷宫的大小和难度动态调整,生成新
的迷宫地图。玩家可以无限挑战,直到无法通过新的关卡为止。

4.系统的设计

3. 系统的设计
3.1 总体设计
游戏整体分为极限逃脱模式和无尽模式。通过控制台输入进行交互,玩家通过键盘
输入控制角色移动,游戏逻辑通过程序内部的函数实现。游戏分为以下几个模块:
(1)游戏启动与模式选择模块:负责显示游戏开始界面,提示玩家选择游戏模式。
(2)迷宫生成模块:用于生成迷宫地图,包括初始化迷宫为全墙壁状态,以及通
过递归算法动态生成可行走的路径。
(3)游戏界面显示模块:负责将迷宫地图、玩家位置、终点位置等信息显示在控
制台
(4)玩家控制模块:根据玩家输入的指令(键盘按键),控制玩家角色在迷宫中
的移动。
(5)敌人控制模块:在极限逃脱模式中,控制敌人(B)的移动逻辑,使其追逐玩
家。
(6)游戏逻辑判断模块:判断玩家是否到达终点、是否被敌人追上、是否在规定
步数内完成任务等,根据结果决定游戏的胜负。
(7)关卡管理模块:在极限逃脱模式中,负责管理不同关卡的地图数据、玩家和
敌人的初始位置等信息;在无尽模式中,根据玩家通过的关卡数动态调整迷宫的大小和
难度。
3.2 详细设计
(1)游戏启动与模式选择模块
功能:显示游戏欢迎界面,提示玩家选择游戏模式。
设计:使用 printf 函数打印游戏欢迎信息和模式选择提示。使用_getch 函数获取玩
家输入的字符,根据输入的字符判断玩家选择的模式。如果输入的字符不是 1 或 2,则
提示字符错误,并要求玩家重新输入。
(2)迷宫生成模块
功能:生成迷宫地图。
设计:使用二维数组 map 来表示迷宫,数组的大小由迷宫的宽度 W 和高度 H 决定。
初始化迷宫:通过两层嵌套的 for 循环,将迷宫的每个位置初始化为墙壁字符#。
动态生成路径:使用递归算法实现路径的生成。从迷宫的左上角(1,1)开始,随机
选择一个方向(上、下、左、右)打通一个格子,并递归地在该方向上继续生成路径。
在递归过程中,为了避免重复生成路径,会检查目标位置是否已经在迷宫范围内且未被
打通。为了增加路径生成的随机性,在尝试向四个方向扩展时,会先将方向顺序打乱。
(3)游戏界面显示模块
功能:在控制台上显示迷宫地图、玩家位置、终点位置等信息。
设计:使用 system("cls")函数清空控制台屏幕,以便重新绘制游戏界面。
通过两层嵌套的 for 循环遍历迷宫数组,根据当前位置的字符决定显示的内容:
如果当前位置是玩家的位置,则显示玩家字符 A。如果当前位置是终点的位置,则显示
终点字符@。否则,显示迷宫数组中对应的字符(墙壁#或空格 )。在显示迷宫之前,
会先打印当前关卡的提示信息。
(4)玩家控制模块
功能:根据玩家输入的指令控制玩家角色在迷宫中的移动。
设计:使用_getch 函数获取玩家输入的键盘按键。根据按键的值,判断玩家想要移
动的方向(上 w、下 s、左 a、右 d)。检查目标位置是否可以移动(即不是墙壁),如
果可以,则更新玩家的位置。如果玩家输入 q,则退出游戏。
(5)敌人控制模块
功能:在极限逃脱模式中,控制敌人(B)的移动逻辑,使其追逐玩家。
设计:敌人(B)的移动逻辑基于玩家的位置。首先计算玩家与敌人之间的水平和
垂直距离。优先考虑水平移动:如果敌人与玩家在水平方向上有距离且目标位置不是墙
壁,则敌人水平移动一格。如果水平方向无法移动,则考虑垂直移动。更新敌人的位置,
并将原来的位置设置为空格。
(6)游戏逻辑判断模块
功能:判断游戏的各种状态,如玩家是否到达终点、是否被敌人追上、是否在规定
步数内完成任务等。
设计:在玩家移动后,检查玩家的位置是否与终点位置相同,如果相同,则玩家通
过当前关卡。在敌人移动后,检查敌人是否与玩家的位置重合,如果重合,则玩家被敌
人追上,游戏失败。在极限逃脱模式中,设置一个步数计数器,每移动一次玩家或敌人,
步数减一。如果步数减到零且玩家仍未到达终点,则游戏失败。
(7)关卡管理模块
功能:管理游戏的关卡信息,包括迷宫地图、玩家和敌人的初始位置等。
设计:1)极限逃脱模式:使用预定义的二维数组 map1、map2、map3 分别存储不同
关卡的地图数据。在每个关卡开始时,将对应的地图数据复制到迷宫数组 map 中。设置
玩家和敌人的初始位置,以及终点的位置。在玩家通过当前关卡后,提示玩家是否进入
下一关,如果玩家选择进入下一关,则加载下一关的地图和初始位置信息。2)无尽模式:
根据玩家通过的关卡数动态调整迷宫的大小和难度。每通过一关,关卡数加一,迷宫的
宽度和高度根据关卡数增加。初始化新的迷宫,并生成新的路径。更新玩家和终点的位
置。

5.系统功能实现

4. 系统功能实现
4.1 随机迷宫生成功能的实现
迷宫初始尺寸为 21 列 × 11 行(第 1 关),“#”代表墙壁,空格代表路,“A”
代表起点和可控制物,“@”代表终点。每通关一关,宽度增加 2 列,高度增加 1 行(如
第 2 关为 23×12,第 3 关为 25×13)。使用深度优先搜索算法生成迷宫,将迷宫区域
划分为四个子区域。随机选择三个子区域打通连接通道。递归处理每个子区域,直至最
小单元。确保迷宫连通性,避免不可达区域。同时,rand 函数是用于生成伪随机数的函
数,确保每次生成的迷宫不一样。迷宫的起点固定为左上角 (1,1),终点固定为右下
角 (W-2, H-2)。代码实现如下:
// 初始化迷宫,全部设置为墙壁
void initialize_maze() {
for (int y = 0; y < H; y++) {
for (int x = 0; x < W; x++) {
map[y][x] = '#'; // 内部初始化为墙壁
}
}
}
// 检查坐标是否在迷宫范围内(不包括边界)
int is_in_bounds(int x, int y) {
return x > 0 && x < W - 1 && y > 0 && y < H - 1;
}
// 递归生成迷宫
void generate_maze(int x, int y) {
map[y][x] = ' '; // 打通当前格子
// 四个方向
int directions[4][2] = { {1, 0}, {-1, 0}, {0, 1}, {0, -1} };
// 打乱方向顺序
for (int i = 0; i < 4; i++) {
int r = rand() % 4;
int temp_x = directions[i][0];
int temp_y = directions[i][1];
directions[i][0] = directions[r][0];
directions[i][1] = directions[r][1];
directions[r][0] = temp_x;
directions[r][1] = temp_y;
}
// 尝试向四个方向扩展
for (int i = 0; i < 4; i++) {
int dx = directions[i][0];
int dy = directions[i][1];
int nx = x + dx * 2; // 前进两个格子
int ny = y + dy * 2;
(is_in_bounds(nx, ny) && map[ny][nx] == '#') {
map[y + dy][x + dx] = ' '; // 打通中间的格子
generate_maze(nx, ny); // 递归生成
}
}
}
// 打印迷宫
void print_maze() {
system("cls");
for (int y = 0; y < H; y++) {
for (int x = 0; x < W; x++) {
(x == player_x && y == player_y) {
printf("A"); // 玩家位置
}
else if (x == exit_x && y == exit_y) {
printf("@"); // 终点位置
}
else {
printf("%c", map[y][x]);
}
}
printf("\n");
}
}
// 初始化关卡
void initialize_level(int level) {
W = 20 + level * 2 + 1; // 宽度随关卡增加
H = 10 + level; // 高度随关卡增加
initialize_maze();
generate_maze(1, 1);
// 设置玩家起点
player_x = 1;
player_y = 1;
// 设置终点
exit_x = W - 2;
exit_y = H - 2;
map[exit_y][exit_x] = '@';}}
4.2 用户输入验证与异常处理
在模式选择中,防止非法输入导致程序崩溃。如果输入 1 或 2 以外的数字即显示“输
入错误,请重新选择(1/2):”。代码实现如下:
do {
char st = _getch();
if (st == '1' || st == '2') break;
else printf("输入错误,请重新选择(1/2):");
} while (1);
4.3 关卡初始化与动态难度调整
无尽模式中,关卡尺寸随等级增大,难度逐渐增加。地图长度每次加 2,宽度每次
加 1。代码实现如下:
void initialize_level(int level) {
W = 20 + level * 2 + 1;
H = 10 + level;
initialize_maze();
generate_maze(1, 1);
exit_x = W - 2;
exit_y = H - 2;
}
4.4 计数功能的实现
在极限逃脱模式中,限制玩家步数以增加挑战性。玩家有 100 次移动机会,需要在
规定步数内到达终点,否则会显示“游戏失败”。代码实现如下:
int controlA(..., int time = 100) {
while (1) {
printf("剩余步数:%d\n", time--);
if (time == -1) {
printf("游戏失败!\n");
return 0;
}
// ... }
}
4.5 玩家移动功能的实现
在游戏中,玩家通过输入‘w’,‘s’,‘a’,‘d’键控制玩家向上,下,左,
右方向移动。代码实现如下:
char ch = _getch();
{
if (ch == 'w' && z[y - 1][x] != '#') {
z[y][x] = ' ';
z[y - 1][x] = 'A';
y--;
}
if (ch == 's' && z[y + 1][x] != '#') {
z[y][x] = ' ';
z[y + 1][x] = 'A';
y++;
}
if (ch == 'a' && z[y][x - 1] != '#') {
z[y][x] = ' ';
z[y][x - 1] = 'A';
x--;
}
if (ch == 'd' && z[y][x + 1] != '#') {
z[y][x] = ' ';
z[y][x + 1] = 'A';
x++;

6.系统测试

5. 系统测试
通过单元测试与集成测试验证功能完整性:
(1)迷宫连通性测试:随机生成迷宫,均保证起点到终点达。
图 5.1 迷宫生成
(2)移动边界测试:角色无法穿越墙壁,移动逻辑正确。
(3)模式切换测试:两种模式运行稳定,无内存泄漏
图 5.2 模式选择
图 5.3 极限逃脱模式规则介绍
图 5.4 极限逃脱模式第一关
图 5.5 无尽模式规则介绍
图 5.6 无尽模式第一关

5.1 迷宫生成


5.2 模式选择


5.3 极限逃脱模式规则介绍


5.4 极限逃脱模式第一关


5.5 无尽挑战模式规则介绍


5.6 无尽挑战模式第一关


7.设计感言

作为计算机科学与技术专业的学生,本次课程设计以“走迷宫游戏的设计与实现”为
主题,旨在将《高级语言程序设计》课程中学习的 C 语言知识应用于实际项目开发。迷
宫游戏不仅是算法设计的经典案例,更融合了用户交互、动态逻辑控制等多方面技术,
能够全面检验和提升编程能力。通过此项目,我希望探索如何将理论知识转化为实际可
运行的软件系统,并在此过程中深化对递归、指针、模块化设计等核心概念的理解。
本次的课程提高了我编辑代码的能力和分析问题的能力,让我充分利用专业课程所
学的知识来解决问题。也解决了我平时拖沓这种不好的学习习惯,增强了学习兴趣。学
习的过程有乐趣也有困难,通过查阅课本,参考了网上的设计流程还有老师的讲解逐渐
完成了本次任务。
项目初期,最大的挑战在于迷宫生成算法的设计。传统递归分割算法虽然逻辑清晰,
但如何确保迷宫的连通性且避免死路成为关键问题。为此,我查阅了多篇关于迷宫生成
算法的文献,最终选择通过随机方向扩展和递归回溯的方法,逐步打通路径。调试过程
中,多次出现迷宫生成失败或路径封闭的情况,通过逐行分析代码逻辑并添加边界检测
函数,逐步优化了算法的稳定性。
另一难点是敌人(B)的追踪逻辑实现。最初的版本中,敌人移动过于机械,容易
被玩家轻易躲避。受限于 C 语言的控制流特性,我采用“优先水平移动,其次垂直移动” 
的策略,通过坐标差动态调整敌人移动方向,最终实现了更具智能性的追踪效果。这一
过程让我深刻体会到,算法设计不仅需要理论支持,还需结合实际场景进行灵活调整。
此次课程设计给我印象最深的就是通过对这个课题的训练,使我基本掌握了 c 语言
编程的基础知识,主体模块与功能模块的结合技巧、方法,让我发现了自己的不足之处
而且学会了如何查找资料,提高了我的自学能力,也锻炼了我分析问题、解决问题的能
力!边学边用这样才会提高效率,也提高了自己对专业的兴趣!

 8.参考文献

[1]谭浩强. C 程序设计(第 4 版)[M]. 北京:清华大学出版社, 2010. 
[2]Brian W. Kernighan, Dennis M. Ritchie. C 程序设计语言(第 2 版)[M]. 北京:机械工业出版社, 2006. 
[3]严蔚敏, 吴伟民. 数据结构(C 语言版)[M]. 北京:清华大学出版社, 2007. 
[4]Eric S. Roberts. 编程抽象:C 语言描述[M]. 北京:机械工业出版社, 2019. 
[5]陈锐. 游戏编程算法与技巧[M]. 北京:人民邮电出版社, 2021.

ps:需要源代码的可以去看《c语言迷宫小游戏350行(源码)》<_<

创作不易,给个赞吧🥰🥰🥰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值