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()方法中根據不同的狀態畫不同的的圖片
- 在不同狀態下,顯示不同的運行情況