日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

Ubuntu运行坦克大战

發(fā)布時間:2024/8/1 Ubuntu 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ubuntu运行坦克大战 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?? stackoverflow看到那個java處處運(yùn)行的笑話,一點(diǎn)都不好笑。


?? 運(yùn)行環(huán)境ubuntu12。代碼參照馬士兵老師,后面再自己完善的一些小功能。


?? 運(yùn)行 ubuntu,進(jìn)行vsftpd,ssh,jdk等等一系列的安裝和配置。


?? 本來是寫實(shí)驗(yàn)報(bào)告的,當(dāng)是對jse的復(fù)習(xí)把整個大致的流程重新寫了一次。


1.

使用awt這個抽象窗口工具,先畫出基本的邊框,再畫出一個小方塊,對鍵盤進(jìn)行監(jiān)聽,上下左右按下時分別更,改了小方塊的坐標(biāo),新建一個線程類實(shí)現(xiàn)runnable接口,鍵盤一旦敲入便啟動線程,repaint畫布,調(diào)用repaint()方法時,系統(tǒng)會自動調(diào)用update()方法,update方法為的是將背景和圖片重畫。

?

2.

新建坦克類,用枚舉類型存入八個方向,斜方向還有上下左右。還有停止。主要增加鍵盤按鈕的抬起和按下。

?

3.

新建一個炮彈類,cannon,其實(shí)和坦克一個道理 ,按下z鍵之后炮彈沿著下方向發(fā)射,就是線程啟動之后不停的repaint。

4.

畫出炮管,只要根據(jù)紅色方塊的坐標(biāo)和方向,將坦克的方向作為一個參數(shù)傳入大炮cannon類,這樣發(fā)出的大炮的方向就和坦克方向一致了。

5。

如果為了不讓讓炮彈連發(fā),可以在鍵盤抬起的時候再發(fā)射,左上角

g.drawString("Cannon Number:"+cannons.size(), 20, 50);

在左上角記錄發(fā)射過的炮彈的數(shù)目。用個集合arraylist存取new出來的炮彈對象即可,拿到arraylistsize即為坦克發(fā)射炮彈數(shù)目。

6.

之前的坦克是可以穿過窗口,因?yàn)樽鴺?biāo)沒有限制,當(dāng)坦克靠觸碰到窗口后,把坦克的坐標(biāo)定格在窗口的坐標(biāo)減去坦克自身的長寬即可。

還有炮彈的數(shù)目不是一直計(jì)算,當(dāng)炮彈越界后應(yīng)當(dāng)不用計(jì)算,所以添加坐標(biāo)判斷,remove掉炮彈對象。

敵人坦克顏色應(yīng)該和我方區(qū)別,這樣在類中可以加入一個boolean變量,再傳入構(gòu)造方法中,根據(jù)這個變量畫出不同顏色。

炮彈打到坦克消失,當(dāng)時想了好久,沒想到有個封裝的很好的touch方法,要讓坦克和炮彈同時消失,那就要多一個變量,live,如果變量為false,在paint的時候就將其remove掉。

???

<span style="font-size:18px;">public Rectangle touch(){return new Rectangle(x,y,length,width); }public boolean whetherhit(Tank tank){if(this.touch().intersects(tank.touch())&& tank.isLive()){tank.setLive(false);this.setLive(false);return true;}return false;}</span>

?

7.

添加explore類,爆炸,boom!!!

爆炸效果的模擬,可以用從小到大再變小的圓模擬,就在碰撞的時候,new出explore,畫出不同的圓圈。

?

8.

New出10輛敵方坦克,

新建wall墻類,同樣利用碰撞,敵方不能穿墻,這里有個很美妙的算法,單純寫碰撞后,坦克就貼在墻上不動了,所以我們要記錄撞墻前一刻的坐標(biāo),撞上后進(jìn)行返回,

分配隨機(jī)參數(shù),使得坦克隨機(jī)發(fā)炮。

而邊框的話已經(jīng)限制了坐標(biāo),所以隨機(jī)改變坐標(biāo)之后是不會粘在邊框上的。

而讓坦克間不相互撞上,和撞墻一個道理,只要讓坦克之間進(jìn)行碰撞的檢測即可,遍歷一下所有的坦克。??

<span style="font-size:18px;">public boolean tanktank(List<Tank> tanks ){for(int i = 0; i<tanks.size();i++){Tank t = tanks.get(i);if(this != t){if(this.touch().intersects(t.touch())&& t.isLive() && this.live){//this.fantan();t.fantan();return true;}} }returnfalse;}</span>

?

9。

還記得小時候紅白機(jī)的坦克有很強(qiáng)的炮彈還有不止一條命。我們給自己的坦克添加血條blood這個變量。定義為100,中一彈扣10點(diǎn)血。

絕招的話,因?yàn)榭梢猿藗€方向放出炮彈,所以直接讓它一次性發(fā)出。



10.

扣血之后,一旦死掉就不好玩了,可以加一個禮物,吃完補(bǔ)血,畫出一個小方塊,利用touch方法,吃到之后blood變回100.

改進(jìn):

死掉之后可以F1可以原地復(fù)活。

同時增加關(guān)數(shù)這個變量,一共三關(guān),同時,每加一關(guān),增加一輛坦克,增加難度。

當(dāng)敵方全消滅時,把所有炮彈去除,進(jìn)入下一關(guān)。

三關(guān)結(jié)束后出現(xiàn)Victor,按F2退出游戲。

死掉后:


勝利!



11.

最終的圖片版。其實(shí)就是在原有圖形的基礎(chǔ)上覆蓋上圖片。

g.drawImage(m.get("ld"), x, y,null);

由于圖片素材大小切得不好,經(jīng)過細(xì)節(jié)的一些調(diào)整還是可以調(diào)節(jié)的比較好的。

?

平臺只是取巧罷了,當(dāng)時主要還是學(xué)習(xí)jse的很多東西。雖然這不是自己寫的東西,但是確實(shí)自己一路敲過來的,改進(jìn)之后,對編程的喜愛又多了一大截。

之后懂得圖形界面的使用之后便自己寫個俄羅斯方塊了。


最后是失敗了,思路錯了。。。。


?項(xiàng)目結(jié)果:







總結(jié)

以上是生活随笔為你收集整理的Ubuntu运行坦克大战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。