java桌面游戏坦克大战框架板.docx

上传人:b****3 文档编号:3664314 上传时间:2022-11-24 格式:DOCX 页数:37 大小:22.30KB
下载 相关 举报
java桌面游戏坦克大战框架板.docx_第1页
第1页 / 共37页
java桌面游戏坦克大战框架板.docx_第2页
第2页 / 共37页
java桌面游戏坦克大战框架板.docx_第3页
第3页 / 共37页
java桌面游戏坦克大战框架板.docx_第4页
第4页 / 共37页
java桌面游戏坦克大战框架板.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

java桌面游戏坦克大战框架板.docx

《java桌面游戏坦克大战框架板.docx》由会员分享,可在线阅读,更多相关《java桌面游戏坦克大战框架板.docx(37页珍藏版)》请在冰豆网上搜索。

java桌面游戏坦克大战框架板.docx

java桌面游戏坦克大战框架板

/**

*@version:

V5.0

*@function:

坦克大战游戏

*1、画出坦克---绘图知识

*2、坦克能够上下左右移动,创建敌人坦克---事件监听处理机制

*3、坦克可以发射子弹---线程知识

*4、a、坦克子弹可以连发(一次最多10颗子弹)---使用Vector泛型集合类

*b、击中敌人坦克后,敌人坦克消失

*c、坦克消失的时候,出现爆炸效果---面板绘制图片

*d、敌人的坦克可以在面板范围内随机移动

*e、敌人坦克可以发射子弹

*f、敌人的坦克可以击中我的坦克

*5、敌人坦克运动中的时候不可以重叠

*6、可以分关,提示第几关//字体闪烁用到线程

*7、添加菜单-开始新游戏

*8、添加菜单-退出游戏,退出游戏保存当前击中敌人坦克的数量---利用I/O编程

*/

packagecom.liu;

importjava.awt.*;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.KeyEvent;

importjava.awt.event.KeyListener;

importjava.awt.image.BufferedImage;

importjava.io.BufferedReader;

importjava.io.BufferedWriter;

importjava.io.File;

importjava.io.FileNotFoundException;

importjava.io.FileReader;

importjava.io.FileWriter;

importjava.io.IOException;

importjava.util.Vector;

importjavax.imageio.ImageIO;

importjavax.swing.*;

importjavax.swing.plaf.SliderUI;

publicclassMyTankGame_5extendsJFrameimplementsActionListener{

MyPanelmp=null;

MyStartPanelmsp=null;

//定义菜单

JMenuBarjmb=null;

JMenujm1=null;

JMenuItemjmi1=null;

//定义二级菜单-退出游戏

JMenuItemjmi2=null;

 

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

MyTankGame_5mtk=newMyTankGame_5();

}

publicMyTankGame_5(){

 

msp=newMyStartPanel();

this.add(msp);

//创建菜单

jmb=newJMenuBar();

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

jm1.setMnemonic('G');

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

jmi1.setMnemonic('N');

//创建二级菜单-退出游戏

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

jmi2.setMnemonic('E');

//开始新游戏事件注册

jmi1.addActionListener(this);

jmi1.setActionCommand("newgame");

//退出游戏事件注册

jmi2.addActionListener(this);

jmi2.setActionCommand("exit");

//添加组件

jm1.add(jmi1);

jm1.add(jmi2);

jmb.add(jm1);

this.setJMenuBar(jmb);

Threadtr=newThread(msp);

tr.start();

this.setTitle("坦克大战");

this.setSize(800,600);

this.setLocation(200,100);

this.setResizable(false);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

/*

mp=newMyPanel();

this.add(mp);//讲面板添加到顶层容器中

//注册监听

this.addKeyListener(mp);

//启动该线程

Threadt=newThr

ead(mp);

t.start();

this.setTitle("坦克大战");

this.setSize(600,400);

this.setLocation(300,300);

this.setResizable(false);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

*/

}

@Override

publicvoidactionPerformed(ActionEvente){

//TODOAuto-generatedmethodstub

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

{

if(mp!

=null)

{

this.remove(mp);

}

mp=newMyPanel();

this.remove(msp);

this.add(mp);//讲面板添加到顶层容器中

//注册监听

this.addKeyListener(mp);

//启动该线程

Threadt=newThread(mp);

t.start();

this.setTitle("坦克大战");

//this.setSize(600,400);

//this.setLocation(200,200);

this.setResizable(false);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

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

{

//退出游戏前进行数据保存,保存的数据位我的总成绩数,即总共击中的坦克数

Record.saveRecord();

System.exit(0);

}

}

}

//记录类,可以保存玩家的设置

classRecord{

privatestaticintMyTankNum=3;//我的坦克剩余生命

privatestaticintEnemyTankNum=20;//敌人坦克的数量

privatestaticintShotEnemyNum=0;//击中的敌人坦克数量

//定义字符流,缓冲字符流

staticFileWriterfw=null;

staticBufferedWriterbw=null;

privatestaticFileReaderfr=null;

privatestaticBufferedReaderbr=null;

//游戏退出时,讲击中坦克总数写到文件中

publicstaticvoidsaveRecord(){

try{

fw=newFileWriter("d:

/record.txt");

bw=newBufferedWriter(fw);

bw.write(ShotEnemyNum+"\r\n");

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}finally

{

try{

bw.close();

fw.close();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

}

//读取记录函数

publicstaticvoidgetRecord(){

try{

fr=newFileReader("d:

/record.txt");

br=newBufferedReader(fr);

try{

Strings1=br.readLine();

ShotEnemyNum=Integer.parseInt(s1);

System.out.println(ShotEnemyNum);

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}catch(FileNotFoundExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}finally

{

try{

br.close();

fr.close();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

 

}

publicstaticintgetMyTankNum(){

returnMyTankNum;

}

publicstaticvoidsetMyTankNum(intmyTankNum){

MyTankNum=myTankNum;

}

publicstaticintgetEnemyTankNum(){

returnEnemyTankNum;

}

publicstaticvoidsetEnemyTankNum(intenemyTankNum){

EnemyTankNum=enemyTankNum;

}

//我的坦克减少

 

publicstaticvoidreduceMT(){

MyTankNum--;

}

//敌人坦克减少

publicstaticvoidreduceET(){

EnemyTankNum--;

}

//射中坦克数量加1

publicstaticvoidaddET(){

ShotEnemyNum++;

}

publicstaticintgetShotEnemyNum(){

returnShotEnemyNum;

}

publicstaticvoidsetShotEnemyNum(intshotEnemyNum){

ShotEnemyNum=shotEnemyNum;

}

}

//创建闯关面板

classMyStartPanelextendsJPanelimplementsRunnable{

inttimeTemp=0;

publicvoidpaint(Graphicsg){

super.paint(g);

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

if(timeTemp%2==0)

{

g.setColor(Color.YELLOW);

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

g.setFont(ft);

g.drawString("第1关",250,180);

}

}

@Override

publicvoidrun(){

//TODOAuto-generatedmethodstub

while(true)

{

try{

Thread.sleep(300);

}catch(InterruptedExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

this.timeTemp++;

this.repaint();

}

}

}

//我的面板JPanel

classMyPanelextendsJPanelimplementsKeyListener,Runnable{

//定义我的一个坦克

MyTankmytank=null;

//定义敌人的坦克

Vector<EnemyTank>ets=newVector<EnemyTank>();

intEnemyNum=5;//定义敌人坦克的数量

//定义炸弹集合

Vector<Bomb>bb=newVector<Bomb>();

 

//定义三张图片

Imageimg1=null;

Imageimg2=null;

Imageimg3=null;

 

publicvoidpaint(Graphicsg){//覆盖父类中的paint方法

super.paint(g);//首先继承父类的paint方法,然后再添加自己的功能

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

//画提示信息

drawInfo(g);

//画我的坦克

if(mytank.isLive)

{

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

}

//画我的子弹

for(inti=0;i<mytank.ss.size();i++)

{

shotmyshot=mytank.ss.get(i);

if(myshot!

=null&&myshot.isLive==true)

{

g.draw3DRect(myshot.getX(),myshot.getY(),1,1,false);

}

//如果子弹消失了,从集合中删除

if(myshot.isLive==false)

{

mytank.ss.remove(myshot);

//mytank.ss.remove(i);

}

}

//画炸弹图片

for(inti=0;i<bb.size();i++)

{

//取出炸弹

Bombb=bb.get(i);

if(b.life>6)

{

//System.out.println(b.life);

g.drawImage(img1,b.getX(),b.getY(),30,30,this);

}elseif(b.life>3)

{

g.drawImage(img2,b.getX(),b.getY(),30,30,this);

}else

{

g.drawImage(img3,b.getX(),b.getY(),30,30,this);

}

//生命值减少

b.lifeDown();

//如果生命值为0,则将炸弹从集合中移除

if(b.life==0)

{

bb.remove(i);

}

 

}

//画敌人的坦克

for(inti=0;i<ets.size();i++)

{

EnemyTanket=ets.get(i);

if(et.isLive==true)

{

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

}

et.getAllEnemy(ets);

//画敌人坦克的子弹

 

for(intj=0;j<et.etshot.size();j++)

{

shotets1=et.etshot.get(j);

if(ets1.isLive==true)

{

g.draw3DRect(ets1.getX(),ets1.getY(),1,1,false);

}else

{

//将子弹移除

et.etshot.remove(j);

}

}

}

 

}

//构造函数初始化

publicMyPanel(){

Record.getRecord();

mytank=newMyTank(300,250);

for(inti=0;i<EnemyNum;i++)

{

//创建敌人坦克

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

et.direct=2;

//创建敌人坦克子弹

shotes=newshot(et.getX()+10,et.getY()+30,2);

//将子弹加入到集合中

et.etshot.add(es);

//启动敌人子弹线程

Threadts=newThread(es);

ts.start();

//启动敌人坦克线程

Threadt=newThread(et);

t.start();

ets.add(et);

}

//try{

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

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

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

//}catch(IOExceptione){

////TODOAuto-generatedcatchblock

//e.printStackTrace();

//}

//初始化三张图片

img1=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb1_1.png"));

img2=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb1_2.png"));

img3=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb1_3.png"));

}

//画提示信息

publicvoiddrawInfo(Graphicsg){

//画提示信息

//我的坦克剩余数量,坦克不参与战斗

this.drawTank(50,410,g,0,0);

g.setColor(Color.black);

g.drawString("X"+Record.getMyTankNum(),80,430);

//敌方坦克剩余信息

this.drawTank(50,460,g,0,1);

g.setColor(Color.black);

g.drawString("X"+Record.getEnemyTankNum(),80,480);

//我的总成绩

g.setColor(Color.black);

g.drawString("X"+Record.getShotEnemyNum(),680,80);

Fontft=newFont("宋体",Font.BOLD,30);

g.setFont(ft);

g.drawString("我的总成绩",620,40);

this.drawTank(650,60,g,0,1);

 

}

//画坦克方法

publicvoiddrawTank(intx,inty,Graphicsg,intdirect,inttype){

switch(type){

case0:

//0,我的坦克

g.setColor(Color.YELLOW);

break;

case1:

//敌人的坦克

g.setColor(Color.CYAN);

break;

}

//坦克方向

switch(direct){

case0:

//向上

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

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

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

for(inti=1;i<=13;i++)

{

g.drawLine(x,y+2*i,x+4,y+2*i);

g.drawLine(x+15,y+2*i,x+15+4,y+2*i);

}

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

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

break;

case2:

//下

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

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

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

for(inti=1;i<=13;i++)

{

g.drawLine(x,y+2*i,x+4,y+2*i);

g.drawLine(x+15,y+2*i,x+15+4,y+2*i);

}

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

y+30);

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

break;

case3:

//左

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

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

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

for(inti=1;i<=13;i++)

{

g.drawLine(x+2*i,y,x+2*i,y+4

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

当前位置:首页 > 工程科技 > 能源化工

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

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