坦克大战,咋做下一关(附源码)

坦克大战,咋做下一关

//坦克大战:-换关卡,IO声音流没做,还有写BUG,没做完 ,本人纯外行自学的,不知道怎么做下一关,请大家指导一下,比一般坦克大战加了小道具
包1如下:
Tank1

import java.awt.;
import javax.swing.
;
import java.awt.event.;
import java.util.
;
import java.io.*;
public class Tank1 extends JFrame implements ActionListener{
MyPanel mp=null;
StartPanel gkmp=null;
//Record record=null;
JMenuBar cd=null;//??不熟
JMenu cd1=null;//??不熟
JMenu cd2=null;
JMenuItem cd1xl1=null;//菜单栏1系列的1
JMenuItem cd1xl2=null;//菜单栏1系列的2
JMenuItem cd1xl3=null;//菜单栏1系列的1
JMenuItem cd1xl4=null;//菜单栏1系列的2
JMenuItem cd2xl1=null;//菜单栏2系列的1
JLabel imageJLabel=null;
String newGame=“newGame”;//?
//Image tp1=null;
public static void main(String[] args)
{
Tank1 t1=new Tank1();
}
public Tank1(){
gkmp=new StartPanel();
mp=new MyPanel(newGame);//??
Record record=new Record();//创建一个记录对象
Thread t=new Thread(gkmp);
t.start();

	cd=new JMenuBar();//菜单栏 不熟
	
	cd1=new JMenu("游戏(G)");//第一个菜单栏的第一个菜单 
	cd1.setMnemonic('G');//快界键
	
	cd2=new JMenu("设置(Z)");
	cd2.setMnemonic('Z');
	
	cd1xl1=new JMenuItem("开始新游戏(N)");//菜单系列 cdxl
	cd1xl1.setMnemonic('N');
	cd1xl1.addActionListener(this);//加组件监听
	cd1xl1.setActionCommand("newGame");//设置键值,和上文同名参数有啥关系没?
	cd1.add(cd1xl1);
	
	cd1xl2=new JMenuItem("继续游戏(H)");//菜单系列 cdxl
	cd1xl2.setMnemonic('H');
	cd1xl2.addActionListener(this);//加组件监听
	cd1xl2.setActionCommand("goonGame");//设置键值
	cd1.add(cd1xl2);
	
	cd1xl3=new JMenuItem("保存退出(S)");//菜单系列 cdxl
	cd1xl3.setMnemonic('S');
	cd1xl3.addActionListener(this);//加组件监听
	cd1xl3.setActionCommand("saveOut");//设置键值
	cd1.add(cd1xl3);
	
	cd1xl4=new JMenuItem("退出(Q)");
	cd1xl4.setMnemonic('Q');
	cd1xl4.addActionListener(this);//加组件监听
	cd1xl4.setActionCommand("exit");//设置键值
	cd1.add(cd1xl4);
					
	cd.add(cd1);//给菜单栏 cd 添加菜单 cd1
	
	cd2xl1=new JMenuItem("速度(F)");//菜单系列 cdxl 没做好效果?
	cd1xl4.setMnemonic('F');
	cd1xl4.addActionListener(this);//加组件监听
	cd1xl4.setActionCommand("FSpeed");//设置键值
	cd2.add(cd2xl1);
	cd.add(cd2);

	ImageIcon img = new ImageIcon("E:/Tank1/tankebig.PNG");
	JLabel imageJLabel = new JLabel(img);
	gkmp.add(imageJLabel);
	
	this.add(gkmp);
	this.setJMenuBar(cd);
	this.setTitle("坦克大战");
	
	ImageIcon tp1=new ImageIcon("E:/Tank1/tankexiao.PNG");//设置小图标地址要写全路径吗
	this.setIconImage(tp1.getImage());

	this.setSize(700,620);
	this.setLocation(300,80);
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	this.setVisible(true);//可见
	this.setResizable(false);//可调

// this.setResizable(true);

}
public void actionPerformed(ActionEvent e){
	//boolean flag=true;
	if(e.getActionCommand().equals("newGame"))
	{	
		this.remove(gkmp);//取消界面 gkmp
		if(mp.flag==false)//因为在主类构造函数开始就创建了mp,所以可以引用flag变量
		{
			this.remove(mp);
			mp=new MyPanel("newGame");
		}		
		this.add(mp);						
		this.addKeyListener(mp);
		Thread t=new Thread(mp);//启动我的MyPanel模板对象mp的线程
		t.start();//叫醒线程
		this.setVisible(true);//因为默认的是不可见,必须写这个!!
		Record.bcjl();//????
	}else if(e.getActionCommand().equals("saveOut"))
	{
		Record record0=new Record();

// record0.setDtk(mp.dtk);
record0.cunpan();///???
System.exit(0);//游戏退出
}else if(e.getActionCommand().equals(“exit”))
{
Record.bcjl();
System.exit(0);//游戏退出
}else if(e.getActionCommand().equals(“goonGame”)){
this.remove(gkmp);
if(mp.flag==false)//因为在主类构造函数开始就创建了mp,所以可以引用flag变量
{
this.remove(mp);
mp=new MyPanel(“goonGame”);
}
Thread t=new Thread(mp);
t.start();
this.add(mp);
this.addKeyListener(mp);
this.setVisible(true);
}
}

class StartPanel extends JPanel implements Runnable //开始界面类
{
int time=0;
public void paint(Graphics g){
super.paint(g);

// g.fillRect(0, 0, 600, 500);//设置画布
g.setColor(Color.black);//设置颜色
Color mycolor1=new Color(250,50,0);//自定义红色
g.setFont(new Font(“华文琥珀”,Font.BOLD,80));//设置字体//?
g.drawString(“坦克大战”,190 , 460);//绘字符串
g.setColor(Color.black);//设置颜色
g.setFont(new Font(“黑体”,1,14));//设置字体
g.drawString(“李晋祥”,648 , 552);//绘字符串
if(time%2==0)
{
g.setColor(Color.white);//设置颜色
g.setFont(new Font(“华文行楷”,3,35));//字体:华康楷体, Ravie, OCR A Extended
g.drawString(“准备战斗”,270 , 345);//绘字符串
}
}
StartPanel(){
}
public void run(){
while(true){
try{
Thread.sleep(400);
}catch(Exception e){}
time++;
this.repaint();
}
}
}

class MyPanel extends JPanel implements KeyListener,Runnable
{
//Vector mts=new Vector();//建立一个我的坦克集合类可以出无限个坦克
MyTank mt=null;
MyTank mt0=null;
MyTank mt01=null;
MyTank mt02=null;
Vector dtk=new Vector();//建立一个敌坦克集合类
Props props=null;
Vector bzjh=new Vector();//创建一个爆炸类的集合
Vector wzjh=new Vector();//建立一个位置集合类,为啥建立这集合类
int tksl=3;//坦克数量
int a=122;
int b=455;
int n=10;
int myzdNum=4;//?
int propsSort=5;
int time=0;
boolean flag=true;//标记是不是已经创建过MyPanel类
boolean b1=false;
int x=1;//总关卡数?
int rocket=1;//没用?
int huopao=0;//?
Color mycolor1=new Color(250,50,0);//自定义红色
Color mycolor2=new Color(0,250,50);//自定义绿色
Color mycolor3=new Color(0,50,250);//自定义兰色
Color mycolor11=new Color(130,200,0);//自定义土黄
Color mycolor31=new Color(0,100,200);//自定义兰色
Color mycolor21=new Color(0,250,0);//自定义绿色
JLabel imageJLabel0=null;
JLabel imageJLabel1=null;
ImageIcon img0=null;//?
ImageIcon img1=null;//?
public MyPanel(String ss)
{
ImageIcon img0 = new ImageIcon(“e:/Tank1/background.jpg”);
JLabel imageJLabel0 = new JLabel(img0);
this.add(imageJLabel0);
Record.dqjl();//?
mt=new MyTank(600,280);//new多个可改为多个坦克,循环数组
mt0=new MyTank(550,280);//new多个可改为多个坦克,循环数组
mt01=new MyTank(550,330);//new多个可改为多个坦克,循环数组
mt02=new MyTank(600,330);//new多个可改为多个坦克,循环数组
props=new Props(30,30);//没有实际意义,为了new对象,必须要有个参数?
if(ss.equals(“newGame”)){
// record=new Record();
for(int i=0;i<tksl;i++){
DiTank dt=new DiTank((i)*a,b);//添加出场敌坦
// dt.dtkxl(dtk);///???是不是敌人坦克血量
dt.setFangxiang(1);//给一个初始值,调drawTank()赋初值要用
Thread t2=new Thread(dt);
t2.start();
Zidan zd=new Zidan(dt.x,dt.y,1);//?这是干啥加子弹元素吗?
Thread t3=new Thread(zd);//?
t3.start();
dtk.add(dt);
}
}else if(ss.equals(“goongame”)){//继续游戏有问题 感觉读取存盘信息有问题
wzjh=Record.dupan();
for(int i=0;i<wzjh.size();i++){
Weizhi wz=wzjh.get(i);
DiTank dt=new DiTank(wz.x,wz.y);//添加出场敌坦
dt.setFangxiang(wz.fangxiang);
// dt.dtkxl(dtk);//?敌坦克血量,好像暂时用不着
// dt.setFangxiang(1);//给一个初始值,调drawTank()赋初值要用
Thread t2=new Thread(dt);
t2.start();
Zidan zd=new Zidan(dt.x,dt.y,1);//?这是干啥加子弹元素吗?
Thread t3=new Thread(zd);//?
t3.start();
dtk.add(dt);
}
}
flag=false;//MyPanel类的mp创建过一次就标记为假
// this.repaint();

// Record.next();
// if(Record.next()%2!=0){
// Record.reMtNum();//需要吗?
// Record.reDtNum();//需要吗?
// Record.reAddMtNum();
// }
}
public void outNum(Graphics g)//画出统计数据的方法也即使显示数量的函数
{
g.setColor(Color.cyan);
this.drawTank(500,150,g,0,0);//引用drawtank()的不能是g,而是this
this.drawTank(570,150,g,0,1);
this.drawTank(500,70,g,0,1);

	g.setColor(Color.black);
	g.setFont(new Font("仿宋",2,20));//??换换字体效果
	g.drawString(Record.getDtNum()+"",600,170);
	if((Record.getMtNum()+Record.getAddMtNum())>=0){
		g.drawString((Record.getMtNum()+Record.getAddMtNum())+"",530,170);//
	}else{
		g.drawString((Record.getAddMtNum())+"",530,170);
	}
	
	g.setColor(Color.blue);
	g.setFont(new Font("方正小标宋",1,17));
	g.drawString("干掉的坦克总数:",510,40);
	
	g.setColor(Color.black);
	g.setFont(new Font("仿宋",2,20));
	g.drawString(Record.getSumDtNum()+"",530,90);
	
	g.setColor(Color.MAGENTA);//设置颜色
	g.setFont(new Font("隶书",0,20));//设置字体
	g.drawString("第"+x+"关",500 , 200);//绘字符串
}
public void paint(Graphics g){//这个方法每当窗口激活,最小化,调用repaint()方法都会运行,线程中调用就一直显示
	super.paint(g);

// g.fillRect(0,0,400,300);//做个背景画布,默认黑色
this.outNum(g);//调用显示数量的函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值