基于java语言的单机版坦克大战源代码Word文档格式.docx
- 文档编号:17370892
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:23
- 大小:18.71KB
基于java语言的单机版坦克大战源代码Word文档格式.docx
《基于java语言的单机版坦克大战源代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于java语言的单机版坦克大战源代码Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
Explode>
explodes=newArrayList<
Tank>
tanks=newArrayList<
publicvoidpaint(Graphicsg){
g.drawString("
missilescount:
"
+missiles.size(),10,50);
explodescount:
+explodes.size(),10,70);
tankscount:
"
+tanks.size(),10,90);
tankslife:
+myTank.getLife(),10,110);
if(tanks.size()<
=0){
for(inti=1;
i<
=5;
i++){
tanks.add(newTank(50+40*i,50,false,Tank.Direction.D,this));
}
}
for(inti=0;
missiles.size();
Missilem=missiles.get(i);
m.hitTanks(tanks);
m.hitTank(myTank);
m.hitWall(w);
//m.hitTank(enemyTank);
m.draw(g);
myTank.draw(g);
myTank.eat(b);
w.draw(g);
b.draw(g);
//enemyTank.draw(g);
explodes.size();
Explodee=explodes.get(i);
e.draw(g);
tanks.size();
Tankt=tanks.get(i);
t.draw(g);
t.collidesWithWall(w);
t.collidesWithTank(myTank);
t.collidesWithTanks(tanks);
}
publicvoidupdate(Graphicsg){
if(offScreenImage==null){
offScreenImage=this.createImage(GAME_WIDTH,GAME_HEIGHT);
GraphicsoffGraphis=offScreenImage.getGraphics();
Colorc=offGraphis.getColor();
offGraphis.setColor(Color.GREEN);
offGraphis.fillRect(0,0,GAME_WIDTH,GAME_HEIGHT);
offGraphis.setColor(c);
paint(offGraphis);
g.drawImage(offScreenImage,0,0,null);
publicvoidlaunchFrame(){
for(inti=1;
=10;
tanks.add(newTank(50+40*i,50,false,Tank.Direction.D,this));
//TankWarTankFrame=newTankWar();
this.setLocation(200,100);
this.setSize(GAME_WIDTH,GAME_HEIGHT);
this.setResizable(false);
this.setBackground(Color.GREEN);
this.addKeyListener(newKeyMonitor());
this.setVisible(true);
newThread(newPaintThread()).start();
this.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
*@author启动一个线程,让其不断的重画
privateclassPaintThreadimplementsRunnable{
publicvoidrun(){
try{
while(true){
repaint();
Thread.sleep(100);
}
}catch(InterruptedExceptione){
e.printStackTrace();
*@author响应键盘操作
privateclassKeyMonitorextendsKeyAdapter{
publicvoidkeyReleased(KeyEvente){
myTank.keyReleased(e);
publicvoidkeyPressed(KeyEvente){
//System.out.println("
ok"
);
myTank.keyPressed(e);
*主函数
*@paramargs
publicstaticvoidmain(String[]args){
newTankWar().launchFrame();
}
/******************************************************************************添加坦克的类
*****************************************************************************/
publicclassTank{
publicstaticfinalintTANK_WIDTH=30,TANK_HEIGHT=30;
publicstaticfinalintXSPEED=5;
publicstaticfinalintYSPEED=5;
TankWartc;
intx,y;
intoldX,oldY;
booleanbL=false,bU=false,bR=false,bD=false;
enumDirection{L,LU,U,RU,R,RD,D,LD,STOP};
Directiondir=Direction.STOP;
DirectionptDir=Direction.R;
privateBloodBarbb=newBloodBar();
privateintlife=100;
publicintgetLife(){
returnlife;
publicvoidsetLife(intlife){
this.life=life;
privatebooleangood;
publicbooleanisGood(){
returngood;
privatebooleanlive=true;
publicstaticRandomrn=newRandom();
privateintstep=rn.nextInt(20)+3;
publicbooleanisLive(){
returnlive;
publicvoidsetLive(booleanlive){
this.live=live;
publicTank(intx,inty,booleangood){
this.x=x;
this.y=y;
this.oldX=x;
this.oldY=y;
this.good=good;
}
publicTank(intx,inty,booleangood,Directiondir,TankWartc){
this(x,y,good);
this.dir=dir;
this.tc=tc;
publicvoiddraw(Graphicsg){
if(!
live){
if(!
good)tc.tanks.remove(this);
return;
Colorc=g.getColor();
if(good)g.setColor(Color.RED);
elseg.setColor(Color.BLUE);
g.fillOval(x,y,TANK_WIDTH,TANK_HEIGHT);
g.setColor(c);
if(good)bb.draw(g);
switch(ptDir){
caseL:
g.drawLine(x+TANK_WIDTH/2,y+TANK_HEIGHT/2,x-7,y+TANK_HEIGHT/2);
break;
caseLU:
g.drawLine(x+TANK_WIDTH/2,y+TANK_HEIGHT/2,x,y);
caseU:
g.drawLine(x+TANK_WIDTH/2,y+TANK_HEIGHT/2,x+TANK_WIDTH/2,y-7);
caseRU:
g.drawLine(x+TANK_WIDTH/2,y+TANK_HEIGHT/2,x+TANK_WIDTH,y);
caseR:
g.drawLine(x+TANK_WIDTH/2,y+TANK_HEIGHT/2,x+TANK_WIDTH+7,y+TANK_HEIGHT/2);
caseRD:
g.drawLine(x+TANK_WIDTH/2,y+TANK_HEIGHT/2,x+TANK_WIDTH,y+TANK_HEIGHT);
caseD:
g.drawLine(x+TANK_WIDTH/2,y+TANK_HEIGHT/2,x+TANK_WIDTH/2,y+TANK_HEIGHT+7);
caseLD:
g.drawLine(x+TANK_WIDTH/2,y+TANK_HEIGHT/2,x,y+TANK_HEIGHT);
move();
publicvoidmove(){
switch(dir){
x-=XSPEED;
y-=YSPEED;
x+=XSPEED;
y+=YSPEED;
caseSTOP:
if(this.dir!
=Direction.STOP){
this.ptDir=this.dir;
good){
Direction[]dirs=Direction.values();
if(step==0){
step=rn.nextInt(20)+3;
intr=rn.nextInt(dirs.length);
dir=dirs[r];
step--;
if(rn.nextInt(40)>
37)this.fire();
if(x<
10)x=10;
if(y<
35)y=35;
if(x>
TankWar.GAME_WIDTH-Tank.TANK_WIDTH-8)x=TankWar.GAME_WIDTH-Tank.TANK_WIDTH-8;
if(y>
TankWar.GAME_HEIGHT-Tank.TANK_HEIGHT-8)
y=TankWar.GAME_HEIGHT-Tank.TANK_HEIGHT-8;
publicvoidkeyPressed(KeyEvente){
intkey=e.getKeyCode();
switch(key){
caseKeyEvent.VK_F2:
live=true;
life=100;
caseKeyEvent.VK_LEFT:
bL=true;
caseKeyEvent.VK_UP:
bU=true;
caseKeyEvent.VK_RIGHT:
bR=true;
caseKeyEvent.VK_DOWN:
bD=true;
changeDir();
publicvoidkeyReleased(KeyEvente){
caseKeyEvent.VK_CONTROL:
fire();
bL=false;
bU=false;
bR=false;
bD=false;
caseKeyEvent.VK_A:
superFire();
publicvoidchangeDir(){
if(bL&
&
!
bU&
bR&
bD)dir=Direction.L;
elseif(bL&
bU&
bD)dir=Direction.LU;
elseif(!
bL&
bD)dir=Direction.U;
bR&
bD)dir=Direction.RU;
bD)dir=Direction.R;
bD)dir=Direction.RD;
bD)dir=Direction.D;
bD)dir=Direction.LD;
bD)dir=Direction.STOP;
publicMissilefire(){
live)returnnull;
intx=this.x+Tank.TANK_WIDTH/2-Missile.MISSILE_WIDTH/2;
inty=this.y+Tank.TANK_HEIGHT/2-Missile.MISSILE_HEIGHT/2;
Missilem=newMissile(x,y,ptDir,good,this.tc);
tc.missiles.add(m);
returnm;
publicMissilefire(Directiondir){
Missilem=newMissile(x,y,dir,good,this.tc);
privatevoidsuperFire(){
Directiondirs[]=Direction.values();
dirs.length-1;
//tc.missiles.add(fire(dirs[i]));
fire(dirs[i]);
publicRectanglegetRect(){
returnnewRectangle(x,y,this.TANK_WIDTH,this.TANK_HEIGHT);
publicbooleancollidesWithWall(Wallw){
if(this.live&
this.getRect().intersects(w.getRect())){
//this.dir=Direction.STOP;
stay();
returntrue;
returnfalse;
publicbooleancollidesWithTank(Tankt){
if(this!
=t){
if(this.live&
t.live&
this.getRect().intersects(t.getRect())){
this.stay();
t.stay();
returntrue;
publicbooleancollidesWithTanks(java.util.List<
tanks){
if(collidesWithTank(t))returntrue;
publicvoidstay(){
x=oldX;
y=oldY;
pu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 java 语言 单机 坦克 大战 源代码