《java項目坦克大戰(zhàn).ppt》由會員分享,可在線閱讀,更多相關《java項目坦克大戰(zhàn).ppt(45頁珍藏版)》請在裝配圖網上搜索。
1、Tank War,手把手、一行一行演示項目制作,項目的需求,單機版程序演示 能夠四處移動 能夠打擊敵人 敵人能夠移動 能夠模擬爆炸 能夠產生障礙 能夠增長生命,自我介紹,,項目的針對對象,初步掌握了J2SE的同學 掌握了常用的一些類 掌握了常用的一些知識點 寫過一些學習的程序(toy program),學習方法,不必太關注細節(jié) 不必非得把某個類所有的細節(jié)全了解清楚再動手 不必追求完美 關鍵是要寫完,要想方設法讓它運行起來 量變引起質變,做這個項目是為了,復習J2SE,綜合運用J2SE所學的知識 初步掌握面向對象編程的基本思想 掌握Eclipse開發(fā)J2SE程序的基本方法 初步掌握Eclipse
2、調試程序的方法 掌握編程時一些約定俗成的東西 命名/格式 等 掌握一些常用的編程方法 getters setters 持有對方引用 定義常量 保留程序版本 學會版本比較 激發(fā)大家的學習興趣,做這個項目不是為了,不是為掌握軟件工程的系統(tǒng)理論 瀑布式 螺旋遞增式 不是為了掌握專業(yè)游戲的開發(fā)方法 不應用專門的Game API 不是為了掌握專業(yè)的設計模式 沒有刻意去應用設計模式,項目的注意事項,要敲,一定要動手敲,要一行一行跟著敲 看會或者聽懂都不算掌握了程序 只有寫出來才能證明你真正的掌握 不要照抄,不要記我做程序的步驟 要掌握思路,項目所用的工具,eclipse 3.2 JDK5.0 或以上 泛型
3、在5.0后才得到支持,項目的預備知識,J2SE基礎知識 面向對象 I/O 多線程 GUI初步 事件模型,版本0.1,功能: 產生一個窗口 掌握: 通過Eclipse建立新的項目 為新的項目指定不同的源代碼和輸出目錄 指定項目所用的JDK版本 通過Eclipse建立新的類 注意: 類名和方法名的命名 見名知意 類名首字母大寫 方法名、變量名首字母小寫 應用駝峰標識,版本0.2,功能: 添加關閉窗口的事件處理 不允許窗口的大小改動 掌握: 匿名類的用法 思考:匿名類的應用場合? 類短小、不涉及將來的擴展、不涉及重要的業(yè)務邏輯 通過Eclipse重寫父類的方法 注意: 沒掌握匿名類的先照抄,不寫也行
4、 不影響最后的運行效果,版本0.3,功能: 畫出代表坦克的實心圓 掌握: 如何重寫paint方法 注意: 不要改變原來的前景色 回顧: paint(Graphics g)方法,窗口重畫時自動調用 x軸、y軸的方向,,,x,y,w,h,,,,x,y,,Frame的左上角,版本0.4,功能: 讓坦克運動起來 步驟: 將位置改變?yōu)樽兞?啟動線程不斷重畫 思考:為什么使用線程重畫,而不是每按下一個鍵進行一次重畫? 線程重畫更均勻,更能控制重畫的速度。 按鍵重畫不能解決子彈自動飛行的問題。 每次重畫改變Tank位置 掌握: 內部類的使用 思考:內部類有哪些好處?什么時候使用內部類? 可以方便的訪問包裝類
5、的方法。不方便公開的,只為包裝類服務的類應當定義為內部類。 注意: x, y值得含義,指的是小方塊的左上角點,版本0.41,功能 使用雙緩沖消除閃爍現象 原因 刷新重畫頻率太快,paint方法還沒有完成 逐條顯示 解決辦法 將所有東西畫在虛擬圖片上,一次性顯示出來 注意 如果不能理解透徹就照抄本版本代碼,不影響對J2SE的練習功效,思考,把游戲窗口的大小改變?yōu)?40 X 480? 定義常量以應付將來的改動,版本0.5,功能: 代碼重構 將以后可能需要多處改變的量定義為常量 Frame的寬度和高度 常量名一般大寫 注意: 常量一般是public static final的。,版本0.6,功能:
6、讓坦克聽從我們的指揮 添加鍵盤監(jiān)聽器類KeyMonitor TankCient添加鍵盤監(jiān)聽器 針對不同的鍵改變坦克的位置,與重畫線程結合產生不同方向運動 注意: switch case語句中break語句的運用 寫程序要循序漸進,思考,增加100輛坦克到游戲中,版本0.7重要版本,功能: 將坦克單獨包裝成類 步驟: 建立Tank類 為Tank類添加成員變量x y 添加draw方法,使Tank類獨立控制自己的畫法 添加Tank類處理按鍵的方法 根據Tank類修改TankClient類 掌握: 面向對象的思考方法 細節(jié)隱藏、構建單獨的類、首先考慮系統(tǒng)中有哪些類 合適的方法應該出現在合適的類中,思考
7、,如何讓坦克向8個方向行走?,版本0.8,功能: 讓主戰(zhàn)坦克向8個方向行走(1) 步驟 添加記錄按鍵狀態(tài)的布爾量 添加代表方向的量(使用枚舉) 根據按鍵狀態(tài)確定Tank方向 根據方向進行下一步的移動(move),版本0.9,功能: 讓主戰(zhàn)坦克向8個方向行走(2) 步驟 處理鍵抬起的消息 修改TankClient相關代碼,版本1.0,功能 添加子彈類 步驟: 添加Missile類 添加x,y,dir等屬性以及常量 添加構造方法, draw方法等必要方法 根據不同方向,進行不同的運動 在TankClient中模擬一顆子彈 new一顆子彈出來 畫出來 注意: 不一定一次寫到位 進行多次試驗 將步驟分
8、解開來逐一進行調試,版本1.1,功能: 根據主戰(zhàn)坦克的方向和位置,打出子彈 步驟 增加對Ctrl鍵的按鍵處理 根據“坦克打出一發(fā)子彈”這句話,來確定Tank中的方法fire,其返回值為Missle 根據Tank方向和位置設定子彈的方向和位置并new出來,然后返回(fire方法的實現) 注意: 掌握面向對象的思維方式來確定類應該具有的方法,,,x,y,w,h,,,,版本1.2,功能 為了解決坦克停下也能打出炮彈的問題畫出炮筒 步驟 Tank類增加新的屬性ptDir 每次move后根據Tank新的方向確定炮筒的方向 將炮筒用直線的形式表現出來,,,x,y,w,h,,,,,,,,,版本1.3,功能
9、打出多發(fā)炮彈 步驟: 使用容器裝炮彈 每當抬起Ctrl鍵就往容器中加入新的炮彈 逐一畫出每一發(fā)炮彈 注意: 泛型的使用,版本1.4,功能 解決炮彈不消亡的問題 解決坦克出界的問題 步驟: 加入控制炮彈生死的量bLive(Missle) 當炮彈已經死去就不需要對其重畫 當炮彈飛出邊界就死亡 當炮彈死亡就從容器中去除 注意: 將思維轉化為代碼,Debug的運用,一步一步跟蹤代碼 為代碼設置斷點 Step into 和 step over的概念 學會在運行過程中觀測變量的值,版本1.5,功能 畫一輛敵人的坦克 步驟: 加入區(qū)別敵我的量good 根據敵我的不同設置不同的顏色 更新Tank的構造函數,加
10、入good TankClient中new 出敵人的坦克并畫出,版本1.6,功能: 將敵人坦克擊斃 分析:一顆子彈擊中敵人坦克 步驟: Missle中加入hitTank(Tank)方法,返回布爾類型 碰撞檢測的輔助類Rectangle 為Tank和Missle都加入getRect方法 當擊中敵人坦克時,坦克被打死,子彈也死去 增加控制Tank生死的量live 如果死去就不畫了 注意: 不要照抄代碼 沿著思路往里加入代碼,版本1.7,功能 加入爆炸 步驟: 添加爆炸類 用不同直徑的圓模擬爆炸 加入live 加入位置屬性 加入draw方法 爆炸應該存在于集合類中 TankClient加入集合 將集合
11、中的爆炸逐一畫出(如果死去就去除) 擊斃一輛坦克后應產生爆炸 hitTank時應產生爆炸,,,,,,,,,,版本1.8,功能: 添加多輛坦克 步驟: 用容器來裝敵人的Tank 向容器中裝入多輛敵人Tank 畫出來 運行,不能打掉 添加hitTanks方法,打一系列Tank TankClient里面每發(fā)子彈都打tanks,版本1.9,功能: 讓敵軍坦克更加智能 步驟: 讓敵軍坦克動起來 構造函數中可以指定方向 new敵軍坦克的時候指定敵軍坦克的方向 讓敵軍坦克向隨機方向移動 (Tank)靜態(tài)的,添加隨機數產生器 java.util.Random move完成后,如果是敵軍坦克的,隨機產生一個數,
12、來設定坦克下一個方向 Direction.values() 讓敵軍坦克向隨機方向移動隨機的步驟 添加變量,記錄隨機步驟 當==0時,改變方向,否則,只是隨機步驟遞減 讓敵軍坦克發(fā)射炮彈 本軍炮彈不打本軍 炮彈添加好壞bGood,根據好壞畫不同顏色 修改炮彈的構造方法 修改Tank的fire方法 修改hitTank方法,好不能打好,壞不能打壞 敵軍炮火不能太猛烈,版本2.0,功能: 添加兩堵墻 步驟: 建Wall類、建立Wall對象、畫出來 讓每一顆子彈打擊每一堵墻 hitWall()方法 注意: 子彈速度不能太快,否則很容易穿過墻 讓坦克不能穿過墻 記錄上一次的位置oldX, oldY 修改構
13、造函數 每次move之前紀錄上一次位置 添加stay方法 記錄移動前的位置 當撞到時回到移動前的位置 當碰到墻的時候stay,,,,,,版本2.1,功能: 坦克不能互相穿越 步驟: 當坦克撞到Tank時stay,版本2.2,功能: 超級炮彈 步驟: 處理按鍵A,版本2.3,功能: 主戰(zhàn)坦克的生命值 步驟: 加入life變量 在窗口顯示生命值,版本2.4,功能: 圖形化表示主戰(zhàn)坦克的生命值 步驟: 根據不同的life值進行的不同的顯示,,,版本2.5,功能: 添加“血塊” 步驟: 添加blood類 添加必要的方法 讓blood對象固定軌跡運動, 并在一定時間后消失,,,,,,,,,,版本2.6,功能: 最后的修正 敵人死光了重新加入 我軍死掉了F2開始,注釋/文檔與打包,生成javadocs文檔 生成jar文件,坦克的不足之處,面向對象的組織仍然不是很完美 細小的毛病 退出時控制線程結束 專門的GAME API 主戰(zhàn)坦克和機器人(敵人坦克)應當分開控制 界面不漂亮,2.6以后的版本?,網絡版 20個左右的版本 圖形版,意見反饋, ,