shoot射击游戏项目一
1.需求分析:
运行项目,看结果:
A:小敌机,大敌机,蜜蜂,--------敌人
英雄机发射子弹
B:
子弹击中小敌机----玩家得分 1分
子弹击中大敌机----玩家得分 5分
子弹击中小蜜蜂-----玩家得 1生命或者火力值30
C:
英雄机的火力值变为0 的时候,就变成单倍火力
火力值变为0 的时候,变为双倍火力;依此减少2
D:碰撞
敌人与英雄机发发生碰撞,碰撞之后,英雄机的生命值减少,变位0的时候,游戏结束
2.计数分析
设计类:
A:找对象:6个对象
英雄机,小敌机,大敌机,蜜蜂,子弹,天空
B:抽类
Hero/Airplane/BIgAirplane/Bee/Bullet/Sky
C:设计成员变量和方法
shoot射击游戏项目二
1.需求分析:
A:设计一个父类、超类:并且让6个对象继承超类,测试
B:给超累添加构造方法;让六个对像分别调用超类
C: 设置对象数组,进行测试
D:在六各子类,派生类中重写
E:画窗体
2.技术分析:
重写和重载:
重写:(Override)
- 发生在父子类中,方法名形同,参数列表相同,方法体不同;
- 遵循“运行期绑定”,看对象的类型来调用方法;
重载:(Overload)
- 发生在一个类中,方法名相同,参数列表不同,方法体不同:
- 遵循“编译器绑定”,看参数,引用类型绑定法;
shoot射击游戏项目三
A:给类中添加修饰符
B:给6个派生类中添加图片属性
1):6个类种添加Static
2)在父类中添加静态方法Loadlmage()添加图片
3):六个派生类中static代码块调用Loadlmage()方法
2:技术实现:
修饰符
y/n public protected default private
同一个类 y y y y
同一个包中不同类 y y y
不同包类 y y
不同胞中的类 y
Shoot射击游戏四
1.需求分析
A:将窗体大小设置成常量
B:画对象:
想画对象先获取图片,针对每个对象能够获取到图片,
获取到图片的行为事共有的,设计到父类中;
每个对象得到图片的行为是不一样的,设计了抽象的方法----getImage();
在不同状态下,得到不同的图片;
状态:设计到父类中,设计常量:Life DEAD; REMOVE
默认状态:state=LIFE
获取图片的同时,需不需要判断当前的装态???? y
每个对象都需要判断。设计到超类,父类中;
而每个对象判断行为都是不一样的,设计普通方法即可;
-----FlyObject:isLife()/isDead()/isRemove()
C:在6个子类中重写getImage()方法
- Sky:直接返回即可
- 子弹Bullet:如果是存活的返回images即可
如果是over的删除即可 - 英雄机:如果是存活,返回imgaes[0]/images[1]
- 小敌机:如多存活,返回images[0]
如果over,images[1]—images[4]进行切换,切换完毕,到了images[4]后进行删除
D:得到不同状态下的图片,进行开始画出来;
画对象的行为是共有的,所以涉及到超类中;
每个对象画的方式都是一样的,所以设计为【普通方法】
E:测试,调用即可
设计规则:
- 将所有子类所共有的行为和属性,可以设计到超累中;抽共性
- 所有子类的行为都是一样的,设计为普通方法;所有子类的行为都是不一样的—设计成抽象方法
Shoot射击游戏五
1.需求分析
A:敌人入场
-
产生敌人:在ShootMain类中nextOne()
-
需要定时加载敌人----enterAction()实现敌人入场;
-
每400毫秒,获取到敌人,扩容,将敌人添加到数组最后一位
-
英雄机中发射子弹,hero类设计有一个方法来实现子弹的发射----shoot()
-
run()方法中,子弹发射shootAction()
-
每400毫秒。获取到子弹数组,扩容,将子弹数组添加到
C:飞行物移动
D:英雄机随鼠标移动
- 在hero()中设计方法:moveto()实现英雄机的移动
- 在ShootMain中建立监听机制,检测鼠标移动
E:删除越界飞行物
- 在Flyobject中设计一个方法outOfBounds()—检测是否越界
- 在run()方法中,写一个方法outOfBountAction()删除飞行物越界
- 遍历敌人,子弹数组,如果对象不越界,那么将存放到不越界的数组中,将不越界的数组复制到敌人,子弹数组
F:设计接口
- 击中小敌机+大敌机-----得1 分 或者3分
- 击中蜜蜂----随机得生命或者活力值
Shoot射击游戏六
子弹与敌人碰撞:
- 设计到父类中,hit()方法,实现检测子弹与敌人大声碰撞
- 在父类中设计一个goDead()实现飞行物over
- 在Hero类种设计实现addLife(),addDoubleFire()
- 通过AirPlane和BigAirplane中的接口来实现玩家得分
- 通过Bee中的接口来实现玩家获得奖励
代码实现
子弹:
package cn.tedu.shoot;
import java.awt.image.BufferedImage;
/**
* 子弹
* @author Administrator
*
*/
public class Bullet extends FlyingObject{
private static BufferedImage images;
//静态代码块
static {
images = loadImage("bullet.png");
}
private int speed;//速度
/**构造方法*/
public Bullet(int x, int y){
super(8, 14, x, y);
speed = 2;
}
/**子弹的移动*/
public void step(){
this.y