> # ♻️ 资源
> **大小:** 2.99MB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010584**](https://www.yuque.com/sxbn/ks/100010584)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87404311**](https://download.csdn.net/download/s1t16/87404311)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 贪吃蛇小游戏
## 一、实验内容
本次实验的主要内容为使用 C++ 编程语言,使用类的相关知识,构建出一个贪吃蛇小游戏,该小游戏应当具备有三种基础功能,并可根据 OJ 的提示,添加更多的加分项。
## 二、设计思路与功能描述
### 2.1 设计思路说明
#### 2.1.1 贪吃蛇游戏设计思路说明
由于本次实验希望采用面向对象的思想来进行程序的编写,而贪吃蛇游戏本身作为程序的出题,故应当先绘制出该程序的类图,再在该类图的基础上进行进一步程序的编写。
由于不同玩法的贪吃蛇之间略有不同,故在此我们首先对“入门版”的贪吃蛇类图进行说明。
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1713317318587-2c6ba065-60ab-4a88-93f1-4d7dfb1a7720.png#averageHue=%23f3f3f2&id=TYLZL&originHeight=626&originWidth=831&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
在本程序中,一场贪吃蛇游戏的进行应当是基于 Game 的某一子类展开的,在“入门版”中,这个子类为 Game1。
通过生成一个 Game1 实体,依次调用该实体的 init_game()方法和 init2()方法,可以在画布上画出初始的地图,并生成一个 snake 实体,同时藉由 refresh()方式生成一批 fruit 实体。
在初始化结束后,游戏可以正式开始,在游戏进行的过程中,通过 listen()方法对键盘进行实时监听,一旦用户执行了某个操作,就将操作值进行记录,在下一次调用 play()方法时,判断该值对下一步结果的影响,最后调用 draw()方法在画布上更新界面。
而当 play()方法发现下一步蛇会死亡时,会弹出“游戏结束”字体,最后调用 back()方法,回到初始菜单。
基于上述类图与大体流程描述,一下对各个类进行逐一详细描述:
①Game 类
该类是所有游戏类的父类,其主要功能是为各个子类提供一个统一的初始与结束模板,使得各个游戏类的调用、结束显得较为统一。
该类中的属性有:
1) width
int 类型,默认值为 800。该属性是新建画布时,所建立的画布宽度,在本次程序设计中,这一初始值没有进行过改变。
2)length
int 类型,默认值为 600。该属性与 width 类似,是初始新建立画布的高度,在本次程序设计中,也未进行过改变。
该类中的方法有:
1)init_game()
void 返回类型。该方法是在初始化地图前必须进行的调用,作用是生成指定规格的画布。
2)back()
void 返回类型。该方法是在游戏结束(包括按 Q 键退出、游戏失败录入姓名后退出等)后,生成了一个 Menu 类实体,重新回到主页面。
3)init2()、listen()
Game 类作为一个大的父类,还额外定义了 init2()和 listen()这两个虚函数,用于在编写子类时记得实现这两个重要的方法。
②Game1 类
该类是 Game 类的子类,也是其他 Game 类用以修改功能的基础,如何利用一个 Game1 类实体进行一场游戏已在前文叙述得较为清晰,故不在此赘述,这里将重点对 Game1 类中的众多属性和方法进行详细说明。
该类中的属性有:
1)map
char 型二维数组,规格为[40][30]。这一大小对应了整个贪吃蛇游戏界面的 40×30 的规格,这一属性也是 Game1 类中众多方法实现的基础。map 数组中存放的字符是游戏界面中,对应位置方格.jpg 图片文件名的第二个字符。例如'0'表示这里是空草坪,'7'表示这里是食物等,该数组中可存放的字符会随着后续功能的拓展而发生变化。
2)mes
char 型字符,默认值为'u'。mes 用于记录用户上一次对贪吃蛇发出的控制指令,其中'u'表示向上,'d'表示向下,'l'表示向左,'r'表示向右。
3)head
snake 型指针。由于贪吃蛇在本游戏中是以链表的形式存放的,即将每一个蛇段看作一个实体,所以为了能够对蛇进行控制,就需要掌握链表的表头——即蛇头的相关信息。
4)area
int 类型,初始值为 28×38。该值用于记录当前地图上还能放置水果的位置总数,以便随机生成新水果,并在后续功能中辅助判定地图是否已满。
5)length
int 类型,初始值为 3。该值用于记录当前蛇的长度,以便在 UI 界面进行显示。
6)life
int 类型,初始值为 1。该值用于记录蛇的生命数并在 UI 上显示,在 Game1 的游戏中这个值没有意义,但在后续加入的其他功能中,该值可以记录蛇的最多死亡次数。同时,当 life 变为 0 时,默认是游戏结束的标志,在这种情况下,play()方法将被禁用。
7)score
int 类型,初始值为 0。该值用于记录当前的得分并在 UI 上显示,同时该值也会在排行榜记录时被录入文件。
8)highscore
int 类型。该值在 init2()方法下的 getrecord()方法中被赋值,用于记录当前所完游戏种类在排行榜中的最高分,当 score 高于 highscore 时,highscore 在么一个游戏刻被刷新为 score 值。
该类中的方法有:
1)refresh()
void 返回类型。该方法在初始化地图与 fruit_num 为 0 时被调用,该方法可以在当前为空草坪(即 map 值为'0')的位置随机生成 1~5 个 fruit 实体,并同时刷新 fruit_num 值与 area 值。
2)draw()
void 返回类型。该方法在每一次操作执行结束后进行调用,该方法会逐一遍历 map 数组,使用 easyX 自带的图形辅助函数将每一个数组元素所代表的图片样式绘制在画布的指定位置。
3)getrecord()
void 返回类型。该方法在地图初始化时会被调用。该方法会通过遍历的方式逐行从 record.txt 中读取游戏记录,在游戏版本编号和当前游戏一致的记录中找寻得分最高的成绩赋值给 highscore 属性。
4)init2()
void 返回类型。该方法是重写了父类 Game 的方法所得,会在新建好画布之后进行调用。该方法会对 map 属性进行赋值,将整个地图的边界都赋值为“硬墙”(map 编号为'8'),同时调用 refresh()方法,生成一批食物,并将食物所在位置赋值为“食物”(map 编号为'7')。
同时该方法还会新建一个 snake 实体,其长度为 3,蛇头在[20][14]位置,蛇尾在[20][16]位置,并在 map 中对对应位置赋值。在完成了对 map 的初始化赋值后,调用 draw()方法,绘制初始界面。
5)play()
bool 返回类型。该方法用于处理在下一个游戏刻时游戏发生变化的逻辑,其过程是先通过 snake 类的 next_pos()方法,获取到下一个游戏刻蛇头的位置,然后对该位置进行判定。
如果该位置是蛇尾以外的蛇身、硬墙,则游戏结束,弹出提示语,同时将 life 归零,禁用 play()方法,恒返回 false;若该位置是果实,则调用该 snake 的 eat()方法,同时让 length 属性自增 1,返回 true;若该位置是空草坪,则 调用 snake 的 move()方法,�
没有合适的资源?快使用搜索试试~ 我知道了~
基于 QT(C++) 开发的贪吃蛇小游戏【100010584】
共69个文件
jpg:37个
tlog:13个
pdb:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 9 浏览量
2023-01-30
15:19:10
上传
评论 1
收藏 2.98MB ZIP 举报
温馨提示
详情介绍:https://www.yuque.com/sxbn/ks/100010584 本次实验的主要内容为使用 C++ 编程语言,使用类的相关知识,构建出一个贪吃蛇小游戏,该小游戏应当具备有三种基础功能,并可根据 OJ 的提示,添加更多的加分项。
资源推荐
资源详情
资源评论
收起资源包目录
100010584-基于 QT(C++) 开发的贪吃蛇小游戏.zip (69个子文件)
snake
LICENSE 11KB
贪吃蛇大作业
Big_ZuoYe
Big_ZuoYe
_m.jpg 4KB
_{.jpg 4KB
_9.jpg 4KB
_c.jpg 4KB
_k.jpg 4KB
first.cpp 73KB
_g.jpg 4KB
Thumbs.db 47KB
_o.jpg 4KB
_u.jpg 4KB
_b.jpg 4KB
Big_ZuoYe.vcxproj 6KB
_5.jpg 4KB
_y.jpg 4KB
_0.jpg 3KB
Big_ZuoYe.vcxproj.filters 929B
_q.jpg 4KB
_2.jpg 4KB
_4.jpg 4KB
_f.jpg 4KB
Release
vc141.pdb 460KB
Big_ZuoYe.log 607B
Big_ZuoYe.tlog
CL.write.1.tlog 348B
Big_ZuoYe.lastbuildstate 206B
Big_ZuoYe.write.1u.tlog 686B
CL.command.1.tlog 652B
link.command.1.tlog 1KB
link.read.1.tlog 4KB
link.write.1.tlog 340B
CL.read.1.tlog 41KB
_p.jpg 4KB
_i.jpg 3KB
_e.jpg 4KB
_1.jpg 4KB
_7.jpg 4KB
Big_ZuoYe.vcxproj.user 162B
_z.jpg 4KB
_t.jpg 4KB
_x.jpg 4KB
_6.jpg 4KB
_3.jpg 4KB
_l.jpg 4KB
_v.jpg 4KB
_d.jpg 4KB
_a.jpg 4KB
record.txt 197B
_8.jpg 4KB
_s.jpg 4KB
Client.h 28KB
_r.jpg 4KB
_h.jpg 4KB
Debug
vc141.pdb 572KB
vc141.idb 611KB
Big_ZuoYe.log 2KB
Big_ZuoYe.tlog
CL.write.1.tlog 1KB
Big_ZuoYe.lastbuildstate 258B
CL.command.1.tlog 1KB
link.command.1.tlog 2KB
link.read.1.tlog 7KB
link.write.1.tlog 1KB
CL.read.1.tlog 82KB
_w.jpg 4KB
_n.jpg 4KB
_j.jpg 3KB
Big_ZuoYe.sln 1KB
高程大作业.docx 3.16MB
readme.txt 518B
README.md 26KB
共 69 条
- 1
资源评论
- JerryGreen2023-12-09资源内容详尽,对我有使用价值,谢谢资源主的分享。
- m0_739120032023-06-05终于找到了超赞的宝藏资源,果断冲冲冲,支持!
神仙别闹
- 粉丝: 3773
- 资源: 7469
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功