走迷宫(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 内存分区模型🎄…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
