实验五数据结构综合应用 20162310

分析系统架构

Sprite精灵类

  • ISprite精灵类是所有类的父类

    CombatAircraft战斗机类

  • 首先确保战斗机完全位于Canvas范围内,每隔7帧发射单发黄色子弹。
    protected void beforeDraw(Canvas canvas, Paint paint, GameView gameView) {
        if(!isDestroyed()){
            //确保战斗机完全位于Canvas范围内
            validatePosition(canvas);
    
            //每隔7帧发射子弹
            if(getFrame() % 7 == 0){
                fight(gameView);
            }
        }

战斗机如果被击中,执行爆炸效果,具体来说,首先隐藏战斗机,然后创建爆炸效果,爆炸用28帧渲染完成,爆炸效果完全渲染完成后,爆炸效果消失。然后战斗机会进入闪烁模式,战斗机闪烁一定次数后销毁。

        //在飞机当前还没有被击中时,要判断是否将要被敌机击中
        if(!collide){
            List<EnemyPlane> enemies = gameView.getAliveEnemyPlanes();
            for(EnemyPlane enemyPlane : enemies){
                Point p = getCollidePointWithOther(enemyPlane);
                if(p != null){
                 //p为战斗机与敌机的碰撞点,如果p不为null,则表明战斗机被敌机击中
                    explode(gameView);
                    break;
                }
            }
        }

        //beginFlushFrame初始值为0,表示没有进入闪烁模式
        //如果beginFlushFrame大于0,表示要在第如果beginFlushFrame帧进入闪烁模式
        if(beginFlushFrame > 0){
            long frame = getFrame();
            //如果当前帧数大于等于beginFlushFrame,才表示战斗机进入销毁前的闪烁状态
            if(frame >= beginFlushFrame){
                if((frame - beginFlushFrame) % flushFrequency == 0){
                    boolean visible = getVisibility();
                    setVisibility(!visible);
                    flushTime++;
                    if(flushTime >= maxFlushTime){
                        //如果战斗机闪烁的次数超过了最大的闪烁次数,那么销毁战斗机
                        destroy();
                        //Game.gameOver();
                    }
                }
            }

AutolSprite

  • AutoISprite是一个走直线的精灵,其位置只能直上直下,且向下为正。在y轴方向移动speed像素,检查Sprite是否超出了Canvas的范围,如果超出,则销毁Sprite。其中RectF为坐标类,判断位置。

    //检查Sprite是否超出了Canvas的范围,如果超出,则销毁Sprite
            RectF canvasRecF = new RectF(0, 0, canvas.getWidth(), canvas.getHeight());
            RectF spriteRecF = getRectF();
            if(!RectF.intersects(canvasRecF, spriteRecF)){
                destroy();

    敌机类EnemyPlane

  • 敌机类,从上向下沿直线运动。设置一个敌机的抗打击能力(通俗说是血量)和打一个敌机的得分。敌机在绘制完成后要判断是否被子弹打中,判断方法为判断敌机在坐标轴上是否与子弹相交。若敌机已经没有能量了,执行爆炸效果。
    //创建爆炸效果,爆炸由敌机中心点开始爆炸
        float centerX = getX() + getWidth() / 2;   // 得到敌机中心坐标
        float centerY = getY() + getHeight() / 2;
        Bitmap bitmap = gameView.getExplosionBitmap();
        Explosion explosion = new Explosion(bitmap);
        explosion.centerTo(centerX, centerY);
        gameView.addSprite(explosion);
    
        //创建爆炸效果完成后,向GameView中添加得分并销毁敌机
        gameView.addScore(value);
        destroy();

    爆炸类Explosion

  • 爆炸效果类Explosion,可以显示动态的爆炸效果。爆炸效果由14个片段组成,每个爆炸片段绘制2帧。当绘制完所有的爆炸片段后,销毁爆炸效果。得到绘制完整爆炸效果需要的帧数,即28帧。
    protected void afterDraw(Canvas canvas, Paint paint, GameView gameView) {
        if(!isDestroyed()){
            if(getFrame() % explodeFrequency == 0){
                //level自加1,用于绘制下个爆炸片段
                level++;
                if(level >= segment){
                    //当绘制完所有的爆炸片段后,销毁爆炸效果
                    destroy();
                }
            }
        }

    编译、运行、测试系统

第一步,将码云上的代码克隆下来

第二步,编译,运行

修改系统

分析数据结构,排序,查找算法的应用

List线性表

  • 主要使用了线性表来获取处于活动状态的敌机、存储所有的精灵等。

    public List<EnemyPlane> getAliveEnemyPlanes(){
    List<EnemyPlane> enemyPlanes = new ArrayList<EnemyPlane>();
    for(ISprite s : sprites){
        if(!s.isDestroyed() && s instanceof EnemyPlane){
            EnemyPlane sprite = (EnemyPlane)s;
            enemyPlanes.add(sprite);
        }
    }
    return enemyPlanes;
    }
  • 将所有敌机存储在list中,并进行for循环查找是否与战斗机有交点。若有交点则战斗机摧毁。
     List<EnemyPlane> enemies = gameView.getAliveEnemyPlanes();
            for(EnemyPlane enemyPlane : enemies){
                Point p = getCollidePointWithOther(enemyPlane);
                if(p != null){
                    //p为战斗机与敌机的碰撞点,如果p不为null,则表明战斗机被敌机击中
                    explode(gameView);
                    break;
                }
            }
时间: 2024-11-06 11:42:35

实验五数据结构综合应用 20162310的相关文章

实验五 数据结构综合应用

20162317袁逸灏 实验五 数据结构综合应用 实验内容 实验五-1-编译.运行.测试 git clone 小组项目 编译项目,提交编译成功截图(全屏,要有学号信息) 提交运行过程中的截图(全屏,要有学号信息) 实验五-2-代码修改 在小组项目中,找一个合适的地方添加一个按钮,点击显示自己的学号 提交运行截图(全屏,要有学号信息) 实验要求 分析系统架构 编译.运行.测试系统 修改系统 分析数据结构.排序.查找算法的应用 实验过程 实验五-1-编译.运行.测试 这个实验考察的是学生对于代码项目

实验五 数据结构综合应用 20162305

实验五 数据结构综合应用 20162305 0 分析系统架构 我们本次做的是一个飞机大战的游戏,本次游戏是想让使用者通过操控一个飞机进行击毁敌机和躲避敌机的操作.这个APP总体是基于精灵类ISpirte实现了战斗机类,走直线的精灵类和爆炸类,这些类构成了整个APP的整体架构,所有的功能都集中在这几个类中. 战斗机类CombatAircraft: 战斗机类,定义一个由玩家操控的战斗机,这个战斗机每隔7帧发射子弹,并且设定方法确定战斗机一直处在界面中.战斗机如果被击中,执行爆炸效果.具体来说,首先隐

20162328蔡文琛 实验五 数据结构综合应用

实验五:数据结构综合应用 课程:程序设计与数据结构 班级: 1623 姓名: 蔡文琛 学号:20162328 指导教师:娄嘉鹏 王志强 实验日期:12月15日 实验密级: 非密级 预习程度: 已预习 必修/选修: 必修 实验名称: 数据结构综合应用 实验内容: 1.分析系统架构 2.编译.运行.测试系统 3.修改系统 4.分析数据结构.排序.查找算法的应用 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 完成实验.撰写实验报告,

20162308 实验五 数据结构综合应用

style: ocean 实验四 -图的实现与应用 实验内容 实验五-1-编译.运行.测试 1 git clone 小组项目.2 编译项目,提交编译成功截图(全屏,要有学号信息).3 提交运行过程中的截图(全屏,要有学号信息). 实验五-2-代码修改 1. 在小组项目中,找一个合适的地方添加一个按钮,点击显示自己的学号.2. 提交运行截图(全屏,要有学号信息).3. 在项目中找一个界面,自己复制一份命名为XXXbak,修改代码,替换原来的部分.4. 提交运行截图(全屏,要有学号信息). 实验五-

20162303 实验五 数据结构综合应用

北京电子科技学院(BESTI) 实 验 报 告 课程:程序设计与数据结构 班级: 1623 姓名: 石亚鑫 学号:20162303 成绩: 2分 指导教师:娄嘉鹏 王志强 实验日期:12月15日 实验密级: 非密级 预习程度: 已预习 实验时间:10:00-12:00 必修/选修: 必修 实验序号: cs_03 实验内容 实验 分析系统架构 首先分析一下各部分代码 card类 card是用来显示2048游戏中的数字卡片,首先设定的是card的背景 /* * LayoutParams类也只是简单的

20162320刘先润大二 实验五 数据结构综合应用

一.分析系统架构 二.编译.运行.测试系统 1.首先进入团队项目的码云? Java演绎法?,点击克隆/下载按钮下的复制 2.打开Android Studio,点击VCS列表下的Git,然后点击clone 3.将复制的地址粘贴到Git Repository URL下,然后选择克隆路径和名称,点击clone,等待克隆完成就相当于编译成功 4.点击run并配置相应的虚拟手机设备,运行截图如下 三.修改系统 1.首先打开主界面的xml文件,进入design模式,从左边添加一个按钮进入任意位置,查看其id

20162302 实验五《数据结构综合应用》实验报告

实 验 报 告 课程:程序设计与数据结构 姓名:杨京典 班级:1623 学号:20162302 实验名称:数据结构综合应用 实验器材:装有IdeaU的联想拯救者15ISK 实验目的与要求: 1.编译运行测试 2.代码修改 3.代码分析 实验内容.步骤与体会: 实验内容: 编译运行测试 点击红色圈出来的地方 选择虚拟机也可以选择连在usb上的物理机,在这里就选择虚拟机 运行成功 测试按下方向键会向不同方向移动,并记录按键步数 把箱子推到指定位置会出现过关画面并播放一小段音乐 代码修改 增加按键效果

数据结构实验报告-实验五 查找

实验五   查找   l  实验目的 1. 查找的基本概念 掌握在数组上进行各种查找的方法和算法. 深刻理解各种方法的特点,并能灵活运用. 加深对查找的理解,逐步培养解决实际问题的能力. l  实验内容 1.查找的基本概念 (一)基础题 1.编写各种查找方法的基本操作函数: (1)search1(int *k,int n,int key)无序线性表的顺序查找: (2)search2(int *k,int n,int key)有序线性表的顺序查找: (3)bin_search(int *k,int

20172329 2017-2018-2 《程序设计与数据结构》实验五报告

这是这学期最后一次实验了,也是学到了很多东西,希望自己可以可以善始善终,加油! 让我们开始这一篇博客吧! 20172329 2017-2018-2 <程序设计与数据结构>实验五报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 王文彬 学号:20172329 实验教师:王志强 实验日期:2018年6月11日 必修/选修: 必修 一.实验内容 1.网络编程与安全-1 两人一组结对编程: a. 参考http://www.cnblogs.com/rocedu/p/6766748