坦克大战源代码.docx
- 文档编号:4973763
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:45
- 大小:21.52KB
坦克大战源代码.docx
《坦克大战源代码.docx》由会员分享,可在线阅读,更多相关《坦克大战源代码.docx(45页珍藏版)》请在冰点文库上搜索。
坦克大战源代码
/**
坦克大战
*/
packagecom.tankgame1;
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
importjava.util.*;
publicclassTankGame1_0extendsJFrameimplementsKeyListener,ActionListener{
GamePanelgp;
StartPanelsp;
JMenuBarjmb=null;
JMenujm=null,jm1=null;
JMenuItemjmi1,jmi2,jmi3,jmi4;
TankGame1_0(){
jmb=newJMenuBar();
jm=newJMenu("文件");
jm1=newJMenu("游戏设置");
jmi1=newJMenuItem("新游戏");
jmi1.setActionCommand("NEW");
jmi1.addActionListener(this);
jmi2=newJMenuItem("暂停");
jmi2.setActionCommand("PAUSE");
jmi2.addActionListener(this);
jmi3=newJMenuItem("继续");
jmi3.setActionCommand("CONTINUE");
jmi3.addActionListener(this);
jmi4=newJMenuItem("退出");
jmi4.setActionCommand("QUIT");
jmi4.addActionListener(this);
jm.add(jmi1);
jm.add(jmi2);
jm.add(jmi3);
jm.add(jmi4);
jmb.add(jm);
jmb.add(jm1);
//gp=newGamePanel();
//Threadt=newThread(gp);
//t.start();
////注册一下接收键盘的动作
//this.addKeyListener(this);
////设置界面
//this.add(gp);
sp=newStartPanel();
Threadt=newThread(sp);
t.start();
this.add(sp);
this.setJMenuBar(jmb);
this.setBounds(180,20,305,530);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicstaticvoidmain(String[]args){
TankGame1_0tg=newTankGame1_0();
}
@Override
publicvoidkeyPressed(KeyEventarg0){
if(!
Record.pause){
switch(arg0.getKeyCode()){
caseKeyEvent.VK_UP:
if(!
gp.mtk.isTouchTank()&&!
gp.mtk.isTouchRiver())
gp.mtk.moveUp();
gp.mtk.setDirect(0);
break;
caseKeyEvent.VK_DOWN:
if(!
gp.mtk.isTouchTank()&&!
gp.mtk.isTouchRiver())
gp.mtk.moveDown();
gp.mtk.setDirect
(2);
break;
caseKeyEvent.VK_LEFT:
if(!
gp.mtk.isTouchTank()&&!
gp.mtk.isTouchRiver())
gp.mtk.moveLeft();
gp.mtk.setDirect(3);
break;
caseKeyEvent.VK_RIGHT:
if(!
gp.mtk.isTouchTank()&&!
gp.mtk.isTouchRiver())
gp.mtk.moveRight();
gp.mtk.setDirect
(1);
break;
}
if(arg0.getKeyCode()=='A'||arg0.getKeyCode()=='a'){
gp.mtk.kitEnemy();
}
gp.repaint();
}
}
@Override
publicvoidkeyReleased(KeyEventarg0){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidkeyTyped(KeyEventarg0){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidactionPerformed(ActionEventarg0){
if(arg0.getActionCommand().equals("NEW")){
this.remove(sp);
gp=newGamePanel();
Threadt=newThread(gp);
t.start();
//注册一下接收键盘的动作
this.addKeyListener(this);
//设置界面
this.add(gp);
this.setVisible(true);
}
if(arg0.getActionCommand().equals("PAUSE")){
Record.pause=true;
}
if(arg0.getActionCommand().equals("CONTINUE")){
Record.pause=false;
}
if(arg0.getActionCommand().equals("QUIT")){
System.exit(0);
}
}
}
classGamePanelextendsJPanelimplementsRunnable{
//定义的我的坦克
MyTankmtk;
Riverriver=newRiver(50,300,200,30);
Vector
SoilWalls=null;
Vector
SteelWallst=null;
Imageim1=null;
Imageim2=null;
Imageim3=null;
Imageim4=null;
Imageim5=null;
Vector
//定义敌人的坦克
intdrtssize=4;
Vector
EnemyTankdt=null;
GamePanel(){
//初始化爆炸的图片
im1=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb_1.gif"));
im2=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb_2.gif"));
im3=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb_3.gif"));
im4=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/img2.jpg"));
im5=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/img1.jpg"));
//土墙的初始化
for(inti=5;i<24;i++,i++){
s=newSoilWall(i*10,120);
sw.add(s);
}
//钢墙的初始化
for(inti=5;i<24;i++,i++){
st=newSteelWall(i*10,200);
stw.add(st);
}
//我的坦克初始化
mtk=newMyTank(135,350,0,0);
mtk.setStw(stw);
mtk.setSw(sw);
//敌人的坦克初始化
drts=newVector
for(inti=0;i EnemyTankdt=newEnemyTank((i+1)*50,10,2,1); EnemyTankdt1=newEnemyTank((i+1)*50,60,2,1); Threadt=newThread(dt); Threadt1=newThread(dt1); t.start(); t1.start(); dt.setEts(drts); dt1.setEts(drts); dt.setR(river); dt1.setR(river); dt.setSw(sw); dt.setStw(stw); mtk.setEts(drts); mtk.setR(river); drts.add(dt); drts.add(dt1); } } publicvoidpaint(Graphicsg){ super.paint(g); //游戏的操作背景色 g.setColor(Color.BLACK); //g.fillRect(0,0,300,400); g.drawImage(im4,0,0,300,400,this); //让tank接收到panel上的对象 mtk.setEts(drts); if(river! =null) mtk.setR(river); //画出河流 if(river! =null) g.drawImage(im5,river.x,river.y,river.x1,river.y1,this); //画出墙来 g.setColor(Color.yellow); for(inti=0;i s=sw.get(i); if(s.isLive) g.fill3DRect(s.x,s.y,15,20,true); else sw.remove(s); } g.setColor(Color.WHITE); for(inti=0;i st=stw.get(i); if(st.isLive) g.fill3DRect(st.x,st.y,15,20,true); else stw.remove(st); } //画出炸弹 for(inti=0;i Bombbomb=bb.get(i); if(bomb.isLive==true){ bomb.times--; if(bomb.times>14) g.drawImage(im1,bomb.x,bomb.y,30,30,this); elseif(bomb.times>7) g.drawImage(im2,bomb.x,bomb.y,30,30,this); elseif(bomb.times>0) g.drawImage(im3,bomb.x,bomb.y,30,30,this); } if(bomb.times==0) {bomb.isLive=false; bb.remove(bomb); } } //画我的坦克 if(Record.MyLife>0) drawTank(mtk.getX(),mtk.getY(),mtk.getDirect(),0,g); if(mtk.isLive==false) {Record.MyLife--; mtk=newMyTank(135,350,0,0); mtk.setSw(sw); mtk.setStw(stw);} //画我的坦克的子弹 g.setColor(Color.white); for(inti=0;i Bulletb=mtk.bs.get(i); if(b! =null&&b.isLive==true) g.drawOval(b.getX(),b.getY(),2,2); if(b.isLive==false) mtk.bs.remove(b); } //画出敌人的坦克 for(inti=0;i EnemyTankdt=drts.get(i); if(dt.isLive==true&&dt! =null) drawTank(dt.getX(),dt.getY(),dt.getDirect(),dt.getType(),g); if(dt.isLive==false){ drts.remove(dt); Record.EnemyLife--; if(Record.EnemyLife>7){ dt=newEnemyTank(120,10,2,1); dt.setSw(sw); dt.setStw(stw); Threadt=newThread(dt); t.start(); drts.add(dt); } } } //画出敌人的坦克的子弹 g.setColor(Color.white); for(inti=0;i EnemyTankdt=drts.get(i); if(dt.isLive==true) for(intj=0;j Bulletb=dt.bs.get(j); if(b.isLive) g.drawOval(b.getX(),b.getY(),2,2); if(b.isLive==false) dt.bs.remove(b); } } //显示游戏结束画面 if(Record.EnemyLife<=0||Record.MyLife<=0) { g.setColor(Color.YELLOW); g.setFont(newFont("宋体",Font.BOLD,20)); g.drawString("GAMEOVER! ",100,100); Record.pause=true; } //显示游戏中的各种提示信息 showInfo(g); } //显示信息的方法 publicvoidshowInfo(Graphicsg){ Colorc=null; c=g.getColor(); this.drawTank(50,420,0,0,g); this.drawTank(150,420,0,1,g); g.setColor(Color.BLACK); g.setFont(newFont("黑体",Font.BOLD,20)); g.drawString(Record.MyLife+"",80,435); g.drawString(Record.EnemyLife+"",185,435); g.setColor(c); } //用于绘制坦克 publicvoiddrawTank(intx,inty,intdirect,inttype,Graphicsg){ switch(type){ case0: g.setColor(Color.YELLOW); break; case1: g.setColor(Color.green); break; } switch(direct){ case0: g.fill3DRect(x,y,5,30,false); g.draw3DRect(x+5,y+5,10,20,true); g.fill3DRect(x+15,y,5,30,false); g.fillOval(x+7,y+8,6,13); g.drawRect(x+10,y-4,1,17); break; case2: g.fill3DRect(x,y,5,30,false); g.draw3DRect(x+5,y+5,10,20,true); g.fill3DRect(x+15,y,5,30,false); g.fillOval(x+7,y+8,6,13); g.drawRect(x+10,y+13,1,17); break; case1: g.fill3DRect(x,y,30,5,false); g.draw3DRect(x+5,y+5,20,10,true); g.fill3DRect(x,y+15,30,5,false); g.fillOval(x+9,y+7,13,6); g.drawRect(x+15,y+9,17,1); break; case3: g.fill3DRect(x,y,30,5,false); g.draw3DRect(x+5,y+5,20,10,true); g.fill3DRect(x,y+15,30,5,false); g.fillOval(x+9,y+7,13,6); g.drawRect(x-2,y+9,17,1); break; } } publicvoidkill(Tankt,Bulletb){ switch(t.direct){ case0: case2: if(b.x>t.x&&b.y>t.y&&b.x {t.isLive=false; b.isLive=false; this.bb.add(newBomb(t.getX(),t.getY())); } break; case1: case3: if(b.x>t.x&&b.y>t.y&&b.x {t.isLive=false; b.isLive=false; this.bb.add(newBomb(t.getX(),t.getY())); } break; } } publicvoidkillWall(Wallw,Bulletb){ if(b.x>=w.x&&b.y>=w.y&&b.x<=w.x+15&&b.y<=w.y+20) { w.life--; b.isLive=false; if(w.life<=0) w.isLive=false; } } @Override publicvoidrun(){ while(true){ this.repaint(); try{ Thread.sleep(10); }catch(InterruptedExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } if(mtk! =null) for(inti=0;i Bulletb=mtk.bs.get(i); if(b.isLive){ for(intj=0;j Tankt=drts.get(j); if(t.isLive){ this.kill(t,b); } } } } for(inti=0;i Tanket=drts.get(i); if(et.isLive){ for(intj=0;j Bulletb=et.bs.get(j); if(b.isLive&&b! =null){ this.kill(mtk,b); } } } } for(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 坦克 大战 源代码