java坦克大战思路总结
第一步,設(shè)置游戲的窗體,
? ? ?創(chuàng)建一個(gè)窗體類(lèi),繼承Frame,(也可以不繼承使用JFrame),然后在該類(lèi)的構(gòu)造函數(shù)中,使用Frame中的方法,設(shè)置窗體的標(biāo)題,大小,位置,可顯,可改變窗體大小,(注意:可以使用Toolkit方法獲取屏幕的高寬;setVisible方法的位置);然后添加事件監(jiān)聽(tīng),在WindowListener中重寫(xiě),以實(shí)現(xiàn)窗口關(guān)閉,(還有一個(gè)代碼簡(jiǎn)單的,不過(guò)忘了咋寫(xiě)的了),然后創(chuàng)建一個(gè)類(lèi),做主線程,在main方法里將該窗體類(lèi)實(shí)例化,然后就實(shí)現(xiàn)了一個(gè)游戲窗體。
第二步,將人物畫(huà)上去
先在窗體類(lèi)中重寫(xiě)paint方法,這個(gè)重寫(xiě)的paint方法會(huì)自動(dòng)調(diào)用,在重寫(xiě)paint方法里,可以把人物畫(huà)出來(lái),關(guān)于圖片的添加,在該項(xiàng)目里新建一個(gè)包用了存圖片,圖片的使用,我使用的是一個(gè)工具類(lèi),別人寫(xiě)好的,我所知道的有一個(gè)方法把圖片對(duì)象化的,別的不太了解。
第三步,人物的移動(dòng)
創(chuàng)建人物類(lèi),定義初始位置,和方向,速度,寫(xiě)一個(gè)構(gòu)造器,這樣就可以實(shí)例化的時(shí)候賦初始值了,寫(xiě)一個(gè)畫(huà)筆的成員方法,在從窗體類(lèi)中的重寫(xiě)paint方法里傳過(guò)來(lái)畫(huà)筆,這樣這個(gè)成員方法也相當(dāng)于重寫(xiě)paint方法了,再寫(xiě)移動(dòng)方法,通過(guò)判斷方法來(lái)控制移動(dòng),然后在paint方法中調(diào)用,現(xiàn)在剩下的問(wèn)題就是獲取方向了,在窗體類(lèi)中添加按鍵監(jiān)聽(tīng),通過(guò)監(jiān)聽(tīng)獲取四個(gè)布爾值,四個(gè)布爾值對(duì)應(yīng)著四個(gè)方向,(四個(gè)方向可以用枚舉來(lái)表示),在寫(xiě)一個(gè)成員方法將四個(gè)布爾值轉(zhuǎn)變?yōu)榉较?#xff0c;在人物類(lèi)中寫(xiě)一個(gè)含參數(shù)的方法,用來(lái)獲取方向。
第四步,填加靜止?fàn)顟B(tài)
在人物類(lèi)中定義一個(gè)布爾值,然后在paint方法中判斷就行了
第五步,閃爍問(wèn)題
解決方法大概有兩種
加一個(gè)雙緩沖或者加一個(gè)畫(huà)布
第六步,子彈發(fā)射,連發(fā),消除
這個(gè)問(wèn)題,要找到觸發(fā)的源頭,我像按空格發(fā)射子彈,那么源頭就是監(jiān)聽(tīng)空格,我在人物類(lèi)中寫(xiě)一個(gè)開(kāi)火方法,在監(jiān)聽(tīng)中調(diào)用,而開(kāi)火方法是用來(lái)獲取此時(shí)人物的位置信息的,這樣我們獲取了子彈的初始坐標(biāo)和方向,創(chuàng)建一個(gè)子彈類(lèi),定義的信息和人物類(lèi)差不多,創(chuàng)建一個(gè)子彈容器,在這里寫(xiě)一個(gè)方法獲取子彈的初始的位置和方向,這樣就可以實(shí)現(xiàn)按一次空格,就會(huì)往子彈容器里添加一個(gè)子彈了,關(guān)于內(nèi)存溢出,在子彈類(lèi)中寫(xiě)一個(gè)方法,通過(guò)判斷位置來(lái)去除這顆子彈,(容器中的子彈用getset方法來(lái)獲取),然后將該方法在paint方法中調(diào)用,這子彈的數(shù)量我并沒(méi)有限制。
第七步,怪物的產(chǎn)生和移動(dòng)
這里我是開(kāi)了一個(gè)線程,創(chuàng)建一個(gè)怪物類(lèi),new一個(gè)線程,寫(xiě)在該類(lèi)的構(gòu)造方法里,這樣只要被實(shí)例化,線程就開(kāi)啟了,怪物的位置,移動(dòng)我是通過(guò)獲取四個(gè)隨機(jī)數(shù)來(lái)隨機(jī)生成的,怪物的數(shù)量多少和子彈相似,用容器的存儲(chǔ),這時(shí)候就要明確怪物的數(shù)量了,其他的和人物類(lèi)相似。
第八步,碰撞,死亡
碰撞我是在窗體類(lèi)中的重寫(xiě)paint方法中判斷的,判斷方法我所了解的有兩種,判斷兩個(gè)矩形是否相交和判斷兩圖片中心的距離是否超出,既然碰撞了,就會(huì)傷害,這時(shí)定義怪物和人物的血量和攻擊,發(fā)生碰撞時(shí)判斷其血量狀態(tài),進(jìn)行扣血,怪物死亡了就去除這個(gè)對(duì)象,增加游戲積分,人物死亡就游戲結(jié)束
第九步,死亡界面,開(kāi)始界面添加
在窗體類(lèi)中定義一個(gè)開(kāi)始的布爾值,在窗體類(lèi)中添加鼠標(biāo)監(jiān)聽(tīng),監(jiān)聽(tīng)中改變布爾值,在重寫(xiě)paint方法類(lèi)判斷,該畫(huà)那個(gè)圖片。在窗體類(lèi)中定義死亡的布爾值,人物死亡的時(shí)候改變布爾值,這和開(kāi)始界面相似
第十,暫停界面
這時(shí)候,就要說(shuō)一下刷新了,在主線程里,使用repaint方法,才會(huì)讓窗體不斷的刷新,畫(huà)面才會(huì)動(dòng)起來(lái),暫停就可以提供一個(gè)布爾值來(lái)判斷是否使用repaint方法。
大概就這些吧,很多都是思路,算是一個(gè)小總結(jié),如有不足之處,請(qǐng)指正。
總結(jié)
以上是生活随笔為你收集整理的java坦克大战思路总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: idea远程调试
- 下一篇: 5个免费的PPT模板下载网站