Ubuntu运行坦克大战
?? stackoverflow看到那個java處處運行的笑話,一點都不好笑。
?? 運行環境ubuntu12。代碼參照馬士兵老師,后面再自己完善的一些小功能。
?? 運行 ubuntu,進行vsftpd,ssh,jdk等等一系列的安裝和配置。
?? 本來是寫實驗報告的,當是對jse的復習把整個大致的流程重新寫了一次。
1.
使用awt這個抽象窗口工具,先畫出基本的邊框,再畫出一個小方塊,對鍵盤進行監聽,上下左右按下時分別更,改了小方塊的坐標,新建一個線程類實現runnable接口,鍵盤一旦敲入便啟動線程,repaint畫布,調用repaint()方法時,系統會自動調用update()方法,update方法為的是將背景和圖片重畫。
?
2.
新建坦克類,用枚舉類型存入八個方向,斜方向還有上下左右。還有停止。主要增加鍵盤按鈕的抬起和按下。
?
3.
新建一個炮彈類,cannon,其實和坦克一個道理 ,按下z鍵之后炮彈沿著下方向發射,就是線程啟動之后不停的repaint。
4.
畫出炮管,只要根據紅色方塊的坐標和方向,將坦克的方向作為一個參數傳入大炮cannon類,這樣發出的大炮的方向就和坦克方向一致了。
5。
如果為了不讓讓炮彈連發,可以在鍵盤抬起的時候再發射,左上角
g.drawString("Cannon Number:"+cannons.size(), 20, 50);
在左上角記錄發射過的炮彈的數目。用個集合arraylist存取new出來的炮彈對象即可,拿到arraylist的size即為坦克發射炮彈數目。
6.
之前的坦克是可以穿過窗口,因為坐標沒有限制,當坦克靠觸碰到窗口后,把坦克的坐標定格在窗口的坐標減去坦克自身的長寬即可。
還有炮彈的數目不是一直計算,當炮彈越界后應當不用計算,所以添加坐標判斷,remove掉炮彈對象。
敵人坦克顏色應該和我方區別,這樣在類中可以加入一個boolean變量,再傳入構造方法中,根據這個變量畫出不同顏色。
炮彈打到坦克消失,當時想了好久,沒想到有個封裝的很好的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墻類,同樣利用碰撞,敵方不能穿墻,這里有個很美妙的算法,單純寫碰撞后,坦克就貼在墻上不動了,所以我們要記錄撞墻前一刻的坐標,撞上后進行返回,
分配隨機參數,使得坦克隨機發炮。
而邊框的話已經限制了坐標,所以隨機改變坐標之后是不會粘在邊框上的。
而讓坦克間不相互撞上,和撞墻一個道理,只要讓坦克之間進行碰撞的檢測即可,遍歷一下所有的坦克。??
<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。
還記得小時候紅白機的坦克有很強的炮彈還有不止一條命。我們給自己的坦克添加血條blood這個變量。定義為100,中一彈扣10點血。
絕招的話,因為可以朝八個方向放出炮彈,所以直接讓它一次性發出。
10.
扣血之后,一旦死掉就不好玩了,可以加一個禮物,吃完補血,畫出一個小方塊,利用touch方法,吃到之后blood變回100.
改進:
死掉之后可以F1可以原地復活。
同時增加關數這個變量,一共三關,同時,每加一關,增加一輛坦克,增加難度。
當敵方全消滅時,把所有炮彈去除,進入下一關。
三關結束后出現Victor,按F2退出游戲。
死掉后:
勝利!
11.
最終的圖片版。其實就是在原有圖形的基礎上覆蓋上圖片。
g.drawImage(m.get("ld"), x, y,null);
由于圖片素材大小切得不好,經過細節的一些調整還是可以調節的比較好的。
?
平臺只是取巧罷了,當時主要還是學習jse的很多東西。雖然這不是自己寫的東西,但是確實自己一路敲過來的,改進之后,對編程的喜愛又多了一大截。
之后懂得圖形界面的使用之后便自己寫個俄羅斯方塊了。
最后是失敗了,思路錯了。。。。
?項目結果:
總結
以上是生活随笔為你收集整理的Ubuntu运行坦克大战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【软件工程导论】期末复习重点
- 下一篇: Ubuntu安装配置tftp服务器