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

一.游戏逻辑概述

  游戏完成图如图下所示:

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

  • 场景中有玩家可以操纵的初始角色-贪吃蛇
  • 场景中有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敌人全部动起来,并且加入玩家键盘操控,得分机制等完善游戏体验。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于ResNet-18的简单分类(新手,而且网络效果不咋滴,就是学个流程)

引言 先看问题: 我手边有一数据集,然后我想分分类!~~ 咳咳,最近刚做了一个:训练集有1143张,分为5类,里面图片是打乱的。测试集有248张,想把它分分类看看咋样。 再看一下效果: …

万字长文爆肝Spring(一)

Spring_day01 今日目标 掌握Spring相关概念完成IOC/DI的入门案例编写掌握IOC的相关配置与使用掌握DI的相关配置与使用 1,课程介绍 对于一门新技术,我们需要从为什么要学、学什么以及怎么学这三个方向入手来学习。那对于Spring来说: 1.1 为什么要学? …

Python 使用 Tkinter库 设置 tkinter ttk 框架的背景颜色

Tkinter 设置 tkinter ttk 框架的背景颜色 在本文中,我们将介绍如何使用 Tkinter 在 tkinter ttk 框架中设置背景颜色。Tkinter 是 Python 中常用的 GUI 工具包,ttk 则是 Tkinter 中的一个模块,提供了一套更加现代化的控件。 Tkinter 简介 …

C4D如何预览动画?C4D动画云渲染助力

C4D是一款功能丰富的3D设计软件,以其快速的预览渲染和多样的渲染插件而闻名,其卓越的渲染效果赢得了CG行业专业人士的广泛赞誉。尽管C4D的渲染功能十分强大,但对于初学者而言,其复杂的渲染设置可能会带来一些挑战。本文一起来看看…

Linux——ansible的应用

要让ansible管理业务里的主机 1.得先知道,有哪些主机 用IP地址,用主机名 2.知道了有哪些主机以后,精细、细分管理 主机要用某些办法,分组管理 在ansible里,要用一个东西:清单->inventory inventory …

Tensorflow入门实战 T04-猴痘识别

本篇文章主要:tensorflow 运行环境:本地cpu 运行epoch:50 1、tensorflow官网 tensorflow的官网教程。初学者的 TensorFlow 2.0 教程 | TensorFlow Core 官网上有图像分类的相关详细描述还有代码示例。 2、完整代码展示 from tensorflo…

探索Napier:Kotlin Multiplatform的日志记录库

探索Napier:Kotlin Multiplatform的日志记录库 在现代软件开发中,日志记录是不可或缺的部分,它帮助开发者追踪应用的行为和调试问题。对于Kotlin Multiplatform项目而言,能够在多个平台上统一日志记录的方法显得尤为重要。Napier…

远程开发端口转发

应用推荐场景: 1.服务器跑后台,本地出前端应用。 比如Stable Diffusion的大模型打标应用。 2.Docker容器服务器。 对于本地服务想要转出去,跑出来前端。该项能克服虚拟机的端口与ip访问问题。 正文: 涉及的软件: …

Petalinux由于网络原因产生的编译错误(3)-qemu-xilinx-system-native 失败

1 获取qemu-xilinx-system-native 失败 编译时遇到qemu-xilinx-system-native 包获取失败,如下图所示: 解决这种错误方法如下: 进入Petalinux 工程,编辑工程下的 project-spec/meta-user/conf/petalinuxbsp.conf 文件&#xff0…

苹果AI来了,ios18史诗级发布

今天凌晨1点,苹果举行了WWDC开发者大会,正式发布了 全新iOS 18、iPadOS 18、watchOS 11、tvOS 18、macOS 等以及Apple Intelligence的个人化智能系统 苏音给大家汇总下,ios18的更新内容以及苹果的AI。 本次更新,官方带来的title…

小白如何入门编程?零基础入门指南,助你一步步成为编程达人!

零基础编程入门先学什么?编程语言有几百种,我们应该怎么选择。想学习编程,加入互联网行业,哪一个更有前途?在小白学习编程会有各种各样的问题,今天小编我就来为你解答。 一、程序员的类别 程序员从事的人…

GenICam标准(一)

系列文章目录 GenICam标准(一) GenICam标准(二) 文章目录 系列文章目录1、概述GenApiGenTLSFNC(标准特征命名约定)CLProtocolGenCP 参考 emva 1、概述 如今的数码摄相机包含了很多的功能,而不仅…

数据预处理——调整方差、标准化、归一化(Matlab、python)

对数据的预处理: (a)、调整数据的方差; (b)、标准化:将数据标准化为具有零均值和单位方差;(均值方差归一化(Standardization)) (c)、最值归一化,也称为离差标准化,是对原始数据的…

MultiTrust:首个综合统一的多模态信任度基准(上)

随着我们迈向人工通用智能(AGI)的时代,出现了开创性的大语言模型(LLMs)。凭借它们强大的语言理解和推理能力,已经无缝地将其他模态(例如视觉)整合到LLMs中,以理解不同的输…

JavaScript 基础 - 第2天【函数】

文章目录 前言一、声明和调用1、声明(定义)2、调用 二、参数三、返回值四、作用域1、全局作用域2、局部作用域 五、匿名函数1、函数表达式2、立即执行函数 前言 理解封装的意义,能够通过函数的声明实现逻辑的封装,知道对象数据类…

遗传算法求解车间调度问题(附python代码)

背景介绍 车间调度问题(Job Shop Scheduling Problem, JSSP)是一类经典的组合优化问题,它在制造业和生产管理中有着广泛的应用。JSSP 的目标是对车间中的一系列作业进行排程,以使得作业在不同机器上的加工顺序是最优的&#xff0…

重生之 SpringBoot3 入门保姆级学习(21、场景整合 Redis 定制对象序列化存储)

重生之 SpringBoot3 入门保姆级学习(21、场景整合 Redis 定制对象序列化存储) 6.4 定制化 6.4 定制化 需求:保存一个 Person 对象到 redis 创建 Person 类 package com.zhong.redis.entity;import lombok.AllArgsConstructor; import lombok…

为什么Mamba模型被拒?

Mamba模型问世 最近,国际学习表征会议(ICLR)公布了2024年会议的最终决定,其中引起广泛关注的是一个名为Mamba的模型。这个模型最初被认为是对抗著名的Transformer架构进行语言建模任务的主要竞争者,但最终被拒绝&…

HTML制作一个超迷人的科技之眼

大家好,今天制作一个科技之眼! 先看具体效果: 要制作一个超迷人的“科技之眼”网页效果,你可以结合HTML、CSS和JavaScript来实现。下面是一个简单的步骤指南和示例代码,帮助你开始这个项目。 1. 设计概念 首先&…

Nginx 搭建 lnmp

一.编译安装Nginx 1.新建用户前期准备 官网下载nginx安装包 https://nginx.org/en/download.html yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel #安装依赖包 useradd -M -s /sbin/nologin nginx #新建nginx用户便于管理 2.切换到/opt…