java桌面游戏坦克大战框架板.docx
- 文档编号:3664314
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:37
- 大小:22.30KB
java桌面游戏坦克大战框架板.docx
《java桌面游戏坦克大战框架板.docx》由会员分享,可在线阅读,更多相关《java桌面游戏坦克大战框架板.docx(37页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 桌面 游戏 坦克 大战 框架