13.6-全棧Java筆記:打飛機遊戲實戰項目|Shell|speed|launchFrame

來源:互聯網
上載者:User

標籤:java

炮彈類設計

通過炮彈類的設計,我們可以更深入瞭解構造器的用法以及容器的用法。同時,可能還需要讀者稍微回憶一下初中數學曾學過的三角函數,這樣更能理解炮彈飛行路徑的計算原理。 當然,如果忘記這些知識了也沒關係,畢竟在實際開發中很少涉及數學原理性的內容。

炮彈類基本設計

炮彈類我們用實心的黃色橢圓實現,不再載入新的圖片。當然,大家課下可以自行找一些炮彈圖片亦可。

我們的邏輯是在視窗固定位置(200,200)處產生炮彈,炮彈方向是隨機的,並且遇到邊界會反彈。

 【樣本1】Shell類

cn.sxt.game;

 

import java.awt.Color;

import java.awt.Graphics;

 

public class Shell extends GameObject {

           double degree;

          

           public Shell(){

                     degree = Math.random()*Math.PI*2;

                     x = 200;

                     y = 200;

                     width = 10;

                     height = 10;

                     speed = 3;

           }


  public void draw(Graphics g){

                     //將外部傳入對象g的狀態儲存好

                     Color c =   g.getColor();

                     g.setColor(Color.yellow);

 

                     g.fillOval((int)x, (int)y, width, height);

                    

        //炮彈沿著任意角度飛行

                     x += speed*Math.cos(degree);

                     y += speed*Math.sin(degree);


 //如下代碼,用來實現碰到邊界,炮彈反彈回來(原理和打撞球遊戲一樣)

                     if(y>Constant.GAME_HEIGHT-height||y<30){

                                degree = -degree;

                     }

                     if(x<0||x>Constant.GAME_WIDTH-width){

                                degree = Math.PI-degree;

                     }

                     //返回給外部,變回以前的顏色

                     g.setColor(c);

           }

}


炮彈任意角度飛行路徑

炮彈沿著任意角度飛行,核心代碼就兩行:

              x += speed*Math.cos(degree);

              y += speed*Math.sin(degree);

這裡實際用到了初中學的三角函數,通過cos/sin將任意角度分解到X軸、Y軸,從而可以精確的直到x、y座標的變化情況。初中三角函數忘了的童鞋,自行腦補。

650) this.width=650;" src="https://s4.51cto.com/wyfs02/M01/9D/9D/wKioL1mCydqSTjiAAAIydJ6TPXs717.png-wh_500x0-wm_3-wmp_4-s_1140717924.png" title="圖.png" alt="wKioL1mCydqSTjiAAAIydJ6TPXs717.png-wh_50" />                         

容器物件儲存多發炮彈

為了儲存多發炮彈,我們通過定義一個容器ArrayList來管理這些對象。在paint方法中遍曆容器中所有對象,並畫出這些炮彈。

【樣本2】MyGameFrame類:增加ArrayList

public class MyGameFrame extends Frame {

           Image bgImg = GameUtil.getImage("images/bg.jpg");

           Image planeImg = GameUtil.getImage("images/plane.png");

 

           Plane plane = new Plane(planeImg,300,300,3);

          

           ArrayList<Shell>  shellList = new ArrayList<Shell>(); 

          

           //paint方法作用是:畫出整個視窗及內部內容。被系統自動調用。

           @Override

           public void paint(Graphics g) { 

                     g.drawImage(bgImg, 0, 0, null);

                     plane.drawMySelf(g);     //畫出飛機本身

                    

                     //畫出容器中所有的子彈

                     for(int i=0;i<shellList.size();i++){

                                Shell   b =  shellList.get(i);

                                b.draw(g);

                     }


  }        

    //其餘代碼,和上個版本一致,限於篇幅,在此不顯示。

}

我們初始化50發炮彈,在視窗初始化方法launchFrame()中添加樣本13-20中的代碼。

【樣本3】添加炮彈

   //初始化,產生一堆炮彈

           for(int i=0;i<50;i++){

                     Shell b = new Shell();

                     shellList.add(b);

           }

運行MyGameFrame類,執行結果2所示:

650) this.width=650;" src="https://s1.51cto.com/wyfs02/M01/9D/9D/wKioL1mCyiWAqo5tAAGR0UVRs8w661.png-wh_500x0-wm_3-wmp_4-s_2486376127.png" title="圖2.png" alt="wKioL1mCyiWAqo5tAAGR0UVRs8w661.png-wh_50" />

我們可以看到圖2中產生了若干炮彈,遊戲視窗熱鬧了很多!大家可以舉一反三想一想,實際上,遊戲視窗中的多個怪物、多個汽車、多個飛機都是產生多個對象,使用容器來統一來管理的。



「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數位、航天院某所研發中心從事軟體設計及研發工作,從小白逐漸做到工程師、進階工程師、架構師。精通Java平台軟體開發,精通JAVAEE,熟悉各種流行開發架構。


 筆記包含從淺入深的六大部分:

 A-Java入門階段

 B-資料庫從入門到精通

 C-手刃移動前端和Web前端

 D-J2EE從瞭解到實戰

 E-Java進階架構精解

 F-Linux和Hadoop 


本文出自 “全棧Java筆記” 部落格,請務必保留此出處http://javanew.blog.51cto.com/12931675/1953324

13.6-全棧Java筆記:打飛機遊戲實戰項目|Shell|speed|launchFrame

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.