坦克大戰——坦克類
一. 團隊課程設計博客鏈接
https://www.cnblogs.com/chenhuilin/p/10275664.html
二.個人負責模塊和任務說明
模塊:坦克類(玩家坦克類+電腦坦克類),代碼整合
三.代碼的提交記錄截圖
四.負責模塊和任務詳細說明
玩家坦克繼承VisibleImage類,電腦坦克類繼承自玩家坦克類,UML如下:
1.玩家坦克類
構造方法:
設置坐標位置(坦克出生的位置),坦克的圖片,坦克的類型(玩家還是電腦),面板(可將坦克放置於當前面板中),代碼截圖如下:
移動方向:(上下左右)
左移思路:若當前方向不是左移,則將圖片更改為左移圖片,並且更新方向為左。
若經過碰撞檢測發現不會產生碰撞,則改變坐標,並且要判斷坐標是否在邊界。
其他方向同理,代碼截圖如下:
碰撞檢測:(牆與電腦坦克)
思路:獲取當前坐標周圍一定范圍內的矩形邊框,同時獲取當前面板內的所有牆體對象,將其存放於數組中。將獲得的矩形范圍與所有牆體互相匹配,若符合則說明會產生碰撞。注意草地例外。
坦克碰撞檢測同理,注意要將自己除外,並且要查看當前坦克是否存活,代碼截圖如下:
獲得子彈:
根據上下左右的方向判斷坦克頭的位置,即子彈發射的方向的預設,以保證之后子彈朝預設方向移動(子彈的移動在子彈類里)
攻擊方法:獲得子彈,將子彈添加至面板(因為子彈有四個方向),啟動攻擊冷卻線程。
觸碰邊界方法:根據屏幕與主窗體之間的大小關系,進而判斷坦克是否移動到邊界。
冷卻線程:
使用sleep()方法,經過休眠之后,要注意改變線程的狀態,將其改為可攻擊。
其余setter,getter方法則不進行詳細描述。
2.電腦坦克類
構造方法:繼承自父類玩家坦克類,設置好初始方向,攻擊冷卻時間
移動方向:在父類的基礎上,改變了父類的手動產生新方向,而是隨機產生新方向,並且在該方向的移動時間是設置好的,檢測是否達到邊界同理:
碰撞檢測,攻擊方法的思路都與玩家坦克類相似,不同之處在於,玩家坦克類的方向是人為改動的,而電腦坦克類的方向是隨機產生的,故要重寫父類的這兩個方法。
攻擊方法:只有4%的概率產生攻擊,用隨機數實現
五.課程設計感想
本次課設遇到的問題:
1. 由於本次課設是小組分工,所有組員要多進行交流,產生的問題要合力解決。
2. 在進行多關卡的設置時,我們對關卡的跳轉處理不好,在游戲結束時,仍能夠進入到下一關,經過排查,我們發現是因為level的值未及時調整,導致即時游戲失敗,也能進入到下一關。
3. 對圖片的路徑產生了疑問,之后利用枚舉將路徑存儲於字符串,方便之后的使用。
4. 在游戲時,我們發現每打死一個坦克,都會出現異常,最后發現是我們爆炸的圖片沒有處理好。
收獲:
1. 學會了如何以團隊的方式完成一個代碼的整合。
2. 對Java有了更深層次的理解,對面向對象設計有了深刻的了解,Java與c語言不同,c語言是面向過程的編程,而JAVA編程思想是面向對象的編程,即要有萬物皆對象的設計思想,要理解對象之間的關系,要了解一個對象有什么樣的屬性和什么樣的方法。