逆向软件设计与开发——贪吃蛇小游戏
一、
本次软件开发与创新课程设计实验的内容是逆向软件设计和开发能力。需要找一个已有的软件项目,进行阅读分析,找出其软件尚存的缺陷,改进其并做二次开发。
为此我在CSDN上找了一个小游戏--贪吃蛇进行逆向软件设计和开发能力的实验。
二、过程
此项目比较简单,并不需要进行什么配置,将源码下载到本地即可在IDEA中跑出来。


对该项目进行阅读分析后可知:
1.该小游戏虽然简单但是是一个比较成熟的项目,游戏内容设计的完善且好。包括:
(1)设置了三种游戏难度(简单、困难和地狱)依据小蛇移动速度快慢实现。 (2)设置了两种模式(穿墙模式和撞墙模式)依据是否设置边界条件实现。
(3)设置游戏的吃到食物的个数计数和分数计数。(4)设置了游戏失败的判断(在撞墙模式下撞墙和蛇头碰到蛇的身体)。
(5)设置了图片的读入使整个游戏界面更加美观、同时设置了背景音乐。
2.该项目总含三个类:Snakefrm(主类)、SnakePanel(游戏主体)、Music(音乐)。
(1)Snakefrm(主类):创建贪吃蛇游戏的主窗口
(2)SnakePanel(游戏主体):游戏类构建和实现游戏的各种功能,大致包括1、图片导入 2、按键添加 3、游戏模式4、地图构建 5、蛇的动态实现 6、游戏状态(死亡判断)
(3)Music(音乐):背景音乐
三、改进
由于这个项目总体上设计的十分完善,加上目前本人水平的局限,因此在找出其项目上的缺陷并进行改进这一步骤上给我造成了很大的困扰。
终于在借鉴其他csdn关于贪吃蛇小游戏的文章中,发现该项目在食物的设计上存在缺陷:未考虑食物和蛇会出现同一坐标的情况。其原因在于:由于食物在地图中是随机出现的,而蛇本身也是处于地图中的,这就导致有可能蛇和食物会重合在一起。
于是再次阅读源码,在合适的地方插入方法:

其中 i值记录的是蛇的长度,也就是蛇所占的方格数。snakex[]和snakey[]数组代表着蛇每一个方格的x坐标和y坐标。如果生成的食物的坐标和蛇的坐标数组中存在相同,则重新生成食物坐标,避免上述情况。
以下是改进后的功能结构图。

改进之后食物的出现变得更加的合理,能时刻保证食物的出现不会和蛇重合。
四、总结
这是我第一次尝试进行逆向软件设计与开发。首先是体验并且清晰了这一整个流程,其次是在实验过程中收获颇丰。这个小游戏是在csdn上找的,比较完善成熟,因此其中有很多可以供我学习借鉴的地方,例如创建音乐类Music并继承Thread线程类,从而可以实现多个音乐和游戏的线程同步进行,当然也包括其他很多的小细节。此外,在阅读他人代码的时候,除了可以学习到新的知识点还可以学习他人解决某个问题的算法思想、设计一个项目的总体思路。
在整个逆向软件设计与开发的过程中,我体会到最深的便是“三人行,必有我师焉”。除了自己单方面的学习编程、软件类的知识之外,通过阅读他人的代码,学习他人的长处,思考其中是否有更好的实现方法也不失为一种好的学习方式。
总之,这次实验收获颇丰,在以后的学习过程中我也会经常采取这样的方式。

浙公网安备 33010602011771号