1.第一个任务:做6个子类
Sky:y1;step step();
Hero: life; doubleFire; move(int x,int y){}
Airplane: step step();
BigAirplane: step step();
Bee: xstep; ystep; awardType//0表示带命;1表示带分 step();
Bullet: step step();
2.第二个任务:使用构造方法,初始化数据
1)Sky:无参构造
2)Hero:无参构造
3)敌人对象(Airplane,BigAirplane,Bee)无参构造
4)Bullet:Bullet(int x,int y)
3. 第三个任务:定义FlyingObject(实现代码重用)
1)定义FlyingObject,定义通用的变量和方法
2)设计两个构造方法:
对Airplane,Bee ,BigAirplane对象的初始化方法,在子类中调用
对Hero,Sky,Bullet对象的初始化方法,在子类中调用
3)调整成员变量的修饰符
父类中可以被访问的成员访问修饰符:protected
子类中的成员不被外界访问修饰符:private
4.第四个任务:画页面
1)定义World类,继承JPanel
2)定义窗口,显示窗口
3)把图片拷贝到工程包下
4)加载图片
4.1)天空
//使用ImageIO读取图片
image = ImageIO.read(Sky.class.getResource("background.png"));
4.2)小敌机
//加载图片到数组中
images[i]=ImageIO.read(Airplane.class.getResource("airplane"+i+".png"));
4.3)大敌机
//加载图片到数组中
private static BufferedImage[] images = new BufferedImage[5];
for(int i = 0;i<images.length;i++){
images[i]=ImageIO.read(Airplane.class.getResource("bigplane"+i+".png"));
}
4.4)获取图片
//要将父类抽象且方法抽象(父类中声明)才可以实现
public abstract BufferedImage getImage();
//子类中具体实现
1)天空
2)小敌机
/*
* 1、如果当前状态为活着,加载数组的第一张图片
* 2、如果当前状态为死亡,加载数组中剩余的四张图片,把state=REMOVE
*/
3)大敌机
/*
* 1、如果当前状态为活着,加载数组的第一张图片
* 2、如果当前状态为死亡,加载数组中剩余的四张图片,把state=REMOVE
*/
4)蜜蜂
/*
* 1、如果当前状态为活着,加载数组的第一张图片
* 2、如果当前状态为死亡,加载数组中剩余的四张图片,把state=REMOVE
*/
5)子弹
/*
* 1、如果当前状态为活着,加载数组的第一张图片
* 2、如果当前状态为死亡,把state=REMOVE
*/
4.5)画图片
在World类中画图片
//敌人入场
//小敌机的初始化
//实现画的功能
5.第五个任务:让画面动起来
5.1)动起来
5.2)在world中定义方法stepAction() 在run方法中调用
5.3)随机产生敌人对象
//控制生成敌人数量
//敌人入场
//控制生成子弹数量
5.4)把随机对象放到数组中
5.5)子弹的产生
5.6)英雄机随鼠标移动
1)//x,y表示鼠标的座标 move(int x,int y)
2)添加事件监视器 (World类中)
//定义鼠标的移动事件处理方法(内部类:(匿名类))
//给Jpanel添加事件监视器的对象
6.第六个任务:删除越界的对象
6.1)在父类定义越界的方法,分别在子类中实现方法outOfBounds();
1)分别实现方法(敌人对象y>700,子弹y<0,天空和英雄机永不越界)
2)在world类中定义方法,回收越界对象,在action方法中调用
7.第七个任务:定义敌人和子弹(英雄机)发生碰撞的方法
7.1)定义方法,对敌人和子弹(英雄机)是否碰撞,other表示子弹(英雄机) this表示敌人对象hit(FlyingObject other)
如果子弹的x,y座标在以上范围内,说明撞上了,返回true,否则返回false
7.2)定义接口,定义得分的方法 需要大敌机和小敌机实现接口,重写方法getScore()
7.3)定义接口,定义福利 Award {}
7.4)定义功能方法
//让敌人去死的方法(在FlyingObject类中实现)goDead()
//加命(在Hero类中实现)addLife()
//获取命(在Hero类中实现)getLife()
//增加火力值(在Hero类中实现)addDoubleFire()
8.第八个任务:当子弹和敌人碰撞之后的得分和福利的设置,并在页面画分和命
//子弹和敌人发生碰撞
//遍历子弹集合,
//拿到一个子弹对象
//遍历敌人集合
//获取一个敌人对象
//子弹对象和所有的敌人碰撞的匹配
//实现相对应功能
9.第九个任务:英雄机和敌人发生碰撞:如果碰到的是大(小)敌机,命-1;
如果碰到的是小蜜蜂:火力清0
(1)在Hero类中定义方法:subLife(); clearFire();
(2)heroHitAction(); //英雄机和敌人碰撞
10.第10个任务:画窗口的状态
- 在World类中定义4个常量,表示窗口的状态:开始,运行,暂停,结束
- 设计程序结束的方法,checkGameOverAction();
- 在World类中定义3个静态变量,加载图片(启动,暂停,结束)
- 在World类中的paint()方法中根据不同的状态画不同的的图片
- 在不同状态下,显示不同的运行情况