1. 程式人生 > >Java學習二(飛機大戰項目)day10

Java學習二(飛機大戰項目)day10

啟動 cas new raw dea god gobject pause true





day10 1.英雄機和敵人的碰撞 1) 借用FlyingObject中的hit()碰撞行為 借用FlyingObject中的goDead()方法 在Hero中設計subtractLife()減命、clearDoubleFire()清空火力值4 /** 成員方法:減命 */ public void subtractLife() { life--; //命數減1 } /** 成員方法:清空火力值 */ public void clearDoubleFire() { doubleFire = 0; //火力值歸0 } 2)因為英雄機與敵人碰撞為定時發生的,所以在run()中調用heroBangAction()方法: 在heroBangAction()中: 遍歷所以敵人,獲取每個敵人,判斷是否與英雄機撞上了 若撞上了:敵人去死、英雄機減命 、英雄機清空火力值 /** 成員方法:英雄機與敵人的碰撞 */ public void heroBangAction() { //每10個毫秒走一次 for (int i = 0; i < enemies.length; i++) { FlyingObject f =enemies[i]; //得到每一個敵人 if (hero.isLife() && f.isLife() && f.hit(hero)) { //若撞上了 f.goDead(); //敵人去死 hero.subtractLife(); //英雄機減命 hero.clearDoubleFire(); //英雄機清火力 } } } 2.檢測遊戲結束 1)借用hero的getLIfe()獲取命 2)因為檢測遊戲結束為定時發生的,所以在run()中調用checkGameOverAction()方法: 在checkGameOverAction()中: 判斷英雄機的命數 <= 0,若為true則 /** 成員方法:檢測遊戲結束 */ public void checkGameOverAction() {//每10個毫秒走一次 if(hero.getLife() <= 0) { //遊戲結束了 state = GAME_OVER; } } 3.畫狀態 1)設計了四個狀態常量,當前狀態state變量 設計了三個靜態圖片,在static塊中初始化 2)在paint()中設計在不同狀態下畫不同的圖片 3)將一堆action()設計為僅在運行狀態下在執行 將英雄機隨著鼠標動設計為僅在運行狀態下在執行 4)重寫mouseClicked()鼠標點擊事件 重寫mouseClicked()鼠標點擊事件 重寫mouseClicked()鼠標點擊事件 /** 常量:遊戲的開始、運行、暫停、結束)*/ public static final int START = 0; public static final int RUNNING = 1; public static final int PAUSE = 2; public static final int GAME_OVER = 3; /** 成員變量:當前狀態(默認為啟動狀態) */ private int state = START; /** 成員變量:三張圖(啟動、暫停、結束) */ private static BufferedImage start; private static BufferedImage pause; private static BufferedImage gameover; static { //初始化靜態圖片 start = FlyingObject.loadImage("start.png"); pause = FlyingObject.loadImage("pause.png"); gameover = FlyingObject.loadImage("gameover.png"); } switch(state) { //在不同狀態下畫不同的圖 case START: //啟動 g.drawImage(start, 0, 0, null); break; case PAUSE: //暫停 g.drawImage(pause, 0, 0, null); break; case GAME_OVER: //結束 g.drawImage(gameover, 0, 0, null); break; } /** 重寫mouseMoved()鼠標移動 */ public void mouseMoved(MouseEvent e) { if(state == RUNNING) { int x = e.getX(); //獲取鼠標的x坐標 int y = e.getY(); //獲取鼠標的y坐標 hero.moveTo(x, y); //英雄機隨著鼠標移動 } } /** 重寫mouseClicked()鼠標點擊 */ public void mouseClicked(MouseEvent e) { switch (state) { //根據當前狀態做不同操作 case START: //啟動狀態 state = RUNNING; //變為運行狀態 break; case GAME_OVER: //結束狀態 score = 0; sky = new Sky(); hero = new Hero(); enemies = new FlyingObject[0]; bullets = new Bullet[0]; state = START; //變為啟動狀態 break; } } /** 重寫mouseExited()鼠標移出 */ public void mouseExited(MouseEvent e) { if(state == RUNNING) { //運行狀態 state = PAUSE; //修改為暫停狀態 } } /** 重寫mouseEntered()鼠標移入 */ public void mouseEntered(MouseEvent e) { if(state == PAUSE) { //暫停狀態 state = RUNNING; //修改為運行狀態 } }

Java學習二(飛機大戰項目)day10