2017-2018-1 JaWorld 团队作业--冲刺2 (20162314)

总体架构

  • 我们本次团队项目设定为基于Android系统Java架构下的打飞机小游戏

  • 游戏中所有模型的原型设定是精灵,因此不管是敌机还是战斗机都是精灵类,精灵类是所有类的父类

  • 精灵类(Sprite)下有三个子类,一个是战斗机类,也就是玩家;一个是走直线的精灵类(AutoSprite),也就是对敌机的统称;还有一个是爆炸类,指的是敌机或战斗机被摧毁。

  • 我所负责的是精灵类(Sprite)下的走直线的精灵类(AutoSprite)下的子弹类(Bullet)

精灵类(Sprite)

精灵类是所有其他用于绘制(frame)的类的基类。

整个游戏界面是建立在一张巨大的位图(Bitmap)上的,它的长度和宽度是设定就好的,位图由像素构成,基于像素即可建立笛卡尔直角坐标系。因此战斗机开始,走过,被摧毁爆炸的位置就可以确定,我们通过战斗机走过的距离来为玩家记成绩。

宽度变量是getWidth,高度是getHeight,x和y分别表示战斗机初始位置的横纵坐标,offsetX和offsetY分别表示战斗机爆炸时的位置的横纵坐标,由此可以计算出战斗机走过的总距离。

其中,战斗机的横坐标x到位图x坐标中心点的距离显然是x减去宽度的一半,同理y也是减去高度的一半。

 public void centerTo(float centerX, float centerY) {
float w = getWidth();
float h = getHeight();
x = centerX - w / 2;
y = centerY - h / 2;
}

x是战斗机左边的长度,y是战斗机的高度,那么右边就是x加上宽度,到底部的长度就是y加上高度。

public RectF getRectF() {
float left = x;
float top = y;
float right = left + getWidth();
float bottom = top + getHeight();
RectF rectF = new RectF( left, top, right, bottom );
return rectF;
}

有了java架构下的算法后,接下来的就是把背后的算法表现出来,也就是绘制出来,我们称画(draw)到布(Canvas)上。

Draw需要三部分,游戏开始前的状态beforeDraw,游戏进行中的onDraw和游戏结束后的afterDraw。每部分都需要三要素布(Canvas),Paint(漆)和游戏视图(gameView)。

public final void draw(Canvas canvas, Paint paint, GameView gameView) {
frame++;
beforeDraw( canvas, paint, gameView );
onDraw( canvas, paint, gameView );
afterDraw( canvas, paint, gameView );
}

onDraw需要三个判定条件以确定是在游戏中,战斗机未被摧毁(!destroyed,位图bitmap不为空null,可见状态getvisible)

Draw将精灵Sprite绘制到布Canvas上。

摧毁类包含敌机被摧毁和战斗机被摧毁,摧毁后则位图bitmap为空。

public boolean isDestroyed() {
return destroyed;
} public int getFrame() {
return frame;
}

走直线的精灵类(AutoSprite)

敌机类,只能沿直线直上直下。

其速度为每帧移动的像素数,敌机的速度设定为2,即每帧移动的像素数==2.

战斗机的移动move量=速度speed*Time,Time=gameView。

public class AutoISprite extends ISprite {
//每帧移动的像素数,以向下为正
private float speed = 2; public AutoISprite(Bitmap bitmap) {
super( bitmap );
} public void setSpeed(float speed) {
this.speed = speed;
} public float getSpeed() {
return speed;
}

AutoSprite还内置了一个afterDraw的摧毁方法的扩充,isDestroyed检查Sprite是否超出了Canvas的范围,如果超出,则销毁Sprite。

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

子弹类(Bullet)

子弹是从下向上沿直线移动的。

前面我们用从上往下的speed为正设定了精灵类的速度,因此从下向上的子弹的速度就是负的。

负数表示子弹向上飞

public class Bullet extends AutoISprite {

    public Bullet(Bitmap bitmap) {
super( bitmap );
setSpeed( -10 );//负数表示子弹向上飞
}

明日各个成员的任务安排

  • 陈是奇同学进行博客整理,王译潇同学和张师瑜同学帮其他同学查找相关资料以及提供建议,其余同学完成任务并将已完成的内容进行测试。

2017-2018-1 JaWorld 团队作业--冲刺2的更多相关文章

  1. 2017-2018-1 JaWorld 团队作业--冲刺1

    2017-2018-1 JaWorld 团队作业--冲刺1(20162301) 一.小组分工: 由于小组成员在本周比较忙碌,所以考虑后本组的冲刺就按照每天加入不同的类来完成.我们根据类的难度大小来决定 ...

  2. 2017-2018-1 JaWorld 团队作业--冲刺3

    2017-2018-1 JaWorld 团队作业--冲刺3 (20162306) 总体架构 我们本次团队项目设定为基于Android系统Java架构下的打飞机小游戏 游戏中所有模型的原型设定是精灵,因 ...

  3. 2017-2018-1 JaWorld 团队作业--冲刺4

    2017-2018-1 JaWorld 团队作业--冲刺4 (20162305) 总体架构 我们本次团队项目设定为基于Android系统Java架构下的打飞机小游戏 游戏中所有模型的原型设定是精灵,因 ...

  4. 2017-2018-1 JaWorld 团队作业--冲刺5

    2017-2018-1 JaWorld 团队作业--冲刺5(20162310) 团队项目之战斗机类分析博客 总结 我们本次团队项目设定为基于Android系统Java架构下的打飞机小游戏 游戏中所有模 ...

  5. 2017-2018-1 JaWorld 团队作业--冲刺6

    2017-2018-1 JaWorld 团队作业--冲刺6(20162308) 实现 由于我在冲刺部分负责的是类之间的耦合,所以我就介绍一下本次游戏的总体实现. 我们定义了Sprite类,即精灵类,游 ...

  6. 2017-2018-1 JaWorld 团队作业--冲刺7

    2017-2018-1 JaWorld 团队作业--冲刺7 冲刺博客 冲刺1 冲刺2 冲刺3 冲刺4 冲刺5 项目完成情况 存在的问题 存在的问题是敌机只设置了一种,没能实现多种敌机的游戏设置. 界面 ...

  7. 【2017集美大学1412软工实践_助教博客】团队作业4——第一次项目冲刺(Alpha版本)小组 成绩

    第四次团队作业成绩公布 题目 团队作业4: http://www.cnblogs.com/happyzm/p/6722264.html 团队成绩 成绩公示如下: 检查项 会议内容 代码签入 心得体会或 ...

  8. 【2017集美大学1412软工实践_助教博客】团队作业8——第二次项目冲刺(Beta阶段)

    题目 团队作业8: http://www.cnblogs.com/happyzm/p/6856179.html 团队作业8-1 beta冲刺计划 团队 新加入的成员,担当的角色,技术特点 下一阶段需要 ...

  9. 【2017集美大学1412软工实践_助教博客】团队作业7——Alpha冲刺之事后诸葛亮

    题目 团队作业7: http://www.cnblogs.com/happyzm/p/6827853.html 团队成绩 评分项目 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结 全组 ...

随机推荐

  1. JS-对象查找父级

    之前在寻找两个以上的父级,一直傻傻的用parent().parent()... 今天,需要写五个,当然以前也是写过五个的,但是今天总想着换个简单的方式,至少不要.parent().parent().p ...

  2. poj_3261 后缀数组

    题目大意 给出一个数字串,找出其中至少重复K次的最长的子串长度. 题目分析 直接用后缀数组来求解,限制height[i]的长度来对排好序的后缀进行分组(这种方法经常在字符串问题中被使用).     先 ...

  3. const关键字浅析

    1  const变量 const double PI = 3.14159; 定义之后不能被修改,所以定义时必须初始化. const int i, j = 0; // error: i is unini ...

  4. 【BZOJ5008】方师傅的房子 三角剖分

    [BZOJ5008]方师傅的房子 Description 方师傅来到了一个二维平面.他站在原点上,觉得这里风景不错,就建了一个房子.这个房子是n个点的凸多边形,原点一定严格在凸多边形内部.有m个人也到 ...

  5. iOS - 开发中调试小技巧

    对于软件开发而言,调试是必须学会的技能,重要性不言而喻.对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中.不同语言.不同IDE.不同平台的 ...

  6. angularJS表达式详解!

    angularJS的表达式很像Javascript里的表达式:它可以包含文字,运算符和变量: angularJS 表达式: - 数字:{{100+100}} - 字符串:{{‘hello’+'angu ...

  7. Spring中常用的注解(@Entity,@Table,@Column,@Repository,@Service)

    当项目变得比较大的时候,如何还使用hbm.xml文件来配置Hibernate实体就会变得比较复杂.这里Hibernate提供了Annotation注解方式,使得Hibernate的映射文件变得很方便管 ...

  8. 【Python】sasa版:文件中csv读取在写入csv读取的数据和执行是否成功。

    sasa写的文件(包含解析文字) # coding=utf- from selenium import webdriver from time import sleep import keyword ...

  9. 第1章 1.9计算机网络概述--OSI参考模型和网络安全

    1.物理层安全: 风险:无关人员接入网络. 防范:将用不到的口的网线拔掉,或者用命令将用不到的网线接口shutdown(关闭). 2.数据链路层安全: ADSL账号密码 无线网账号密码 交换机绑定MA ...

  10. Agent XPs disable

    问题 有一天,我们发现SQL Server代理程序在SSMS“SQL Server代理程序(Agent XPs已禁用)”中为我们的SQL Server实例之一停止了以下消息,但该服务正在根据服务控制台 ...