纯c++简易的迷宫小游戏

news2025/1/10 13:24:15

一个用c++写的黑框框迷宫

适合新手入门学习

也适合大学生小作业

下面附上代码

总体思路

  1. 初始化游戏界面:设置迷宫的大小(WIDTH和HEIGH),生成迷宫地图(map),包括墙壁、空地、起点和终点。
  2. 显示欢迎界面和游戏规则:通过Welcome()函数和Rule()函数分别实现。
  3. 开始计时:记录游戏开始的时间。
  4. 游戏主循环:在Play()函数中,不断获取用户输入(上下左右键),根据输入移动角色,直到到达出口或超时。
  5. 判断游戏结果:如果角色成功走出迷宫且在规定时间内,显示恭喜信息;否则,提示用户失败并关机。

特点

用随机数来随机生成地图,增加了趣味性,可以不断切换地图(当然可能存在某个地图走不通的情况,这时候就要及时切换地图)

设置了关机程序(如果40秒不能走出迷宫 电脑就会自动关机 超刺激的

欢迎界面

游戏规则说明界面

游戏界面

完整代码

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<iostream>
#include<windows.h>
using namespace std;
#define WIDTH 25
#define HEIGH 25

int x,y;
int flag = 1;

int map[HEIGH][WIDTH];


void Welcome()
{
	for(int i=0;i<10;i++)
	{
		cout<<endl;
	}
	cout<<"			====================================================================="<<endl;
	cout<<"			=                                                                   ="<<endl;
	cout<<"			=                                                                   ="<<endl;
	cout<<"			=                                                                   ="<<endl;
	cout<<"			=                                走迷宫                             ="<<endl;
	cout<<"			=                                                                   ="<<endl;
	cout<<"			=                 在规定时间内走出迷宫                              ="<<endl;
	cout<<"			=                 否则会发生很恐怖的事                              ="<<endl;
	cout<<"			=                                                                   ="<<endl;
	cout<<"			====================================================================="<<endl;
	system("pause");
	system("cls");//清屏 用以换页 
}
void Rule()
{
	cout<<"================================================================"<<endl;
	cout<<"=                             规则                             ="<<endl;
	cout<<"=                1. wasd控制方向(小写 把输入法变成英文)      ="<<endl;
	cout<<"=                2.如果地图走不了记得用r换图                   ="<<endl;
	cout<<"=                3.☆是出口                                    ="<<endl; 
	cout<<"=                4.走出迷宫的时间一定要在40s内(不信就try try)  ="<<endl;
	cout<<"=                5.为了营造更紧张的氛围 请自己默数40s          ="<<endl; 
	cout<<"================================================================"<<endl;
	system("pause");
	system("cls"); 
}
void Draw()//创建地图  
{
	int i,j;

	for ( i=0; i<HEIGH; i++ )
	{
		for ( j=0; j<WIDTH; j++ )
		{
			if ( map[i][j] == 0 )
			{
				printf("  ");
			}
			if ( map[i][j] == 1 )
			{
				printf("■");
			}
			if ( map[i][j] == 2 )
			{
				printf("●");
			}
			if ( map[i][j] == 3 )
			{
				printf("☆");
			} 
		}
		printf("\n");
	}
}

void moveW()
{
		
	if(map[x-1][y]!=1)
	{
		map[x][y]=0;
		x--;
		map[x][y]=2;
	}
}
void moveS()
{

	if(map[x+1][y]!=1)
	{
		map[x][y]=0;
		x++;
		map[x][y]=2;
	}
}
void moveA()
{
		
	if(map[x][y-1]!=1)
	{
		map[x][y]=0;
		y--;
		map[x][y]=2;
	}
}
void moveD()
{
		
	if(map[x][y+1]!=1)
	{
		map[x][y]=0;
		y++;
		map[x][y]=2;
	}
}

void Play()
{
	char c;
	while ( flag )
	{
		system("cls");
		cout<<"◆输入r重新载入新地图◆"<<endl;
		Draw();
		
		
		c = getch();//判断是否输入 
		if ( x==HEIGH-2 && y==WIDTH-2 )//出口 判定成功 
		{
			flag = 0;
		}
		if ( c == 'r' )//重新加载地图 
		{
			for ( int i=1; i<HEIGH-1; i++ )
			{
				for ( int j=1; j<WIDTH-1; j++ )
				{
					map[i][j] = 0;
				}
			}
			for ( int i=0; i<WIDTH; i++ )
			{
				map[0][i] = 1;
				map[HEIGH-1][i] = 1;
			}
			for ( int i=0; i<HEIGH; i++ )
			{
				map[i][0] = 1;
				map[i][WIDTH-1] = 1;
			}
			srand((unsigned)time(NULL));
			for ( int i=0; i<200; i++ )
			{
				map[rand()%23+1][rand()%23+1] = 1;
			}
			map[1][1] = 2;
			map[HEIGH-2][WIDTH-2] = 3;
			x = 1;
			y = 1;
		}
	
		
		switch (c)
		{
			case 'w':
				moveW();
				break;
			case 's':
				moveS();
				break;
			case 'a':
				moveA();				
				break;
			case 'd':
				moveD();				
				break;
		}
	}
	
	
}

	
int main()
{
	Welcome();
	Rule();
	clock_t start,finish;
	double duration;
	start = clock();
	for ( int i=0; i<WIDTH; i++ )//上下封闭 
	{
		map[0][i] = 1;
		map[HEIGH-1][i] = 1;
	}
	for ( int i=0; i<HEIGH; i++ )//左右封闭 
	{
		map[i][0] = 1;
		map[i][WIDTH-1] = 1;
	}
	srand((unsigned)time(NULL));//随机数种子 
	for ( int i=0; i<200; i++ )//生成200个方块 
	{
		map[rand()%23+1][rand()%23+1] = 1;//随机在某个位置生成方块 
	}
	map[1][1] = 2;//初始位置 
	map[HEIGH-2][WIDTH-2] = 3;//出口 
	x = 1;
	y = 1;
	Play();
	finish = clock();
	duration = (double)((finish-start)/CLOCKS_PER_SEC);//记录总时间 
	
	if(duration>40)
	{
		system("cls");
		cout<<"你用了"<<duration<<"秒"<<endl; 
		cout<<"你的电脑将在30秒内关机!"<<endl;
		cout<<"你的电脑将在30秒内关机!"<<endl;
		cout<<"你的电脑将在30秒内关机!"<<endl;
		cout<<"重要的事情说三遍!!!(︶︿︶) "<<endl;
		system("shutdown -s -t 30");
		system("pause"); 
	}
	else
	{
		
		system("cls");
		printf("			   恭喜通过\n");
		system("pause"); 
	}
	
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1388535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怿星科技测试实验室获CNAS实验室认可,汽车以太网检测能力达国际标准

2023年12月27日&#xff0c;上海怿星电子科技有限公司测试实验室&#xff08;下称&#xff1a;EPT LABS&#xff09;通过CNAS实验室认可批准&#xff0c;并于2024年1月5日正式取得CNAS实验室认可证书&#xff08;注册号CNAS L19826&#xff09;&#xff0c;标志着怿星科技的实验…

SpringBoot3自动配置原理

​​​​​​自动配置 遵循约定大约配置的原则&#xff0c;在boot程序启动后&#xff0c;起步依赖中的一些bean对象会自动注入到ioc容器 看一下我们前面写的代码有没有达到自动配置的效果呢&#xff1f; 没有自动&#xff0c;我们写了配置类&#xff0c;写了Import注解&#…

一台电脑如何通过另一台联网电脑访问网络

电脑A没有连接网络&#xff0c;电脑B已经连接wifi。 电脑A如何通过访问电脑B从而连接网络&#xff1f; 1. 将这2台电脑用网线直连 2. 电脑B打开【网络和Internet设置】 3. 右键点击WLAN&#xff0c;选择属性&#xff0c;进入共享tab页面&#xff0c;勾选【允许其他网络用户通过…

超融合之道:亚信安慧AntDB 8.0版本引领数据库创新

在当今多变的数据应用场景中&#xff0c;AntDB作为行业领先的超融合流式实时数仓&#xff0c;秉承着“融合实时”的研发理念&#xff0c;全面应对企业日益复杂的数据处理需求。通过SQL接口访问多种执行引擎&#xff0c;AntDB在实现交易、分析等多重能力的“超融合”方面取得了显…

nacos配置yml空格报错提示

错误格式 正确格式 spring:redis: # redis配置host: 192.168.30.113 # IPport: 6379 # 端口password: # 密码connect-timeout: 10s # 连接超时时间lettuce: # lettuce redis客户端配置pool: # 连接池配置max-active: 8 # 连接池最大连接数&#xff08;使用负值表示没有限…

android studio设置gradle和gradle JDK版本

文章目录 1.gradle JDK版本2.gradle版本 1.gradle JDK版本 file -> project structure -> SDK Location -> Gradle Settings -> Gradle JDK -> Download JDK 2.gradle版本 file -> project structure -> Project

打造创新的金融数据平台,加速数字化和智能化转型丨PingCAP 官网金融行业专区上线

自诞生以来&#xff0c;TiDB 的原生分布式架构在强一致性、高可用性和可扩展性等方面与金融级业务需求高度契合&#xff0c;早期版本即为包括北京银行在内的金融用户提供服务。 TiDB 的核心能力始终源自与中国金融用户的共同创造。作为金融级分布式数据库&#xff0c;TiDB 在国…

东南亚潜力巨大,下一个变现增长点!Flat Ads助力休闲游戏出海

近年来,得益于庞大的消费市场和人口红利,东南亚经济飞速发展,尤其在移动互联网和数字经济领域表现亮眼。巨大的发展空间吸引了众多出海者布局,而东南亚有利的人口结构、不断增长的财富以及日益城市化的人口为数字经济的未来增长奠定了基础。那么,2024年游戏出海东南亚,是否仍有…

Zabbix补充扩展

目录 1.自定义监控内容 客户端配置 2.zabbix自动发现与自动注册 自动发现 在服务端和客户端上配置 hosts 解析 在Web页面配置自动发现 自动注册 3.部署zabbix代理服务器 下载zabbix-proxy以及数据库 启动zabbix-proxy及添加hosts解析 在Web页面配置agent代理 配置a…

S1D13L02 VGA简单的液晶控制器

S1D13L02是一款简单、低成本、低功耗、多用途的液晶控制器&#xff0c;具有一个1024 KB的嵌入式SRAM显示缓冲区。 S1D13L02提供了一个灵活的&#xff0c;但易于开发的显示系统&#xff0c;适合于满足嵌入式市场的需求&#xff0c;如工厂自动化、医疗设备和 办公自动化应用。 S1…

过滤器、拦截器、AOP、ControllerAdvcie执行顺序对比

过滤器Filter 简介 来自J2EE中的Servlet技术实现原理&#xff1a;基于servlet的函数回调实现只可以获取到请求中的request和response&#xff0c;无法获取到响应方法的信息可以拦截所有请求支持使用xml配置和注解配置应用场景&#xff1a;权限认证、敏感词检测、访问日志记录…

JVM对象创建与内存分配机制剖析

欢迎大家关注我的微信公众号&#xff1a; 传送门&#xff1a;JVM内存模型深度剖析与优化 目录 对象的创建 对象大小与指针压缩 对象内存分配 对象内存回收 对象的创建 对象创建的主要流程: 1.类加载检查 虚拟机遇到一条new指令时&#xff0c;首先将去检查这个指令的…

GC6106 双通道5V低电压步进电机驱动芯片——低噪声、低振动

GC6106是双通道5V低电压步进电机驱动器&#xff0c;具有低噪声、低振动的特点&#xff0c;特别适用于相机的变焦和对焦系统&#xff0c;万向节和其他精密&#xff0c;低噪声STM控制系统。该芯片为每个通道集成了256微步驱动器。我SPl接口&#xff0c;用户可以方便地调整驱动器的…

设计模式入门

0. 类图 1. 设计原则 1.单一职责原则&#xff1a;每个类只有一个功能 2.开放封闭原则&#xff1a;模块和函数应该对扩展开放(对提供方)&#xff0c;对修改关闭(对使用方) 3.里氏代换原则&#xff1a;子类拥有父类的所有方法和属性&#xff0c;从而可以减少创建类的工作量 4.依…

【MySQL高级】——性能分析

数据库调优中&#xff0c;目标是 响应时间更快&#xff0c;吞吐量更大&#xff0c;利用宏观的监控工具和微观的日志分析帮助我们快速找到调优的思路和方式。 1. 数据库服务器优化步骤 整个流程划分成了 观察&#xff08;Show status&#xff09; 和 行动&#xff08;Action&am…

业财融合:解密企业管理的黄金钥匙

本文提炼总结自专刊《上市公司如何打好合规与增长的双赢之战》。全书40页&#xff0c;出品方纷享销客市场部。如有需要&#xff0c;请阅读原版电子书&#xff1a;《上市公司如何打好合规与增长的双赢之战》 目 录 一、什么是业财融合&#xff1f; 二、财务部门面临的挑战…

超好用的写作软件,下面这5款AI写作你一定要知道

写作是一项需要耐心和技巧的工作&#xff0c;而在数字化时代&#xff0c;我们可以借助各种写作软件来提高效率和质量。在市场上有许多AI自动写作软件&#xff0c;它们能够帮助我们生成文章、提供创意和编辑建议。在本文中&#xff0c;我将向大家推荐五款功能强大且好用的写作软…

腾讯云把向量数据库“卷”到哪一步了?

“不是我不明白&#xff0c;这世界变化快”&#xff0c;崔健在20世纪写下的这句歌词&#xff0c;放在刚刚过去的2023年&#xff0c;也同样适用。技术风向的变化之快&#xff0c;让不少人感到惊讶&#xff0c;向量数据库这一年的潮起潮落&#xff0c;就是一个典型的例子。 2023年…

记edusrc一处信息泄露

一、信息收集 在搜索某一学校的资产时&#xff0c;找到了一处学工系统。 登录进去&#xff0c;发现有两种登陆方式&#xff0c;一种是统一身份认证&#xff0c;一种是DB认证。 统一身份认证是需要通过学生的学号和密码进行登录的&#xff0c;利用谷歌语法可以搜索到相关学…

网络安全的威胁PPT

建议的PPT免费模板网站&#xff1a;http://www.51pptmoban.com/ppt/ 此PPT模板下载地址&#xff1a;https://file.51pptmoban.com/d/file/2023/03/20/1ae84aa8a9b666d2103f19be20249b38.zip 内容截图&#xff1a;