java写的坦克大战简易版.docx

上传人:b****5 文档编号:6806348 上传时间:2023-01-10 格式:DOCX 页数:44 大小:33.15KB
下载 相关 举报
java写的坦克大战简易版.docx_第1页
第1页 / 共44页
java写的坦克大战简易版.docx_第2页
第2页 / 共44页
java写的坦克大战简易版.docx_第3页
第3页 / 共44页
java写的坦克大战简易版.docx_第4页
第4页 / 共44页
java写的坦克大战简易版.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

java写的坦克大战简易版.docx

《java写的坦克大战简易版.docx》由会员分享,可在线阅读,更多相关《java写的坦克大战简易版.docx(44页珍藏版)》请在冰豆网上搜索。

java写的坦克大战简易版.docx

java写的坦克大战简易版

MyTankGame2.java

 

packagetest;

importjavax.swing.*;

importjava.awt.*;

importjava.awt.event.*;

//importjava.io.*;

importjava.util.*;

 

classMyTankGame2extendsJFrameimplementsActionListener

{

MyPanelmp=null;

//定义一个开始的面板

MyStartPanelmsp=null;

//做出我需要的菜单

JMenuBarjmb=null;

//开始游戏

JMenujm1=null;

JMenuItemjmi1=null;

//退出系统

JMenuItemjmi2=null;

//存盘退出

JMenuItemjmi3=null;

JMenuItemjmi4=null;

publicstaticvoidmain(String[]args)

{

//System.out.println("HelloWorld!

");

MyTankGame2mtg=newMyTankGame2();

}

//构造方法

publicMyTankGame2()

{

//创建菜单及菜单选项

jmb=newJMenuBar();

jm1=newJMenu("游戏(G)");

//设置助记符

jm1.setMnemonic('G');

jmi1=newJMenuItem("开始新游戏(N)");

jmi2=newJMenuItem("退出游戏(E)");

jmi3=newJMenuItem("存盘退出游戏");

jmi4=newJMenuItem("继续上局游戏");

jmi4.addActionListener(this);

jmi4.setActionCommand("continueGame");

jmi3.addActionListener(this);

jmi3.setActionCommand("saveExit");

jmi2.setMnemonic('E');

//对jmi1进行响应

jmi1.addActionListener(this);

jmi1.setActionCommand("newGame");

jmi2.addActionListener(this);

jmi2.setActionCommand("exit");

jm1.add(jmi1);

jm1.add(jmi2);

jm1.add(jmi3);

jm1.add(jmi4);

jmb.add(jm1);

msp=newMyStartPanel();

Threadt=newThread(msp);

t.start();

this.setJMenuBar(jmb);

this.add(msp);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setSize(600,450);

this.setVisible(true);

}

@Override

publicvoidactionPerformed(ActionEvente){

//对用户不同的点击进行不同的处理

if(e.getActionCommand().equals("newGame"))

{

mp=newMyPanel("newGame");

Threadt=newThread(mp);

t.start();

//先删除旧的面板

this.remove(msp);

this.add(mp);

//注册监听

this.addKeyListener(mp);

//显示

this.setVisible(true);

}

elseif(e.getActionCommand().equals("exit"))

{//保存击毁敌人的数量

Recorder.keepRecording();

System.exit(0);

}

//对存盘退出做处理

elseif(e.getActionCommand().equals("saveExit"))

{

//工作

Recorderre=newRecorder();

re.setEts(mp.ets);

//保存击毁敌人的数量和敌人的坐标

re.keepRecAndEnemyTank();

//退出

System.exit(0);

}

elseif(e.getActionCommand().equals("continueGame"))

{//

mp=newMyPanel("con");

//mp.flag=;

Threadt=newThread(mp);

t.start();

//先删除旧的面板

this.remove(msp);

this.add(mp);

//注册监听

this.addKeyListener(mp);

//显示

this.setVisible(true);

}

 

}

}

 

classMyStartPanelextendsJPanelimplementsRunnable

{inttimes=0;

publicvoidpaint(Graphicsg)

{

super.paint(g);

g.fillRect(0,0,400,300);

//提示信息

if(times%2==0)

{

g.setColor(Color.yellow);

//开关信息的字体

FontmyFont=newFont("华文新魏",Font.BOLD,30);

g.setFont(myFont);

g.drawString("stage:

1",150,140);

}

}

@Override

publicvoidrun(){

//TODOAuto-generatedmethodstub

while(true)

{

//休眠

try{

Thread.sleep(100);

}catch(Exceptione){

//TODO:

handleexception

}

times++;

//重画

this.repaint();

}

}

}

//我的面板

classMyPanelextendsJPanelimplementsKeyListener,Runnable

{

//定义我的坦克

Herohero=null;

//判断继续上局还是新游戏

//定义敌人的坦克组

Vectorets=newVector();

Vectornodes=newVector();

//定义炸弹集合

Vectorbombs=newVector();

intenSize=5;

//定义三张图片

Imageimage1=null;

Imageimage2=null;

Imageimage3=null;

//构造方法

publicMyPanel(Stringflag)

{

//恢复记录

Recorder.getRecording();

hero=newHero(30,231);

if(flag.equals("newGame"))

{

//初始化敌人的坦克

for(inti=0;i

{//创建一辆敌人的坦克对象

EnemyTanket=newEnemyTank((i+1)*50,0);

et.setColor(0);

et.setDirect

(2);

//将MyPanel的敌人坦克向量交给该敌人坦克

et.setEts(ets);

//启动敌人的坦克

Threadt=newThread(et);

t.start();

//给敌人的坦克添加一颗子弹

Shots=newShot(et.x+10,et.y+30,2,1);

et.ss.add(s);

newThread(s).start();

ets.add(et);//加入

}

}

else

{

nodes=newRecorder().getNodesAndEnNums();

//初始化敌人的坦克

for(inti=0;i

{

Nodenode=nodes.get(i);

//创建一辆敌人的坦克对象

EnemyTanket=newEnemyTank(node.x,node.y);

et.setColor(0);

et.setDirect(node.direct);

//将MyPanel的敌人坦克向量交给该敌人坦克

et.setEts(ets);

//启动敌人的坦克

Threadt=newThread(et);

t.start();

//给敌人的坦克添加一颗子弹

Shots=newShot(et.x+10,et.y+30,2,1);

et.ss.add(s);

newThread(s).start();

ets.add(et);//加入

}

}

/*try{

image1=ImageIO.read(newFile("/bomb_1.gif"));

image2=ImageIO.read(newFile("/bomb_2.gif"));

image3=ImageIO.read(newFile("/bomb_3.gif"));

}catch(Exceptione){

e.printStackTrace();

//TODO:

handleexception

}*/

//播放开战声音

AePlayWaveapw=newAePlayWave("F:

\\myjava\\day9\\坦克大战\\TankGamae13\\src\\111.wav");

apw.start();

//初始化图片

image1=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb_1.gif"));

image2=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb_2.gif"));

image3=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb_3.gif"));

}

//画出提示信息

publicvoidshowInfo(Graphicsg)

{

//画出提示信息坦克(该坦克不参与战斗)

this.drawTank(100,320,g,0,0);

g.setColor(Color.black);

g.drawString(Recorder.getEnNum()+"",128,343);

this.drawTank(165,320,g,0,1);

g.setColor(Color.black);

g.drawString(Recorder.getMyLife()+"",195,343);

//画出玩家的总成绩

g.setColor(Color.black);

Fontf=newFont("宋体",Font.BOLD,20);

g.setFont(f);

g.drawString("您的总成绩",410,25);

this.drawTank(420,60,g,0,0);

g.setColor(Color.black);

g.drawString(Recorder.getAllEnNum()+"",455,80);

}

//重写paint函数

publicvoidpaint(Graphicsg)

{

super.paint(g);

g.fillRect(0,0,400,300);

//画出提示信息

this.showInfo(g);

//画出自己的坦克

if(hero.isLive)

{

this.drawTank(hero.getX(),hero.getY(),g,hero.getDirect(),1);

}

//从ss中取出每一颗子弹并绘制

for(inti=0;i

{

ShotmyShot=hero.ss.get(i);

//画出子弹

if(myShot!

=null&&myShot.isLive==true)

{

g.draw3DRect(myShot.x,myShot.y,1,1,false);

}

if(myShot.isLive==false)

{

//从ss中删除掉该子弹

hero.ss.remove(myShot);

}

}

//画出炸弹

for(inti=0;i

{

Bombb=bombs.get(i);

if(b.life>6)

{

g.drawImage(image1,b.x,b.y,30,30,this);

}

elseif(b.life>3)

{

g.drawImage(image2,b.x,b.y,30,30,this);

}

else

{

g.drawImage(image3,b.x,b.y,30,30,this);

}

//让b的生命值减小

b.lifeDown();

if(b.life==0)

{//把炸弹从向量中去掉

bombs.remove(b);

}

}

//画出敌人的坦克

for(inti=0;i

{EnemyTanket=ets.get(i);

if(et.isLive)

{

this.drawTank(et.getX(),et.getY(),g,et.getDirect(),0);

//顺便画出敌人的子弹

for(intj=0;j

{

//取出子弹

ShotenemyShot=et.ss.get(j);

if(enemyShot.isLive)

{

g.draw3DRect(enemyShot.x,enemyShot.y,1,1,false);

}

else

{//如果死亡了,就从Vextor中删除掉

et.ss.remove(enemyShot);

}

}

}

}

}

//判断我的子弹是否会击中敌人的坦克

publicvoidhitEnemyTank()

{

//判断是否会击中

for(inti=0;i

{

//取出子弹

ShotmyShot=hero.ss.get(i);

//判断子弹是否有效

if(myShot.isLive)

{

//取出每一个敌人坦克与之匹配

for(intj=0;j

{

//取出坦克

EnemyTanket=ets.get(j);

if(et.isLive)

{

if(this.hitTank(myShot,et))

{//减少敌人数量

Recorder.reduceEnNum();

//增加我的记录

Recorder.addEnEnum();

}

}

}

}

}

}

//我是否被击中

publicvoidhitMe()

{

//取出每一个敌人的坦克

for(inti=0;i

{

//取出坦克

EnemyTanket=ets.get(i);

//取出每颗子弹

for(intj=0;j

{//取出子弹

ShotenemyShot=et.ss.get(j);

if(hero.isLive)

{

if(this.hitTank(enemyShot,hero))

{

//待写

}

}

}

}

}

//画出一个专门判断子弹是否击中敌人坦克的函数

publicbooleanhitTank(Shots,Tanket)

{

booleanb2=false;

//判断该坦克的方向

switch(et.direct)

{

//敌人坦克的方向是向上或者向下

case0:

case2:

if(s.x>et.x&&s.xet.y&&s.y

{

//击中

//子弹死亡

s.isLive=false;

//敌人坦克死亡

et.isLive=false;

b2=true;

//System.out.println("hytfyfrujyg");

//创建一颗炸弹放入Vector

Bombb=newBomb(et.x,et.y);

bombs.add(b);

}

break;

case1:

case3:

if(s.x>et.x&&s.xet.y&&s.y

{

//击中

//子弹死亡

s.isLive=false;

//敌人坦克死亡

et.isLive=false;

b2=true;

Bombb=newBomb(et.x,et.y);

bombs.add(b);

}

break;

}

returnb2;

}

//画出坦克的函数(扩展)

publicvoiddrawTank(intx,inty,Graphicsg,intdirection,inttype)

{

//判断类型

switch(type)

{

case0:

g.setColor(Color.CYAN);break;

case1:

g.setColor(Color.yellow);break;

}

//判断方向

switch(direction)

{

//向上走

case0:

//g.setColor(Color.CYAN);

//画出我的坦克(到时再封装成一个函数)

//1.画出左边的矩形

g.fill3DRect(x,y,5,30,false);

//2.画出右边边的矩形

g.fill3DRect(x+15,y,5,30,false);

//3画出中间的矩形

g.fill3DRect(x+5,y+5,10,20,false);

//4画圆形

g.fillOval(x+5,y+10,10,10);

//5.画出线

g.drawLine(x+10,y+15,x+10,y);

break;

case1:

//向右

g.fill3DRect(x,y,30,5,false);

g.fill3DRect(x,y+15,30,5,false);

g.fill3DRect(x+5,y+5,20,10,false);

g.fillOval(x+10,y+5,10,10);

g.drawLine(x+15,y+10,x+30,y+10);

break;

case2:

//向下

g.fill3DRect(x,y,5,30,false);

//2.画出右边边的矩形

g.fill3DRect(x+15,y,5,30,false);

//3画出中间的矩形

g.fill3DRect(x+5,y+5,10,20,false);

//4画圆形

g.fillOval(x+5,y+10,10,10);

//5.画出线

g.drawLine(x+10,y+15,x+10,y+30);

break;

case3:

//向左

g.fill3DRect(x,y,30,5,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1