【C++游戏程序】easyX图形库还原游戏《贪吃蛇大作战》(一)

news2025/7/20 11:12:11

一.游戏逻辑概述

  游戏完成图如图下所示:

  根据游戏设定,需要实现的总体框架如下:

  • 场景中有玩家可以操纵的初始角色-贪吃蛇
  • 场景中有AI自动操作的敌人-敌对贪吃蛇
  • 场景中的彩色圆点可以被敌人或者玩家吃掉,并且增加分数
  • 玩家触碰到敌人,或者场景地图边界,游戏失败

  大体框架就如上面所示,后面我们将针对各个要点进行详细的要点拆分。

二.初始化

(一).地图和玩家视角

  首先我们应该清楚地图大小和玩家视角大小的区别,方便我们后面使用:

  程序中我们可以随意设定玩家可视区域与地图总大小,本文就按照以下所示大小,各位也可以自行修改:

(二).角色外观以及坐标设定

  接下来需要对玩家角色、AI敌人进行初始化,根据游戏设定,不管是玩家可操纵的角色,还是AI自己操纵的角色,都只不过是好几个圆叠加在一起的:

  知道之后我们就好办了,直接使用esayX中的画圆函数就好了:

  根据easyX文档的函数,画圆就需要传入坐标值(x,y)以及圆的半径,所以我们可以定义一个结构体,定义角色的坐标、半径以及颜色等变量:

  我们的角色需要很多个圆叠在一起,且我们的圆会随着吃掉敌人、食物会变得越来越长,所以需要一维数组(存储头部和尾巴的坐标、半径以及颜色的实际数据)来存储这些长度数据:

  我们的角色设定初始长度(比如是5)后,需要怎么将这5个圆连着画在一起呢,请看下方定义图示:

  如此便会得到以下的样子(图示需要后面才能看得见,前期初始化看不见,这里只是显示让你看一看长啥样子):

  代码如下:

  PS:上述的坐标值、半径可以按照自己的意愿随便设定。

  本人喜欢两两圆形交替,显示如下:

  而AI敌人的设定与我们玩家角色的设定基本一致可以直接沿用相同的结构体,不同的是AI敌人不只是一个,而是有很多很多个,所以AI敌人的数据应该用二维数组来存储,一维表示AI的数量,二维表示每个AI敌人的坐标、半径以及颜色:

  这里的二维数组中的一维数组【99】就是指99个AI敌人,当然,你也可以设定一个全局变量用来专门管理AI敌人的数量:

  初始化操作就和我们玩家的一样,区别就在于AI的坐标值是随机的,这时候就要用上随机函数:

  AI初始化代码如下:

  最后是遍布满地的食物,玩家/AI碰到之后可以增加相应的分数,我们同样用一个变量“food_num”来存储食物的数量,然后初始化它:

三.场景绘制

  完成初始化后,我们就可以进行场景的绘制了。

(一).背景绘制

  首先是绘制背景,本次讲使用easyX图形库的SetWorkingImage()函数设置画布,cleardevice()函数清空当前画布,setbkcolor()函数设置当前画布背景色,setlinecolor()函数设置画线颜色,最后使用line()函数进行画线操作,更加详细函数说明请参考easyX官方说明文档(https://docs.easyx.cn/zh-cn/):

  然后你就能得到一个这样的背景:

(二)食物绘制

  紧接着,将先前初始化的食物也显示出来,使用easyX图像库中的setfillcolor()函数填充圆形颜色,然后使用solidcircle()函数画圆:

  然后你就能得到以下这个食物:

(三)玩家角色绘制

  然后是玩家可操控的角色绘制,使用到的函数和上面的一样的,不再赘述:

  效果图如下:

(四)AI敌人绘制

  再来就是AI敌人了,依旧是上面那些函数:

  效果图如下所示:

(五)其他杂项

  最后,我们在玩家角色上方显示对应的长度以及分数,使用到easyX图形库中的settextcolor()函数改变文本颜色,swprintf_s()函数获取数据输入,setbkmode()函数设置当前设备图案填充和文字输出时的背景模式,settextstyle()函数设置字体,outtextxy()函数在指定位置显示文本:

  效果图如下:

  最后限制一下玩家视角,以防越界:

  至此,显示部分已全部准备就绪,我们需要将上面的内容全部显示在画布上,并且输出到窗口:

四.显示

  万事俱备,只欠东风,搞了这么久,我们终于可以运行看一下我们的成果了,我们直接在main函数中使用easyX图形库的initgraph()函数(该函数需要结合closepraph()函数使用)初始化画布,然后BeginBatchDraw()函数(该函数需要结合FlushBatchDraw()函数使用)开始绘图,不懂函数用法的建议查看easyX图形库官方文档,不在此赘述,以下是代码参考:

  在下一篇文章中,我们将会让AI敌人全部动起来,并且加入玩家键盘操控,得分机制等完善游戏体验。

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

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

相关文章

华为大咖说 | AI 是行业的未来, 还是另一个“元宇宙”?

本文作者:陈冠宏(华为网络MSSD首席顾问)全文约4497字,阅读约需10分钟 在本年度的517电信日上,中国电信高层在产品升级计划发布会中喊出“ALL in AI”战略,其震撼力让人瞩目。 自2022年11月OpenAI推出划时代…

全国各城市劳动力就业及收入状况数据, 2020-2022年,附高清可视化地图

基本信息. 数据名称: 全国各城市劳动力就业及收入状况数据 数据格式: Shp、excel 数据时间: 2020-2022年 数据几何类型: 面 数据坐标系: WGS84 数据来源:网络公开数据 数据可视化.

【SpringCloud学习笔记】RabbitMQ(中)

1. 交换机概述 前面《RabbitMQ上篇》我们使用SpringAMQP来演示如何用Java代码操作RabbitMQ,当时采用的是生产者直接将消息发布给队列,但是实际开发中不建议这么做,更加推荐生产者将消息发布到交换机(exchange),然后由exchange路由…

AI 大模型的赛点:通用与垂直之争

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

机器视觉:光源的类型以及主要参数

光源在机器视觉中起着决定性的作用,决定了视觉算法的复杂性,也决定了视觉系统的精度和稳定性。光源用于突出目标物体的特征,增加目标物体与背景的对比度,克服环境光线的干扰。光源的选择与打光方式在视觉系统的前期评估中非常重要…

【DIY飞控板PX4移植】BARO模块BMP388气压计的PCB硬件设计和PX4驱动配置

BARO模块BMP388气压计的PCB硬件设计和PX4驱动配置 BMP388简介硬件设计封装原理图PCB设计引脚选择问题 PX4驱动配置飞控板的配置文件夹结构default.px4board文件nuttx-config/nsh/defconfig文件nuttx-config/include/board.h文件src/board_config.h文件src/i2c.cpp文件init/rc.b…

Springboot防疫知识科普系统-计算机毕业设计源码03531

摘 要 如今计算机行业的发展极为快速,搭载于计算机软件运行的数据库管理系统在各行各业得到了广泛的运用,其在数据管理方面具有的准确性和高效性为大中小企业的日常运营提供了巨大的帮助。自从2020年新冠疫情爆发以来,防疫成了社会关注的重中…

LLM 大模型学习:数据预处理、模板设计以

在模型训练过程中,数据及数据处理是最为重要的工作之一。在当前模型训练流程趋于成熟的情况下,数据集的好坏,是决定了该次训练能否成功的最关键因素。 在上一篇中,我们提到了模型训练的基本原理是将文字转换索引再转换为对应的向…

开放式耳机哪个品牌质量比较好?2024高性价比机型推荐!

随着音乐技术的不断发展,开放式耳机已成为音乐发烧友们的另外一种选择。从最初的简单音质,到如今的高清解析,开放式耳机不断进化升级。音质纯净,佩戴舒适,无论是街头漫步还是家中放松时候,都能带给你身临其…

Arrays与Lambda

Arrays 默认排序: 按照指定规则排序: 细节: 底层原理: 代码实现:o1-o2:升序排列 o2-o1:降序排列 Lambda表达式:简化匿名内部类方法 函数式编程: 格式: 总结: …

Web应用安全测试-业务功能滥用(一)

Web应用安全测试-业务功能滥用(一) 1、短信定向转发 漏洞描述:短信接收人可任意指定 测试方法:拦截发送短信的请求,将手机号改为测试人员的手机号,测试是否可接收短信验证码。 风险分析:攻击…

动态防护开启教程和体验感受

动态防护是雷池 WAF 社区版在版本 [6.0.0] 中新增的一个功能,它属于站点高级防护的一部分。动态防护的主要作用是自动动态加密网站的 HTML 和 JavaScript 源码,目的是阻止爬虫和攻击自动化程序的分析。这项功能在 [6.0.0] 版本中标记为 BETA 版本&#x…

【Linux】进程_3

文章目录 五、进程3. 进程4. 进程状态 未完待续 五、进程 3. 进程 在当前,我们只能通过执行可执行程序来让操作系统帮我们启动进程,那我们如何使用代码来自己启动进程呢?我们可以使用 fork() 函数。作用是创建子进程。 我们创建一个程序来…

echarts学习:使用dataset管理数据

前言 在我们公司的组件库中有许多echarts图表相关的组件,这些组件在使用时,只需将图表数据以特定的格式传入组件中,十分方便。因此当我得知echarts 可以使用dataset集中管理数据时,我就决定自己一定要搞懂它,于是在最…

导入导出带下拉框模版(EasyExcel)

前言 项目进行到新的一个迭代了,赶了1周需求,接口终于处理完了。分享记录下迭代中处理导入、导出、下载模版功能的细节吧。 一、场景 EasyExcel(阿里)实现Excel数据处理三层表头,第二、三层表头动态数据根据第二、三层…

WebMvcConfigurer配置不当导致鉴权失败

最近同事说他们有个新需求,需要对接口进行加解密,所以他给项目配置了一个拦截器,但这个拦截器直接导致了每个接口鉴权失败,每次调用接口都是提示没有session信息。 公司内的所有java项目是公用同一套基础依赖,所以我也…

模具保护器 具体应用在哪些场所

模具监视器,被誉为模具的忠诚守护者,其应用领域遍布各类生产型设备,宛如一道坚实的防线,捍卫着模具的安全与生产的高效。以下是模具监视器在各领域所展现的卓越风采及其非凡功能: 在生产型设备的广阔天地里&#xff0c…

springboot美食菜谱分享平台优化版(源码+sql+论文报告)

绪论 1.1 研究意义 当今社会作为一个飞速的发展社会,网络已经完全渗入人们的生活, 网络信息已成为传播的第一大媒介, 可以毫不夸张说网络资源获取已逐步改变了人们以前的生活方式,网络已成为人们日常,休闲主要工具。…

加密软件有哪些优点?除了对文件加密这几点也很重要

加密软件用于保护数据安全,防止未经授权访问、数据泄露。通过使用加密算法来实现对数据的加密处理,确保数据在传输、存储过程中的机密性与完整性。 加密软件有哪些优点? 1、灵活控制:允许更灵活地配制加密控制条件,满…

夏季河湖防溺水新举措:青犀AI视频智能监控系统保障水域安全

近日一则新闻引起大众关注,有网友发布视频称,假期在逛西湖时,发现水面上“平躺”漂浮着一名游客在等待救援。在事发3分钟内,沿湖救生员成功将落水游客救到了岸边。 随着夏季的到来,雨水增多,各危险水域水位…