一、项目介绍

这是一个用C语言编写的走迷宫小游戏。

迷宫随机生成,可自行设置迷宫大小。

编译环境:VC6

第三方库:Easyx2022  注意需要提前安装easyX,如没有基础可以先了解easyX图形编程

二、运行截图

迷宫游戏

迷宫游戏

迷宫游戏

三、主要代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// 生成迷宫:初始化(注:宽高必须是奇数)
void MakeMaze(int width, int height)
{
    if (width % 2 != 1 || height % 2 != 1)
        return;
 
    int x, y;
 
    // 定义迷宫尺寸,并分配迷宫内存
    g_aryMap = new BYTE*[width + 2];
    for(x = 0; x < width + 2; x++)
    {
        g_aryMap[x] = new BYTE[height + 2];
        memset(g_aryMap[x], MAP_WALL, height + 2);
    }
 
    // 定义边界
    for (x = 0; x <= width + 1; x++)
        g_aryMap[x][0] = g_aryMap[x][height + 1] = MAP_GROUND;
     
    for (y = 1; y <= height; y++)
        g_aryMap[0][y] = g_aryMap[width + 1][y] = MAP_GROUND;
         
    // 定义入口和出口
    g_aryMap[1][2] = MAP_ENTRANCE;
    g_aryMap[width][height - 1] = MAP_EXIT;
 
    // 从任意点开始遍历生成迷宫
    TravelMaze(((rand() % (width - 1)) & 0xfffe) + 2, ((rand() % (height - 1)) & 0xfffe) + 2);
 
    // 将边界标记为迷宫外
    for (x = 0; x <= width + 1; x++)
        g_aryMap[x][0] = g_aryMap[x][height + 1] = MAP_OUTSIDE;
     
    for (y = 1; y <= height; y++)
        g_aryMap[0][y] = g_aryMap[width + 1][y] = MAP_OUTSIDE;
}
 
// 生成迷宫:遍历 (x, y) 四周
void TravelMaze(int x, int y)
{
    // 定义遍历方向
    int d[4][2] = {0, 1, 1, 0, 0, -1, -1, 0};
     
    // 将遍历方向乱序
    int n, t, i;
    for(i = 0; i < 4; i++)
    {
        n = rand() % 4;
        t = d[i][0], d[i][0] = d[n][0], d[n][0] = t;
        t = d[i][1], d[i][1] = d[n][1], d[n][1] = t;
    }
     
    // 尝试周围四个方向
    g_aryMap[x][y] = MAP_GROUND;
    for(i = 0; i < 4; i++)
        if (g_aryMap[x + 2 * d[i][0]][y + 2 * d[i][1]] == MAP_WALL)
        {
            g_aryMap[x + d[i][0]][y + d[i][1]] = MAP_GROUND;
            TravelMaze(x + d[i][0] * 2, y + d[i][1] * 2);      // 递归
        }
}

四、完整源码

走迷宫游戏下载

点赞(362)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)
#include<stdio.h>
int main()
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX