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