实验五 数据结构综合应用 20162305
0 分析系统架构
我们本次做的是一个飞机大战的游戏,本次游戏是想让使用者通过操控一个飞机进行击毁敌机和躲避敌机的操作。这个APP总体是基于精灵类ISpirte实现了战斗机类,走直线的精灵类和爆炸类,这些类构成了整个APP的整体架构,所有的功能都集中在这几个类中。
战斗机类CombatAircraft:
战斗机类,定义一个由玩家操控的战斗机,这个战斗机每隔7帧发射子弹,并且设定方法确定战斗机一直处在界面中。战斗机如果被击中,执行爆炸效果。具体来说,首先隐藏战斗机,然后创建爆炸效果,爆炸用28帧渲染完成,爆炸效果完全渲染完成后,爆炸效果消失。然后战斗机会进入闪烁模式,战斗机闪烁一定次数(5次)后销毁。在飞机当前还没有被击中时,要判断是否将要被敌机击中。通过定义各种参数和判断实现以上功能,设立战斗机类。
走直线的精灵类:
走直线的精灵类,这个类是下面要定义的敌机类和子弹类的父类。在这个类中,定义精灵的移动速度和方向,在y轴方向移动一定的像素位置。再检查精灵是否超出界面范围,如果超出了范围,则销毁精灵。
敌机类(EnemyPlane):定义敌机的抗击打能力和击毁一个敌机得到的分数,设定相应的参数。敌机需要一个方法来判断是否被击中,判断子弹和敌机是否有交点,有的话则敌机中弹。当敌机没有能量了以后执行爆炸效果,爆炸之后销毁敌机。小敌机类是敌机类的子类,继承敌机类的方法,设定小敌机的抗击打能力和分数。
子弹类:走直线的精灵类中的子类,设定速度方向为负,让子弹在界面中向上移动。
爆炸类:
爆炸效果由14个片段组成,最开始处于爆炸的第0片段,每个爆炸片段绘制2帧。获取爆炸位置和宽度,爆炸的片段自加1,用于绘制下个爆炸片段。当绘制完所有的爆炸片段后,销毁爆炸效果。得到绘制完整爆炸效果需要的帧数,即28帧
游戏界面:在游戏的开始界面中,我们定义了三个按钮:开始游戏、规则介绍和开发团队。开始游戏进入游戏界面,规则介绍部分对这款小游戏的规则进行介绍,开发团队按钮介绍本团队的成员及其分工。
1 编译、运行、测试系统
编译代码:在从码云上克隆下来代码后,我发现一直显示错误,显示的是Gradle project sync failed。后来在网上我找到了相关问题的解决办法,重新下载了新的压缩包放在了指定的位置,再更新Android Studio,解决了这个问题
运行和测试
2 修改系统
我在之前的开始界面的基础上,又添加了一个按钮,点进这个按钮,进入一个新的界面,在这个界面中我加入了自己的学号信息和一个时钟。
3 分析数据结构、排序、查找算法的应用
List的应用
在GameView中,定义了两个list类对象,sprites和spritesNeedAdded。通过这两个list来存放精灵类对象,实现敌机的生成,子弹的生成。
生成敌机
//生成随机的Sprite
private void createRandomSprites(int canvasWidth){
ISprite sprite = null;
int speed = 2;
//callTime表示createRandomSprites方法被调用的次数
int callTime = Math.round(frame / 30);
//发送敌机
sprite = new SmallEnemyPlane(bitmaps.get(2));
if(sprite != null){
float spriteWidth = sprite.getWidth();
float spriteHeight = sprite.getHeight();
float x = (float)((canvasWidth - spriteWidth)*Math.random());
float y = -spriteHeight;
sprite.setX(x);
sprite.setY(y);
if(sprite instanceof AutoISprite){
AutoISprite autoSprite = (AutoISprite)sprite;
autoSprite.setSpeed(Math.round(speed+Math.random()*2-1));
}
addSprite(sprite);
}
}
4 实验体会
这次我们小组合力开发出了一个app,在开发过程中我们遇到了很多问题,不论是开发流程上还是技术方面上我们都遇到了很多问题。我们组里的同学互相帮助,感谢马平川同学对我在代码上的指导,让我学到了很多知识,更要感谢张师瑜组长的合理规划和安排。我在这次项目中负责软件测试和统筹博客内容,这些对我来说都是挑战,更是收获。