# **贪吃蛇大作业**
# **一、实验内容**
` `本次实验的主要内容为使用C++编程语言,使用类的相关知识,构建出一个贪吃蛇小游戏,该小游戏应当具备有三种基础功能,并可根据OJ的提示,添加更多的加分项。
# **二、设计思路与功能描述**
## **2.1 设计思路说明**
### **2.1.1 贪吃蛇游戏设计思路说明**
` `由于本次实验希望采用面向对象的思想来进行程序的编写,而贪吃蛇游戏本身作为程序的出题,故应当先绘制出该程序的类图,再在该类图的基础上进行进一步程序的编写。
` `由于不同玩法的贪吃蛇之间略有不同,故在此我们首先对“入门版”的贪吃蛇类图进行说明。
![](img/Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.001.png)
` `在本程序中,一场贪吃蛇游戏的进行应当是基于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()方法,返回true;
` `返回值适用于标识游戏是否能够进行下去的判断依据。
` `6) record()
` `void返回类型。该方法用于在游戏结束或用户自行退出时调用,弹出提示语要求用户输入姓名,同时对用户输入的内容进行实时显示。当用户输入完毕后,在record.txt的末尾追加本次游戏的版本编号、用户名、成绩。
` `7) drawui()
` `void返回类型。该方法用于在每一次draw方法调用后,紧接着调用该方法绘制页面下部的所有UI提示交互。其实现逻辑是使用int2char函数,将蛇的长度、生命数、分数等存储为int类型的信息与提示语一并合成为一个char数组。然后再在指定的位置输出这些提示字符串。
` `8) listen()
` `void返回
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++开发的(GUI)贪吃蛇大作战(高级程序课设)【100013128】
共86个文件
jpg:37个
png:17个
tlog:13个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 104 浏览量
2023-07-28
14:12:28
上传
评论
收藏 2.78MB ZIP 举报
温馨提示
本次实验的主要内容为使用C++编程语言,使用类的相关知识,构建出一个贪吃蛇小游戏,该小游戏应当具备有三种基础功能,并可根据OJ的提示,添加更多的加分项。
资源推荐
资源详情
资源评论
收起资源包目录
100013128-基于C++开发的(GUI)贪吃蛇大作战(高级程序课设).zip (86个子文件)
greedsnake
LICENSE 11KB
img
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.013.png 117KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.004.png 196KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.010.png 215KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.008.png 216KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.006.png 210KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.001.png 121KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.016.png 30KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.009.png 27KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.011.png 311KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.014.png 192KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.017.png 13KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.005.png 198KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.002.png 58KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.015.png 55KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.007.png 193KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.012.png 204KB
Aspose.Words.a9e7713a-8b94-404e-a6d2-2e92fc06907b.003.png 73KB
README.md 102KB
project
Big_ZuoYe
Big_ZuoYe
_m.jpg 4KB
_{.jpg 4KB
_9.jpg 4KB
_c.jpg 4KB
_k.jpg 4KB
first.cpp 78KB
_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 950B
_q.jpg 4KB
_2.jpg 4KB
_4.jpg 4KB
_f.jpg 4KB
Release
vc141.pdb 460KB
first.obj 1.35MB
Big_ZuoYe.log 616B
Big_ZuoYe.tlog
CL.write.1.tlog 348B
Big_ZuoYe.lastbuildstate 208B
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 165B
_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 29KB
_r.jpg 4KB
_h.jpg 4KB
Debug
vc141.pdb 572KB
first.obj 619KB
vc141.idb 611KB
Big_ZuoYe.log 2KB
Big_ZuoYe.tlog
CL.write.1.tlog 1KB
Big_ZuoYe.lastbuildstate 260B
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
共 86 条
- 1
资源评论
神仙别闹
- 粉丝: 2708
- 资源: 7670
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功