项目设计:迷宫游戏设计day3

news2024/11/20 11:36:02

一、界面制作

我用的easyx实现图形化界面,在制作第一个界面的时候,第一个界面的功能有开始游戏,退出游戏,排行榜(虽然还没实现)

那么首先还是得用一个图片贴在上面,这个图片是我自己画的,就是利用电脑自带的画图功能,然后直接截图,再保存图片就OK了,然后就可以贴图了

然后就是实现点击开始游戏和退出游戏就能跳跃到下一个界面,这里我是如果点击了相应的范围的话,就调用另一个函数

while (1)
	{
		msg = GetMouseMsg();
		if (msg.uMsg == WM_LBUTTONDOWN)
		{
			if (msg.x > 146 && msg.x < 457 && msg.y < 247 && msg.y>81)
			{
				DoGame();							//开始关卡游戏选项
				break;
			}
			if (msg.x > 150 && msg.x < 457 && msg.y < 580 && msg.y>416)
			{
				drawself();								//开始自定义游戏选项
				break;
			}
		}
	}

二、开始游戏

到了另一个开始游戏界面之后,就是选择游戏模式了,一个是关卡模式,一个是自定义模式

 

关卡模式

那么接下来看关卡模式吧,关卡模式的地图,我是运用的三维数组实现的,这些图片都是我自己在晚上找的

人物的移动,这里我是用的不显示输入,当你输入'w'时,就要先判断,如果人物的下一个位置是路的话,那么就把路变成人,把原本的位置变成路,其他的移动也是如此,如果下一个位置是墙的话,那就不做任何操作,如果下一个是出口的话,就就将下一位置变成人,原本的位置变成路,那么这时候还要进行一个判断,因为这个时候就是就已经通关啦,就要找一下有没有出口(肯定是没有的啦),没有的话就跳到下一关去啦

 

 

还有的功能就是记时功能,这个是用的专门的函数实现的

start_time = clock();
	while (1)
	{
		if (!gameover())
		{
			step++;
			start_time = clock();
			if (step == 3)
			{
				show();
				break;
			}
		}
		cleardevice();
		load();
		drawmap_1();
		if (flag == 1)printpath();
		if(step==0)
		{
			settextstyle(18, 0, "黑体");
			settextcolor(RGB(255, 255, 255));
			outtextxy(0, 630, "请在10s内找到篮球,否则篮球会被小黑子弄坏");
		}
		if(step==1)
		{
			settextstyle(18, 0, "黑体");
			settextcolor(RGB(255, 255, 255));
			outtextxy(0, 630, "请在15s内找到篮球,否则篮球会被小黑子弄坏");
		}
		if(step==2)
		{
			settextstyle(18, 0, "黑体");
			settextcolor(RGB(255, 255, 255));
			outtextxy(0, 630, "请在20s内找到篮球,否则篮球会被小黑子弄坏");
		}
		settextstyle(18, 0, "黑体");
		settextcolor(RGB(255, 255, 255));
		outtextxy(0, 605, "w是向上移动,s是向下移动,a是向左移动,d是向右移动");
		end_time = clock();
		time_1 = (int)((end_time - start_time) / CLOCKS_PER_SEC);
		if(!defeat())break;												//游戏失败
		settextstyle(18, 0, "黑体");
		settextcolor(RGB(255, 255, 255));
		sprintf_s(str, "时间:%d s", time_1);
		outtextxy(0, 655, str);
		FlushBatchDraw();
		key();
	}

最后还有寻找最短路径的功能,我是用的bfs寻找最短路径,用这个的时候就要用一个前驱节点保存每个点的上一步是哪一个,然后最后将这些点用专门的图片贴在上面

61c88ead649b4c3d9079ebf8f27c2949.png

c376270eb8914e0ab6e1d0bd0eb6c1d3.png

void bfs()												//用bfs搜寻最短路径
{
	int i, j, startx, starty, endx, endy, t;		//sx,sy表示人物坐标,ex,ey表示出口坐标,t表示标记
	for (i = 0; i < n; i++)for (j = 0; j < m; j++)
	{
		if(map[step][i][j] == 1)dis[i][j] = 1;
		else dis[i][j] = 0;
		if (map[step][i][j] == 3)
		{
			startx = i;
			starty = j;
		}
		if (map[step][i][j] == 2)
		{
			endx = i;
			endy = j;
		}
	}

	int rear = 0, head = 0;
	dui[rear].x = startx;
	dui[rear].y = starty;
	dui[rear].step = -1;
	dis[startx][starty] = 1;
	rear++;
	k = 0 ,t = 0;
	while (head < rear)
	{
		for (i = 0; i < 4; i++)
		{
			startx = dui[head].x + dx[i];
			starty = dui[head].y + dy[i];
			if (startx<0 || startx>n || starty<0 || starty>m)continue;
			if (dis[startx][starty] == 0 && t == 0)
			{
				dui[rear].step = k;
				if (map[step][startx][starty] == 2)
				{
					end = rear;
					t = 1;
					break;
				}
				dis[startx][starty] = 1;
				dui[rear].x = startx;
				dui[rear].y = starty;
				rear++;
			}
		}
		pre[k][0] = dui[head].x;
		pre[k++][1] = dui[head].y;
		head++;
	}								//使最短路径显示出来
}

void printpath()									//使最短路径显示出来
{
	IMAGE ing;
	int nn = 600 / n;
	int mm = 600 / m;
	loadimage(&ing, "./pic/shortroute.png", nn, mm);
	for (int i = dui[end].step; i != -1; i = dui[i].step) {
		putimage(pre[i][1]*nn, pre[i][0]*mm, &ing);      //显示最短路径
	}
}

自定义模式

自定义模式就是自己定义这个迷宫怎样做,首先我是用的鼠标进行操作的,分成了三步

第一步就是设置墙,最开始的地图全部都是路,当我点击一个路时,这个路就变成了墙,如果这个已经是墙了,就不能进行操作了,那么消除墙也就是一个意思了,用鼠标右键,如果这个是墙的话,你就将它变成路,如果这时候你不想设置墙了,你就点击鼠标中键,这时候记数加一,当我们下次点击左键的时候就不能实现第一步的功能了

 

 

第二步就是设置人物在哪,这一步就是要注意一下只能设置一个人物,也就是标记一下,如果已经设置了一个人物的话,就不能再设置第二个人物啦,其余操作跟第一步一样

 

第三步就是设置出口,这一步跟第二步相似, 不过多描述

第四步就是开始游玩游戏了,那么游玩的过程也就跟上面的一样了

 三、一些其它没实现的功能

1.运用栈存步数已经在实现啦

2.排行榜也有一点思路啦

3.音乐也可以制作一下

 

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

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

相关文章

20230419 生物基础学习- 氨基酸-密码子-突变

文章目录 名称形状密码子-氨基酸对应表简明中文英文和简称突变类型生物化学课程笔记特殊氨基酸的性质缬氨酸和甲硫氨酸 染色体 - RNA - 蛋白质 名称 Phenylalanine,Leucine,Isoleucine,Methionine,Valine,Serine,Proline,Threonine,Alanine,Tyrosine,Histidine,Glutamine,Aspa…

「 计算机网络 」HTTP和RPC的区别与联系

「 计算机网络 」HTTP和RPC的区别与联系 参考&鸣谢 HTTP 和 RPC 的区别 小十七_ Http协议和Rpc协议有什么区别&#xff1f; 俗人杂念 为什么要自研RPC框架&#xff1f;HTTP和RPC的区别 starine 既然有HTTP协议&#xff0c;为什么还要有RPC 小白debug 文章目录 「 计算机网络…

工装识别工装检测系统 yolov7

工装识别工装检测系统通过yolov7python网络模型算法智能分析技术&#xff0c;工装识别工装检测系统对现场人员是否穿戴的进行实时分析&#xff0c;发现现场画面人员未按要求着装&#xff0c;系统会自动抓拍发出警报并讲违规图片视频保存下来&#xff0c;同步回传后台提醒监理人…

uniapp调用七牛云api实现文件上传-node.js向外提供uploadToken的接口-客户端不用下载七牛云的包和SDK-发起网络请求直接上传

uniapp调用七牛云api实现文件上传 实现思路&#xff1a; 1.使用node.js向客户端提供uploadToken&#xff0c;客户端获取uploadToken后使用七牛云的api接口发起网络请求&#xff0c;上传文件&#xff1b; node.js向外提供uploadToken的接口-客户端不用下载七牛云的包和SDK-&…

macOS电脑

UNIX操作系统有一个规范&#xff0c;名叫《单一UNIX规范》&#xff08;Single UNIX Specification&#xff09;。凡是符合这个规范的操作系统都可以叫UNIX操作系统&#xff0c;并且可以通过UNIX官方认证。 UNIX商标认证官网是&#xff1a;The Register of UNIX Certified Prod…

flink动态表的概念详解

目录 前言&#x1f6a9; 动态表和持续不断查询 stream转化成表 连续查询 查询限制 表转化为流 前言&#x1f6a9; 传统的数据库SQL和实时SQL处理的差别还是很大的&#xff0c;这里简单列出一些区别&#xff1a; 尽管存在这些差异&#xff0c;但使用关系查询和SQL处理流并…

界面控件Telerik UI for WinForms使用指南 - 数据绑定 填充(一)

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件&#xff0c;所有的UI for WinForms控件都具有完整的主题支持&#xff0c;可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。 Telerik UI for WinForms组件为可视化任何类…

RoBERTa 阅读笔记

RoBERTa 阅读笔记 https://arxiv.org/abs/1907.11692 总的来说&#xff0c;bert在模型上并没有做太多的改进&#xff0c;只是在训练数据和训练策略上进行了一个改进。 相较于BERT的改进 1. Masking策略 stastic: 原始 BERT 的 masking 是固定的&#xff0c;RoBERTa 给相同的…

ChatGPT: 智能对话时代的未来展望与应用实践

ChatGPT: 智能对话时代的未来展望与应用实践 简介 ChatGPT 是一种基于深度学习和自然语言处理技术的人工智能对话模型。它可以通过生成自然语言文本的方式&#xff0c;与用户进行交互式的对话。作为一种先进的对话生成模型&#xff0c;ChatGPT 在近年来快速发展的人工智能领域中…

首次发刊!Coremail管理员社区2023年Q1季刊发布

4月21日&#xff0c;Coremail安全邮件城市沙龙在北京正式开展&#xff0c;此次沙龙活动的主题为“践行教育信创&#xff0c;护航邮件安全”。广东盈世计算机科技有限公司服务副总裁、ICANN UA大使吴秀诚在活动上正式发布《Coremail管理员社区2023年Q1季刊》。 Coremail管理员社…

公网远程访问公司内网象过河ERP系统「内网穿透」

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 概述 ERP系统对于企业来说重要性不言而喻&#xff0c;不管是财务、生产、销售还是采购&#xff0c;都需要用到ERP系统来协助。…

基于spring+vue开发的音乐网站

摘要 随着科学技术的飞速发展&#xff0c;社会的各个领域都在努力与现代的先进技术接轨&#xff0c;以提高自身的优势。音乐推荐管理也不能排除在外。音乐推荐管理是一个管理系统&#xff0c;以实际运用为开发背景&#xff0c;采用JSP技术构建&#xff0c;使用软件工程开发方法…

《面试1v1》java注解

我是 javapub&#xff0c;一名 Markdown 程序员从&#x1f468;‍&#x1f4bb;&#xff0c;八股文种子选手。 面试官&#xff1a;接下来&#xff0c;聊聊Java的注解,它们到底有什么用? 候选人&#xff1a; 注解的用处主要三个: 第一个,编译期使用。比如Override确保你正确重…

activeMQ持久化报错的问题

activeMQ持久化&#xff0c;启动activeMQ报错&#xff0c; INFO | Using Persistence Adapter: JDBCPersistenceAdapter(org.apache.commons.dbcp2.BasicDataSource5148e82a) jvm 1 | WARN | Could not get JDBC connection: Cannot create PoolableConnectionFactory (Commun…

matlab点云的可视化-源码复制粘贴即可(一)

一、导入并可视化一个无属性的点云 clc; clear; close; % clear everything% Import a point cloud from a plain text file (run type(Lion.xyz) to see the contents of the file) pc pointCloud(Lion.xyz);% Generate a z-colored view of the point cloud pc.plot;% Set …

加密解密软件VMProtect入门使用教程(二):分析、破解和保护软件

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…

Vue ElementUI Axios 前后端案例(day03) 之 Axios

前置知识 AJAX 前置知识 答疑 问&#xff1a;我们是否可以这么理解&#xff0c;发送url请求就是服务器之间建立连接&#xff0c;tcp三次握手之后 其中与服务器进行数据交换&#xff1a;通过AJAX可以给服务器发送请求 就是连接建立以后 我们发送我们的浏览器数据 就是所谓的…

家用洗地机有什么优缺点?入门级家用洗地机

家用清洁产品近几年发展迅猛&#xff0c;扫拖机器人、洗地机等热门品类更是在家电产品销量普遍下滑的趋势下&#xff0c;仍然保持着大幅增长。越来越多的消费者开始关注清洁类产品&#xff0c;但扫拖机器人和吸尘器的清洁效果有限&#xff0c;洗地机会在功能上更加的完善&#…

2023年全国职业院校技能大赛软件测试赛题第1套

2023年全国职业院校技能大赛 软件测试赛题第1套 赛项名称&#xff1a; 软件测试 英文名称&#xff1a; Software Testing 赛项编号&#xff1a; GZ034 归属产业&#xff1a; 电子与信息大类 …

通过适当的异常处理进行快速调试

编写良好的代码和异常处理 作为开发人员&#xff0c;开发中最令人恼火的部分通常是调试。与我共事过的大多数程序员都会赞同这种观点。通常&#xff0c;看到异常的第一反应是烦恼和沮丧的混合。易于调试的异常通常会在调试后的几分钟内产生根本原因。最让我烦恼的是那些在系统…