走迷宫(c语言)
前言:
制作一个迷宫游戏是一个有趣的编程挑战。首先,我们需要设计一个二维数组来表示迷宫的布局,其中每个元素代表迷宫中的一个格子。我们可以使用不同的值来表示空格、墙壁和起点/终点。接下来,我们需生成迷宫。在生成迷宫的过程中,我们需要确保迷宫中有足够的障碍物,以便玩家需要找到一条从起点到终点的路径。最后,我们需要编写代码来显示迷宫,接收用户的输入,更新迷宫的状态,判断游戏是否结束,并提供重新开始的选项。通过完成这个迷宫游戏项目,我们可以提高自己的编程能力和逻辑思维能力。
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函数来进行随机数的生成。
#include<time.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")函数的作用是清屏,它需要使用#icnldue<stdlib.h>进行调用。
完整代码 :
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#include<conio.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语言写迷宫的全部内容啦,如果上述内容对你有帮助的话不要忘记点上一个小小的赞和关注呦,期待我们下次再见。
相关文章:
走迷宫(c语言)
前言: 制作一个迷宫游戏是一个有趣的编程挑战。首先,我们需要设计一个二维数组来表示迷宫的布局,其中每个元素代表迷宫中的一个格子。我们可以使用不同的值来表示空格、墙壁和起点/终点。接下来,我们需生成迷宫。在生成迷宫的过程…...
两周掌握Vue3(五):自定义指令、路由、ajax
文章目录 一、自定义指令1.创建和使用自定义指令2.钩子函数3.使用参数 二、路由1.创建一个router实例2.在components目录中创建组件3.将路由实例挂载到应用4.使用路由 三、Ajax 代码仓库:跳转 当前分支:05 一、自定义指令 自定义指令是Vue.js框架提供的…...
redis之单线程和多线程
目录 1、redis的发展史 2、redis为什么选择单线程? 3、主线程和Io线程是怎么协作完成请求处理的? 4、IO多路复用 5、开启redis多线程 1、redis的发展史 Redis4.0之前是用的单线程,4.0以后逐渐支持多线程 Redis4.0之前一直采用单线程的主…...
12AOP面向切面编程/GoF之代理模式
先看一个例子: 声明一个接口: // - * / 运算的标准接口! public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j); }实现该接口: package com.sunsplanter.prox…...
【MySQL】数据处理之增删改
文章目录 一、增加(插入)INSERT INTO...VALUES(...,...)VALUES的方式添加情况一:为表的所有字段按默认顺序插入数据情况二:为表的指定字段插入数据情况三:同时插入多条记录 将查询结果插入到表中 二、修改(…...
利用docker的LNMP
目录 服务器环境 任务需求 服务搭建 Nginx Mysql Php 启动 wordpress 服务 服务器环境 容器 操作系统 IP地址 主要软件 nginx CentOS 7 172.20.0.10 Docker-Nginx mysql CentOS 7 172.20.0.20 Docker-Mysql php CentOS 7 172.2…...
Grafana(二)Grafana 两种数据源图表展示(json-api与数据库)
一. 背景介绍 在先前的博客文章中,我们搭建了Grafana ,它是一个开源的度量分析和可视化工具,可以通过将采集的数据分析、查询,然后进行可视化的展示,接下来我们重点介绍如何使用它来进行数据渲染图表展示 Docker安装G…...
Shape-IoU——综合考量边框形状与尺度的度量
今天看到一篇文章主要是提出了一种更有效的IOU度量方法,论文地址在这里,如下所示: 摘要 边界盒回归损失作为检测器定位分支的重要组成部分,在目标检测任务中起着重要作用。现有的边界框回归方法通常考虑GT框和预测框之间的几何关…...
Stack详解(Java)
Stack Java 中的 Stack 是一种基于后进先出(LIFO)原则的数据结构。Stack 类实现了一个标准的堆栈,它继承自 Vector 类,并提供了一些额外的方法来支持堆栈的操作。 下面是一些 Java Stack 类的详细解释: 构造方法&…...
Qt框架学习 --- CTK编译(Qt5.15.2+vs2019+cmake)
系列文章目录 第二章 CTK的测试demo https://blog.csdn.net/yonug1107716573/article/details/135527289 文章目录 系列文章目录前言一、准备工作二、编译步骤1.修改文件2.编译CTK2.1 准备2.2 cmake界面配置2.3 配置编译器2.4 编译的配置设置2.5 选择需要编译的模块2.6 生成2.…...
Flink(十三)【Flink SQL(上)】
前言 最近在假期实训,但是实在水的不行,三天要学完SSM,实在一言难尽,浪费那时间干什么呢。SSM 之前学了一半,等后面忙完了,再去好好重学一遍,毕竟这玩意真是面试必会的东西。 今天开始学习 Flin…...
linux nginx配置链接访问图片
nginx 安装 sudo apt update sudo apt install nginxnginx 启动命令 sudo systemctl restart nginx # 重启 sudo systemctl start nginx #开启 sudo systemctl stop nginx # 关闭 sudo systemctl status nginx # 状态 sudo systemctl restart nginx.service #重启nginx安装成…...
深度学习笔记(二)——Tensorflow环境的安装
本篇文章只做基本的流程概述,不阐述具体每个软件的详细安装流程,具体的流程网上教程已经非常丰富。主要是给出完整的安装流程,以供参考 环境很重要 一个好的算法环境往往能够帮助开发者事半功倍,入门学习的时候往往搭建好环境就已…...
Java实现在线编辑预览office文档
文章目录 1 在线编辑1.1 PageOffice简介1.2 前端项目1.2.1 配置1.2.2 页面部分 1.3 后端项目1.3.1 pom.xml1.3.2 添加配置1.3.3 controller 2 在线预览2.1 引言2.2 市面上现有的文件预览服务2.2.1 微软2.2.2 Google Drive查看器2.2.3 阿里云 IMM2.2.4 XDOC 文档预览2.2.5 Offic…...
阿里云OSS上传视频,可分片上传
uniappH5实现 阿里云OSS上传视频 示例图: 上传视频完整示例代码: 使用npm安装SDK开发包,安装命令为 npm install ali-oss --save accessKeyId 和 accessKeySecret 还有 bucket 替换成你的就行。 multipartUpload 的第一个入参是&#x…...
Linux第三次课后作业
1.使用while和until语句编写脚本程序,计算1到100的和。 i1 s0 while(i<100) {sii} echo(s)sum0 i0 until test $num -eq 101 do #下面两个均为反斜杠 sumexpr $sum $i iexpr $num 1 done echo "the result is $sum"2.编写脚本程序备份用户指定的文件…...
WordPress后台仪表盘自定义添加删除概览项目插件Glance That
成功搭建WordPress站点,登录后台后可以在“仪表盘 – 概览”中看到包括多少篇文章、多少个页面、多少条评论和当前WordPress版本号及所使用的主题。具体如下图所示: 但是如果我们的WordPress站点还有自定义文章类型,也想在概览中显示出来应该…...
.Net6使用SignalR实现前后端实时通信
代码部分 后端代码 (Asp.net core web api,用的.net6)Program.cs 代码运行逻辑: 1. 通过 WebApplication.CreateBuilder(args) 创建一个 ASP.NET Core 应用程序建造器。 2. 使用 builder.Services.AddControllers() 添加 MVC 控…...
基于SpringBoot+Vue的时装服饰商城购物系统
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
近4w字吐血整理!只要你认真看完【C++编程核心知识】分分钟吊打面试官(包含:内存、函数、引用、类与对象、文件操作)
🌈个人主页:godspeed_lucip 🔥 系列专栏:C从基础到进阶 🏆🏆关注博主,随时获取更多关于C的优质内容!🏆🏆 C核心编程🌏1 内存分区模型🎄…...
终极Mac抢票解决方案:12306ForMac让你的购票体验飞起来
终极Mac抢票解决方案:12306ForMac让你的购票体验飞起来 【免费下载链接】12306ForMac An unofficial 12306 Client for Mac 项目地址: https://gitcode.com/gh_mirrors/12/12306ForMac 还在为Mac上抢不到火车票而烦恼吗?作为Mac用户,你…...
如何用SPT-AKI存档编辑器5分钟内定制你的塔科夫体验:新手终极指南
如何用SPT-AKI存档编辑器5分钟内定制你的塔科夫体验:新手终极指南 【免费下载链接】SPT-AKI-Profile-Editor Программа для редактирования профиля игрока на сервере SPT-AKI 项目地址: https://gitcode.com/g…...
AI 工具规模化滥用下钓鱼攻击演化机理与闭环防御研究
【摘要】Cisco Talos 2026 年第一季度事件响应报告显示,生成式 AI 工具被大规模用于网络钓鱼产业化制造,钓鱼攻击重新成为威胁系统安全的首要挑战。随着机构漏洞修复能力提升,攻击重心从技术漏洞利用转向以人为核心的社会工程攻击,…...
Lean版本管理革命:3步搞定多版本Lean开发环境
Lean版本管理革命:3步搞定多版本Lean开发环境 【免费下载链接】elan The Lean version manager 项目地址: https://gitcode.com/gh_mirrors/el/elan 还在为不同Lean项目需要不同版本而头疼吗?还在手动下载、配置、切换Lean版本吗?今天…...
Wireshark抓包提取NTLMv2 Hash实战指南
1. 这不是“黑客演示”,而是一次内网安全加固前的必做体检你有没有遇到过这样的情况:某天突然收到告警,说域控日志里出现了大量异常的NTLM认证失败记录;或者渗透测试报告里赫然写着“存在明文凭据泄露风险”,但你翻遍所…...
如何快速掌握串口数据可视化:开源SerialPlot工具的完整指南
如何快速掌握串口数据可视化:开源SerialPlot工具的完整指南 【免费下载链接】serialplot Small and simple software for plotting data from serial port in realtime. 项目地址: https://gitcode.com/gh_mirrors/se/serialplot 你是否曾被串口终端中源源不…...
Mardi 品牌创始人是谁?一文读懂法国 Mardi Ladin
法国 Mardi Ladin 品牌创始人是La Bergon(Baudino Cd L),一位出身法国时尚世家的设计师,品牌的灵感直接来自于 1975 年法国经典电影《表兄妹》中入围奥斯卡最佳女主角的角色 "玛尔蒂 MARDI"。创始人 La Bergon 解析La B…...
解锁.NET 11 新境:ASP.NET Core 10 在微服务安全通信的深化与实践
解锁.NET 11 新境:ASP.NET Core 10 在微服务安全通信的深化与实践 前言 在当今分布式系统盛行的时代,微服务架构已成为构建大型应用的主流选择。ASP.NET Core 10 作为.NET 11 生态中重要的后端框架,为微服务间的安全通信提供了全面且强大的支…...
复杂干扰下考虑异质性的非机动车微观行为建模与仿真【附仿真】
✨ 长期致力于非机动车微观交通行为、异质性、感知—决策—行动三阶段、社会力模型、模糊逻辑研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)非机动车…...
广州市认定广东专利奖的条件有哪些?如何准备广东专利奖申报?
一、奖项设置与省级奖励标准广东专利奖设四类奖项,省级直接奖励标准如下:广东专利金奖:不超过20项,每项30万元广东专利银奖:不超过40项,每项20万元广东专利优秀奖:不超过60项,每项10…...
