this.barrelDir = this.dir;
創(chuàng)新互聯(lián)是網(wǎng)站建設(shè)專家,致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,專業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計、做網(wǎng)站、電商網(wǎng)站制作開發(fā)、微信小程序開發(fā)、微信營銷、系統(tǒng)平臺開發(fā),與其他網(wǎng)站設(shè)計及系統(tǒng)開發(fā)公司不同,我們的整合解決方案結(jié)合了恒基網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結(jié)合,且不斷評估并優(yōu)化我們的方案,為客戶提供全方位的互聯(lián)網(wǎng)品牌整合方案!
假設(shè)坦克向右行駛,這時——
this.barrelDir = this.dir = “R”
它們的值都指向了R。
當(dāng)坦克停止時,校驗
if(this.dir != Direction.STOP)
無法通過,所以不會重置 barrelDir 的值,也就是說它仍然等于R。
這時你發(fā)射子彈,barrelDir 值不為STOP,所以它就可以往右邊飛出去了。
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è)置為藍色
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;
}
}
}
坦克大戰(zhàn)源代碼應(yīng)該是個完整的項目吧。
對于完整的帶項目配置文件的java源碼,按步驟操作即可:
File - Import - General
選擇Existing Projects into Workspace,選擇要導(dǎo)入的文件,點擊“finish",OK。
這個是雙緩沖的繪制方法
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ū)上的 實際屏幕上用戶是感覺不出來的 所以人眼感覺不到閃爍