一个人做网站原型,天津做网站的企业,深圳微商城网站制作公司,美食网页设计图片前言#xff1a;
制作一个迷宫游戏是一个有趣的编程挑战。首先#xff0c;我们需要设计一个二维数组来表示迷宫的布局#xff0c;其中每个元素代表迷宫中的一个格子。我们可以使用不同的值来表示空格、墙壁和起点/终点。接下来#xff0c;我们需生成迷宫。在生成迷宫的过程…前言
制作一个迷宫游戏是一个有趣的编程挑战。首先我们需要设计一个二维数组来表示迷宫的布局其中每个元素代表迷宫中的一个格子。我们可以使用不同的值来表示空格、墙壁和起点/终点。接下来我们需生成迷宫。在生成迷宫的过程中我们需要确保迷宫中有足够的障碍物以便玩家需要找到一条从起点到终点的路径。最后我们需要编写代码来显示迷宫接收用户的输入更新迷宫的状态判断游戏是否结束并提供重新开始的选项。通过完成这个迷宫游戏项目我们可以提高自己的编程能力和逻辑思维能力。
1. 打印菜单
void menu()
{printf(|---------------------------------------|\n);printf(| |\n);printf(| 走迷宫 |\n);printf(| 1.play |\n);printf(| 2.exit |\n);printf(| |\n);printf(|---------------------------------------|\n);
}int main()
{int input 0;do{menu();printf(请选择:);scanf(%d, input);switch (input){case 1:game();break;case 0:printf(退出游戏\n);break;default:printf(选择有误请重新选择\a\n);}} while (input);
}2. 分析迷宫的组成要素
迷宫的组成要素无非就是墙、路、入口、出口根据这些要素我们可以设置一个数组然后随机给其赋值为0,1,2,3当数组等于0时打印路这里用空格代替等于1时打印墙这里用█代替等于2打印入口这里用S代替等于3时打印出口这里用E代替。
3. 实现迷宫的组成要素
因为这些要素的生成都与随机数有关所以这里就要使用到time函数、srand函数和rand函数来进行随机数的生成。
#includetime.h
srand((time(NULL))
int x rand();
3.1 生成路
给数组初始化为0生成路后面再用随机数生成。 for (int i 0; i SIZE; i){for (int j 0; j SIZE; j){maze[i][j] 0;}}
3.2 生成围墙
还需要设置围墙将我们的迷宫围起来防止数组的越界访问。
for (int i 0; i SIZE; i)
{maze[0][i] 1;maze[i][0] 1;maze[SIZE - 1][i] 1;maze[i][SIZE - 1] 1;
}
3.3 生成入口和出口
因为入口和出口都是只有一个所以这里我们需要单独使用随机数生成入口和出口。 int start_x rand() % SIZE;int start_y rand() % SIZE;maze[start_y][start_x] 2;int end_x rand() % SIZE;int end_y rand() % SIZE;maze[end_y][end_x] 3;
3.4 防止入口或出口出现在围墙上
这里使用了goto语句
again://围墙for (int i 0; i SIZE; i){maze[0][i] 1;maze[i][0] 1;maze[SIZE - 1][i] 1;maze[i][SIZE - 1] 1;}//设置入口与出口int start_x rand() % SIZE;int start_y rand() % SIZE;maze[start_y][start_x] 2;int end_x rand() % SIZE;int end_y rand() % SIZE;maze[end_y][end_x] 3;//防止入口或出口出现在围墙上if (start_x 0 || start_x SIZE - 1 || start_y 0 || start_y SIZE - 1|| end_x 0 || end_x SIZE - 1 || end_y 0 || end_y SIZE - 1){goto again;}
3.5 生成墙
for (int i 0; i SIZE; i)
{for (int j 0; j SIZE; j){if (maze[i][j] ! 2 maze[i][j] ! 3){if (rand() % 4 0){maze[i][j] 1;}}}
}
4. 操作移动
在这里用到了getch函数这个函数需要用#include conio.h来进行调用。
#include conio.h
int main()
{while (1){int x getch(); if (x w)printf(上\n);if (x a)printf(左\n);if (x s)printf(下\n);if (x d)printf(右\n);}return 0;
} do
{system(cls);print_maze(maze);int x getch();if (x w)//上{if (maze[start_y - 1][start_x] ! 1){maze[start_y][start_x] 0;start_y--;maze[start_y][start_x] 2;}}if (x a)//左{if (maze[start_y][start_x - 1] ! 1){maze[start_y][start_x] 0;start_x--;maze[start_y][start_x] 2;}}if (x s)//下{if (maze[start_y 1][start_x] ! 1){maze[start_y][start_x] 0;start_y;maze[start_y][start_x] 2;}}if (x d)//右{if (maze[start_y][start_x 1] ! 1){maze[start_y][start_x] 0;start_x;maze[start_y][start_x] 2;}}if (maze[end_y][end_x] 2){printf(恭喜你成功通关\n);break;}
} while (1); 其中system(cls)函数的作用是清屏它需要使用#icnlduestdlib.h进行调用。
完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
#include stdlib.h
#include time.h
#includeconio.h
#define SIZE 45
//打印迷宫
void print_maze(int maze[SIZE][SIZE])
{for (int i 0; i SIZE; i){for (int j 0; j SIZE; j){if (maze[i][j] 1){printf(█);}else if (maze[i][j] 2){printf(S);//入口}else if (maze[i][j] 3){printf(E);//出口}else{printf( );}}printf(\n);}printf(\n);
}void generate_maze(int maze[SIZE][SIZE])
{
again:for (int i 0; i SIZE; i){for (int j 0; j SIZE; j){maze[i][j] 0;}}//围墙for (int i 0; i SIZE; i){maze[0][i] 1;maze[i][0] 1;maze[SIZE - 1][i] 1;maze[i][SIZE - 1] 1;}//设置入口与出口int start_x rand() % SIZE;int start_y rand() % SIZE;maze[start_y][start_x] 2;int end_x rand() % SIZE;int end_y rand() % SIZE;maze[end_y][end_x] 3;//防止入口或出口出现在围墙上if (start_x 0 || start_x SIZE - 1 || start_y 0 || start_y SIZE - 1|| end_x 0 || end_x SIZE - 1 || end_y 0 || end_y SIZE - 1){goto again;}//设置迷宫for (int i 0; i SIZE; i){for (int j 0; j SIZE; j){if (maze[i][j] ! 2 maze[i][j] ! 3){if (rand() % 4 0){maze[i][j] 1;}}}}//操作S移动do{system(cls);print_maze(maze);int x getch();if (x w)//上{if (maze[start_y - 1][start_x] ! 1){maze[start_y][start_x] 0;start_y--;maze[start_y][start_x] 2;}}if (x a)//左{if (maze[start_y][start_x - 1] ! 1){maze[start_y][start_x] 0;start_x--;maze[start_y][start_x] 2;}}if (x s)//下{if (maze[start_y 1][start_x] ! 1){maze[start_y][start_x] 0;start_y;maze[start_y][start_x] 2;}}if (x d)//右{if (maze[start_y][start_x 1] ! 1){maze[start_y][start_x] 0;start_x;maze[start_y][start_x] 2;}}if (maze[end_y][end_x] 2){printf(恭喜你成功通关\n);break;}} while (1);
}
void menu()
{printf(|---------------------------------------|\n);printf(| |\n);printf(| 走迷宫 |\n);printf(| 1.play |\n);printf(| 2.exit |\n);printf(| |\n);printf(|---------------------------------------|\n);
}void game()
{srand(time(NULL));int maze[SIZE][SIZE];//打印迷宫generate_maze(maze);
}int main()
{int input 0;do{menu();printf(请选择:);scanf(%d, input);switch (input){case 1:game();break;case 0:printf(退出游戏\n);break;default:printf(选择有误请重新选择\a\n);}} while (input);
}
效果图 以上就是使用c语言写迷宫的全部内容啦如果上述内容对你有帮助的话不要忘记点上一个小小的赞和关注呦期待我们下次再见。