用二維數(shù)組
我們一直強(qiáng)調(diào)成都網(wǎng)站建設(shè)、網(wǎng)站制作對于企業(yè)的重要性,如果您也覺得重要,那么就需要我們慎重對待,選擇一個安全靠譜的網(wǎng)站建設(shè)公司,企業(yè)網(wǎng)站我們建議是要么不做,要么就做好,讓網(wǎng)站能真正成為企業(yè)發(fā)展過程中的有力推手。專業(yè)網(wǎng)站建設(shè)公司不一定是大公司,創(chuàng)新互聯(lián)建站作為專業(yè)的網(wǎng)絡(luò)公司選擇我們就是放心。
int[][] iAry = {{ 1,0,1.0,0,1,0,1},
{ 1,0,1.0,0,1,0,1},
{ 1,0,1.0,0,1,0,1},
{ 1,0,1.0,0,1,0,1}
{ 1,0,1.0,0,1,0,1}
{ 1,0,1.0,0,1,0,1}};
0代表空白(即黑色).1代表墻身(紅磚)
一個數(shù)組數(shù),繪畫墻身的圖片固定大小 例如:紅磚比例 32*32 :寬32 高32,每畫一個圖就*32,就能對齊位置了----太詳細(xì)不好說,自己動動腦
至于你說的子彈碰撞 , 你記錄子彈當(dāng)前位置POS,當(dāng)子彈POS到達(dá)該墻身,就把子彈消除,墻身在iAry中1的值設(shè)置為0, 繪畫處檢測到iAry[i][j] ==0 了,就畫空白啦. 明白?
坦克大戰(zhàn)源代碼應(yīng)該是個完整的項目吧。
對于完整的帶項目配置文件的java源碼,按步驟操作即可:
File - Import - General
選擇Existing Projects into Workspace,選擇要導(dǎo)入的文件,點擊“finish",OK。
import?java.awt.*;
import?javax.swing.*;
public?class?Tank?extends?JFrame?{
mypane?mp=null;
Obj[]?objs=new?Obj[0];
public?Tank()?{
setTitle("坦克大戰(zhàn)");
setSize(800,600);
pro();
add(new?mypane(objs));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
//在這里添加鍵盤事件、鼠標(biāo)事件、讓坦克移動,修改objs數(shù)組對象讓他們移動
setVisible(true);
}
private?void?pro(){
Obj[]?tmp=new?Obj[objs.length+1];
System.arraycopy(objs,0,tmp,0,objs.length);
tmp[tmp.length-1]=new?Obj(1,1,0,1);
objs=tmp;
int?num=(int)(Math.random()*5)+1;
for(int?i=0;inum;i++){
int?x=(int)(Math.random()*getWidth())+1;
int?y=(int)(Math.random()*getHeight())+1;
int?dir=(int)(Math.random()*4);
Obj[]?dst=new?Obj[objs.length+1];
System.arraycopy(objs,0,dst,0,objs.length);
dst[dst.length-1]=new?Obj(x,y,1,dir);
objs=dst;
}
}
public?static?void?main(String[]?args)?{
new?Tank();
}
}
class?Obj{
int?x,y;//坦克坐標(biāo)
int?type;
int?dir;
public?Obj(int?x,int?y,int?type,int?dir){
this.x=x;
this.y=y;
this.type=type;
this.dir=dir;
}
}
class?mypane?extends?JPanel{
Obj[]?objs;
public?mypane(Obj[]?objs){
this.objs=objs;
}
public?void?paint(Graphics?g)?{
super.paint(g);
for(int?i=0;iobjs.length;i++){
Obj?obj=objs[i];
drawtank(obj.x,obj.y,?g,?obj.type,?obj.dir);
}
g.dispose();
}
public?void?drawtank(int?x,int?y,Graphics?g,?int?type,int?direct)?{
/*type?為坦克類型,敵方,我方*/
switch(type)?{
case?0://我方坦克,設(shè)置為紅色
g.setColor(Color.red);
break;
case?1://敵方坦克,設(shè)置為藍(lán)色
g.setColor(Color.blue);
break;
}
switch(direct)?{
case?0://坦克方向朝上
g.drawRect(0+x,?0+y,?5,?30);
g.drawRect(5+x,?5+y,?10,20);
g.drawRect(15+x,0+y,?5,30);
g.drawLine(10+x,?15+y,?10+10+x,?15+y);
break;
case?1://坦克方向朝右
g.drawRect(0+x,?0+y,?30,?5);
g.drawRect(5+x,?5+y,?20,?10);
g.drawRect(0+x,?15+y,?30,?5);
g.drawLine(15+x,?10+y,?30+15+x,?10+10+y);
break;
case?2://方向向下
g.drawRect(0+x,?0+y,?5,?30);
g.drawRect(5+x,?5+y,?10,20);
g.drawRect(15+x,0+y,?5,30);
g.drawLine(10+x,?15+y,?10+10+x,?30+15+y);
break;
case?3://方向向左
g.drawRect(0+x,?0+y,?30,?5);
g.drawRect(5+x,?5+y,?20,?10);
g.drawRect(0+x,?15+y,?30,?5);
g.drawLine(15+x,?10+y,?15+x,?10+10+y);
break;
}
}
}
這個是雙緩沖的繪制方法
if (offScreenImage == null)
{
offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT);
}
這里是先在內(nèi)存中創(chuàng)建一個 offScreenImage 的緩沖圖像
gOffScreen.drawImage(imgs, 0, 0, GAME_WIDTH, GAME_HEIGHT,null);
這里是將背景圖片繪制到剛才創(chuàng)建的這塊緩沖區(qū)上
paint(gOffScreen);
g.drawImage(offScreenImage, 0, 0, null);
這里是將緩沖區(qū)再繪制到實際屏幕上
采用雙緩沖可以保證畫面不會閃爍 因為圖片的刷新都是發(fā)生在內(nèi)存區(qū)上的 實際屏幕上用戶是感覺不出來的 所以人眼感覺不到閃爍
游戲名:坦克大戰(zhàn)
設(shè)計思想:我軍坦克、敵軍坦克、炮彈、墻、基地
源代碼:class Tank{} class Wall{} class Base{} class Shell{}
運(yùn)行界面:
相應(yīng)解釋:對不起!您提供的分?jǐn)?shù)有限,暫時只能提供給您這么多回復(fù)
那你還要判斷敵方與敵方的不重疊么?太麻煩了吧。。。
我提一點建議,希望能幫到你
建一個Tank基類,描述坦克的基本屬性,實現(xiàn)防止碰撞的方法,包含移動的抽象方法
建EnemyTank類繼承Tank,重寫移動的方法,由線程控制
建MyTank類繼承Tank,重寫移動的方法,由鍵盤控制
這樣防止碰撞的問題都在Tank類中進(jìn)行處理,根本不會有你說的各種情況
網(wǎng)頁名稱:包含java坦克大戰(zhàn)墻代碼的詞條
轉(zhuǎn)載注明:http://m.kartarina.com/article8/hsdjop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、ChatGPT、小程序開發(fā)、面包屑導(dǎo)航、微信小程序、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)