求助各位大神,我做了一个坦克大战。就是点击退出,再进入无论是点击开始游戏还是继续上局游戏 。敌人的坦克都不见了。

[复制链接]
查看11 | 回复0 | 2021-1-27 06:44:37 | 显示全部楼层 |阅读模式
刚开始自学java,看了韩顺平老师的视频。学着做了一个坦克大战。就是点击退出,在进入无论是点击开始游戏还是继续上局游戏。敌人的坦克都不见了。并且txt文件中的敌人坐标也消失了。拜托各位帮我看一下,是哪里写错了吗?
//
packagecom.test2;
importjavax.swing.*;//(引入包)
importjava.awt.*;//(引入包)
importjava.awt.event.*;//(引入包)
importjava.util.*;//(引入包)
publicclasstanks2extendsJFrameimplementsActionListener{
MyPanelmp=null;
//定义一个开始面板
MyStartPanelmsp=null;
//做菜单
JMenuBarjmb=null;
//开始游戏
JMenujm1=null;
JMenuItemjmil=null;
//退出系统
JMenuItemjmi2=null;
//存盘退出
JMenuItemjmi3=null;
JMenuItemjmi4=null;



publicstaticvoidmain(String[]args){
tanks2mtg=newtanks2();
}
//构造函数
publictanks2()
{
//mp=newMyPanel();
//启动mp
//Threadt=newThread(mp);
//t.start();
//this.add(mp);
//注册监听
//this.addKeyListener(mp);
//创建菜单及菜单选项
jmb=newJMenuBar();
jm1=newJMenu("游戏(G)");
//设置快捷方式
jm1.setMnemonic('G');
jmil=newJMenuItem("开始新游戏(N)");
jmi2=newJMenuItem("退出游戏(E)");
jmi2.setMnemonic('E');
jmi3=newJMenuItem("存盘退出游戏(C)");
jmi4=newJMenuItem("继续上局游戏(S)");
//注册监听
jmi4.addActionListener(this);
jmi4.setActionCommand("conGame");

//注册监听
jmi3.addActionListener(this);
jmi3.setActionCommand("saveExit");

jmi2.addActionListener(this);
jmi2.setActionCommand("exit");


//对jmil响应
jmil.addActionListener(this);
jmil.setActionCommand("newgame");

jm1.add(jmil);
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.setSize(600,500);
this.setVisible(true);
}
publicvoidactionPerformed(ActionEventarg0){
//TODOAuto-generatedmethodstub
//对用户不同的点击作出不同的处理
if(arg0.getActionCommand().equals("newgame"))
{
//创建游戏中面板
mp=newMyPanel("newgame");
//启动mp
Threadt=newThread(mp);
t.start();
//先删除旧的开始面板
this.remove(msp);
this.add(mp);
//注册监听
this.addKeyListener(mp);
//显示,刷新JFrame
this.setVisible(true);
}elseif(arg0.getActionCommand().equals("exit"))
{
//用户点击了退出系统的菜单
//保存击毁敌人数量.
Recorder.keepRecording();
System.exit(0);
}
//对存盘退出做处理
elseif(arg0.getActionCommand().equals("saveExit"))
{
//工作
Recorderrd=newRecorder();
rd.setEts(mp.ets);
//保存击毁敌人的数量和敌人的坐标
rd.keepRecAndEnemyTank();
//退出
System.exit(0);
}
elseif(arg0.getActionCommand().equals("conGame"))
{
//创建战场面板
mp=newMyPanel("con");
//mp.flag="con";

//启动mp线程
Threadt=newThread(mp);
t.start();
//先删除旧的开始面板
this.remove(msp);
this.add(mp);
//注册监听
this.addKeyListener(mp);
//显示,刷新JFrame
this.setVisible(true);
}
}

}

//就是一个提示作用
classMyStartPanelextendsJPanelimplementsRunnable
{
inttimes=0;
publicvoidpaint(Graphicsg)
{
super.paint(g);
g.fillRect(0,0,400,300);
if(times%2==0)
{
g.setColor(Color.red);
//开关信息的字体
FontmyFont=newFont("黑体",Font.BOLD,50);
g.setFont(myFont);
g.drawString("stage:1",100,160);
}
}
publicvoidrun(){
//TODOAuto-generatedmethodstub
while(true)
{
//休眠
try{
Thread.sleep(100);
}catch(Exceptione){
e.printStackTrace();
//TODO:handleexception
}
times++;
//重画
this.repaint();
}
}
}

//我的面板(坦克的活动区)
classMyPanelextendsJPanelimplementsKeyListener,Runnable{
//定义一个自己的坦克
Herohero=null;//初始化

//定义敌人的坦克组
Vectorets=newVector();
Vectornodes=newVector();
//定义一个炸弹集合
Vector[B]bombs=newVector[B]();
intenSize=3;//敌人的坦克数量
//定义爆炸图
Imageimage1=null;
Imageimage2=null;
Imageimage3=null;

//构造函数
publicMyPanel(Stringflag)
{
//恢复记录
Recorder.getRecoring();

hero=newHero(100,100);
if(flag.equals("newGame"))
{
//初始化敌人的坦克
for(inti=0;i3)
{
g.drawImage(image2,b.x,b.y,30,30,this);
}
else{
g.drawImage(image3,b.x,b.y,30,30,this);
}
//让图的生命值减少
b.lifeDown();
//如果炸弹生命值为0就把它从向量里去掉
if(b.life==0)
{
bombs.remove(b);
}

}
//画出敌人的坦克
for(inti=0;iet.x&&s.xet.y&&s.yet.x&&s.xet.y&&s.y -->
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行