java開發坦克大戰小遊戲

注:這是馬老師講的坦克大戰的具體功能及其實現步驟,非常適合初學者剛學完java想根據需求練練手。

 

版本0

功能:

  • 創建一個指定大小的窗口

掌握:

  • 通過eclipse建立一個新的項目
  • 爲新的項目指定不同的源代碼和輸出目錄
  • 指定項目所用的版本
  • 通過eclipse建立新的類

 

版本0.1

功能:

  • 添加關閉窗口的事件
  • 不允許窗口大小改變

掌握:

  • 匿名類的用法(應用場合)
  • 通eclipse重寫父類的方法

 

版本0.2

功能:

  • 畫出代表坦克的實心圓

掌握:

  • 如何重寫paint方法

 

版本0.3

功能:

  • 讓坦克運動起來

步驟:

  • 將位置改變爲變量;
  • 啓動線程不斷重複畫;
  • 每次重畫改變坦克位置

掌握:

  • 內部類的使用(好處,什麼時候用)
  • 可以方便的訪問包裝類的方法;不方便公開的,只爲包裝類服務的類應當定義爲內部類

 

 

版本0.31

功能:

  • 使用雙緩衝消除閃爍現象

原因:

  • 刷新重畫頻率太快,paint方法還沒完成
  • 逐條顯示

解決:

  • 將所有東西畫在虛擬圖片上,一次性顯示出來

 

 

版本0.4

功能:

  • 代碼重構

步驟:

  • 將以後可能需要多處改變的量定義爲常量
  • 一般用public static final
  • 常量名一般大寫

 

 

版本0.5

功能:

  • 鍵盤控制坦克

步驟:

  • 鍵盤監聽類KeyMonitor
  • 內部類
  • 注意:switch case語句的使用和break的運用

 

版本0.6——重要版本

功能:

  • 將坦克單獨封裝成爲一個類

步驟:

  • 建立Tank類
  • 爲Tank類天界成員變量和構造方法
  • 添加draw方法,使得Tank類可以單獨控制自己的畫法
  • 添加Tank類處理按鍵的方法
  • 根據Tank修改TankClient類

掌握:

  • 面向對象的思想
  • 細節隱藏,構建單獨的類,首先考慮系統中有哪些類
  • 合適的方法應該出現在合適的類中

 

 

版本0.7——重要版本

功能:

  • 讓坦克向8個方向走

步驟:

  • 添加記錄按鍵狀態的布爾量
  • 添加代表方向的量(使用枚舉)
  • 根據按鍵狀態確定Tank的方向
  • 方向進行下一步的移動(move)

 

 

版本0.8

功能:

  • 讓坦克向8個方向走(2)

步驟:

  • 處理鍵擡起的消息
  • 修改TankClient相關代碼

 

 

版本0.9

功能:

  • 添加子彈類

步驟:

  • 添加Missile類
  • 添加x,y,dir等屬性以及常量
  • 添加構造方法
  • 根據不同方向,進行不同的運動
  • 在TankClient中模擬一顆子彈

注意:

  • 不一定一次寫到位
  • 進行多次試驗
  • 將步驟分解開來逐一進行調試

 

 

版本1.0

功能:

  • 根據主戰坦克的方向和位置,打出子彈

步驟:

  • 增加對Ctrl鍵的按鍵處理
  • 根據坦克打出一發子彈這個話,來確定Tank中的方法fire,其返回值爲Missle
  • 根據Tank方向和位置設定子彈的方向和位置x、y出來,然後返回fire方法的實現

 

 

版本1.1

功能:

  • 爲了解決坦克停下也能打出炮彈的問題——畫出炮筒

步驟:

  • Tank類增加新的屬性ptDir
  • 每次move後根據Tank新的方向確定炮筒的方向
  • 將炮筒用直線的形式表示出來

 

 

版本1.2

功能:

  • 打出多發炮彈

步驟:

  • 使用容器裝炮彈
  • 每當擡起ctrl鍵就網容器中加入新的炮彈
  • 逐一畫出每一發炮彈

注意:

  • 泛型的使用
  • 將TankClient的實例傳遞到Tank中
  • this的運用類的初始化過程

 

 

版本1.3

功能:

  • 解決炮彈不消亡的問題
  • 解決坦克出界的問題

步驟:

  • 加入控制炮彈生死的量bLive(Missile)
  • 當炮彈已經死去就不需要對其重畫
  • 當炮彈死亡就從容器炒中去除
  • 當炮彈飛出邊界就死亡

 

Debug的運用

  • 一步一步跟蹤代碼
  • 爲代碼設置斷點
  • Step into和step over的概念
  • 學會在運行過程中觀察變量的值

 

 

版本1.4

功能:

  • 畫一輛敵人的坦克

步驟:

  • 加入區別敵我的量good
  • 根據敵我的不同設置不同的顏色
  • 更新Tank的構造函數,加入good
  • TanClient中new出敵人的坦克並畫出

 

 

版本1.5

功能:

  • 將敵人的坦克擊斃

分析:

  • 一顆子彈擊中敵人的坦克

步驟:

  • Missile中加入hitTank(Tank)方法,返回布爾類型
  • 碰撞檢測的輔助類Rectangle
  • 爲Tank和Missile都加入getRect方法
  • 當擊中敵人坦克時候,坦克被打死,子彈也死去
  • 增加控制tank生死的量live
  • 如果死去就不畫了

 

 

版本1.6

功能:

  • 加入爆炸的感覺

步驟:

  • 添加爆炸類(加入不同直徑的圓模擬爆炸,加入live,加入位置屬性,加入draw方法)
  • 爆炸應該存在於集合類中(TankClient加入集合,將集合中的爆炸逐一畫出)
  • 擊斃一輛坦克後應產生爆炸(hitTank是應產生爆炸,不能直接訪問爆炸集合,加入TankClient引用Missile類,當new Missile時候應該指定哪裏畫出哪個TankClient,修改Tank類fire方法,當new Missile時候將保存好的TankClient變量傳遞給Missile

 

 

版本1.7

功能:

  • 添加多量坦克

步驟:

  • 用容器類來裝敵人的Tank
  • 向容器中裝入多輛敵人Tank
  • 畫出來
  • 運行,不能打掉(添加hitTanks方法,打一系列Tank,TankClient裏面每發子彈都打tanks)

 

 

版本1.8

功能:

  • 讓敵方坦克更加智能

步驟:

  • 讓敵方坦克動起來(構造方法中可以指定方向,new敵方坦克的時候指定敵方坦克的方向)
  • 然敵方坦克向隨機方向移動(Tank是靜態的,添加隨機數產生器java.util.Random,move完成後如果是敵方坦克的隨機產生一個數,來設定坦克的下一個方向,Direction.values();)
  • 讓敵方坦克向隨機方向移動隨機步數(添加變量,記錄隨機步數,當==0時,改變方向,否則知識隨機步數遞減)
  • 讓敵方坦克發射炮彈(我方坦克炮彈不大我方坦克,炮彈添加好壞bGood,根據好壞畫不同顏色,修改炮彈的構造方法,修改Tank的fire方法,修改hitTank方法,好不能打好,壞不能打壞)
  • 敵方炮火不能太猛烈

 

 

版本1.9

功能:

  • 添加兩堵牆

步驟:

  • 建立一個Wall類,建立Wall對象,畫出來
  • 讓每一顆子彈打擊每一堵牆(hitWall()方法,子彈速度不能太快,否則容易穿過牆);
  • 讓坦克不能穿過牆(記錄上一次的位置oldx,oldy,修改構造函數,每次move之前記錄上一次的位置,添加stay方法,記錄移動前的位置,當撞到時回到移動前的位置,當碰到牆的時候stay());

 

 

版本2.0

功能:

  • 坦克不能相互穿越

步驟:

  • 當坦克撞到Tank的時候stay();

 

 

 

版本2.1

功能:

  • 超級炮彈

步驟:

  • 處理按鍵A

 

 

版本2.2

功能:

  • 主坦克的生命值

步驟:

  • 加入fire變量
  • 在窗口顯示生命值

 

 

版本2.3

功能:

  • 圖形化表示主戰坦克的生命值

步驟:

  • 根據不同的life值進行不同的顯示

 

 

版本2.4

功能:

  • 添加血塊

步驟:

  • 添加blood類
  • 添加必要的方法
  • 讓blood對象固定軌跡運動,並在一定時間後消失

 

 

版本2.5

功能:

  • 敵人死光了重新加入
  • 主戰坦克死了按F2開始復活

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章