JAVA小白求救:坦克大战-多关卡咋做?没思路。。。

坦克大战-多关卡咋做:

自己代码如下:

//坦克大战:-换关卡,-IO声音流,把爆炸换成外面的图片,有BUG继续游戏的时候看不到爆炸一下才能看到地方坦克,
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);//调用显示数量的函数
g.setColor(Color.red);//设置颜色
g.fillRect(530, 210, 30, 20);
g.setColor(Color.black);//设置颜色
g.drawLine(530, 210, 530, 320);
g.setColor(mycolor11);//设置颜色
if(mt.live==true){
this.drawTank(mt.getX(),mt.getY(),g,mt.fangxiang,0);
}
if(mt0.live==true){
this.drawTank(mt0.getX(),mt0.getY(),g,mt0.fangxiang,2);
}
if(mt01.live==true){
this.drawTank(mt01.getX(),mt01.getY(),g,mt01.fangxiang,2);
}
if(mt02.live==true){
this.drawTank(mt02.getX(),mt02.getY(),g,mt02.fangxiang,2);
}
if(mt.getLive()==false){
g.setColor(mycolor11);//设置颜色
g.setFont(new Font("Gill Sans Ultra Bold Condensed",1,40));//字体:华康楷体, Ravie, OCR A Extended
g.drawString("game over...",200 , 220);//绘字符串
this.repaint();
}
if(Record.getDtNum()%6==0&&(Record.getDtNum()>10)){
// if(time%2==0)
// {

g.setColor(Color.blue);//设置颜色
g.setFont(new Font("华文行楷",1,35));//字体:华康楷体, Ravie, OCR A Extended
g.drawString("你行不行?",310 , 265);//绘字符串

// }
}
if(Record.getDtNum()==0){
g.setColor(Color.red);//设置颜色
g.setFont(new Font("华文行楷",1,35));//字体:华康楷体, Ravie, OCR A Extended
g.drawString("过关!",300 , 265);//绘字符串

}
for(int i=0;i {
DiTank dt=dtk.get(i);
if(dt.live==true){
this.drawTank(dt.getX(),dt.getY(),g,dt.fangxiang,1);//??!!注意用法用dtk 还是dt调用
}
}
for(int i=0;i {
Zidan zd=mt.aa.get(i);
if(mt.zd!=null&&mt.zd.live==true) //???画子弹的条件
{
//g.fill3DRect((mt.zd.x-2),(mt.zd.y-2), 8, 8, false); //???画子弹火力圈
g.setColor(Color.black);//子弹颜色设置为白色
g.fillOval(zd.x+1,zd.y+1, 4,4);
}
if(zd.live==false)
{
mt.aa.remove(zd);
}
}
//this.repaint();//?
for(int i=0;i {
DiTank dt=dtk.get(i);
for(int j=0;j {
Zidan zd=dt.dzd.get(j);
if(zd!=null&&dtk.get(i).live==true)
{
g.setColor(Color.red);//子弹颜色设置为红色,次处不进循环是不是更好?
g.fillOval(zd.x+1,zd.y+1, 4,4);
}
if(zd.live==false)//删除生命为假的敌人子弹????
{
dt.dzd.remove(zd);
}
}
}
for(int i=0;i {
Baozha bz=bzjh.get(i);
if(bzjh.get(i).livetime>140){
g.setColor(Color.red);
g.fillOval(bz.x, bz.y+5, 20,20 );//代替上面的句子
//g.fillOval(bz.x, bz.y, 20,5 );//可以用来做合成图形,但是要定好坐标点
}else if((bzjh.get(i).livetime<=100)&&(bzjh.get(i).livetime>50)){
g.setColor(Color.orange);
g.fillOval(bz.x+4, bz.y+9, 12,12 );
}else if((bzjh.get(i).livetime<=50)&&(bzjh.get(i).livetime>20)){
g.setColor(Color.yellow);
g.fillOval(bz.x+7, bz.y+11,5,5 );
}else{
g.setColor(Color.pink);
g.fillOval(bz.x+10, bz.y+13,2,2 );
}
bz.ltjs(); //生存时间减少函数
if(bz.livetime==0){
bzjh.remove(bz);
}
}
//
if(props.live==true){//画道具
this.drawProps(props.getX(),props.getY(),g,props.getleixing());
}
//}
this.repaint();//教学视频少了这句,子弹无法自主运行,主类启动线程后仍然可动
}
public void keyPressed(KeyEvent e)//键盘输入事件
{
if(mt.getLive()==true){
if(e.getKeyCode()==KeyEvent.VK_W){
this.mt.setFangxiang(0);
this.mt.xiangshang();
}else if(e.getKeyCode()==KeyEvent.VK_S){
this.mt.setFangxiang(1);
this.mt.xiangxia();
}else if(e.getKeyCode()==KeyEvent.VK_A){
this.mt.setFangxiang(2);
this.mt.xiangzuo();
}else if(e.getKeyCode()==KeyEvent.VK_D){
this.mt.setFangxiang(3);
this.mt.xiangyou();
}
if(e.getKeyCode()==KeyEvent.VK_J)
{
if((mt.aa.size()<myzdNum)&&(mt.live==true))//子弹设置最多 myzdNum 发
{
this.mt.fszd();//调用发射子弹函数
}
}
}
}
public void crash(){

}
public boolean addprops(Props props,MyTank mt)//吃道具触发 方法 (道具功能触发模型为边长20的正方形)
{
    boolean b2=false;
    switch(props.leixing){
    case 0://我的坦克速度提高//mt.fangxiang 0\1\2\3
        if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){
            props.live=false;
            mt.sudu=20;
            b2=true;
        }
        break;
    case 1://效果回到出生地
        if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){
            props.live=false;
            mt.setX(630);
            mt.setY(280);
            b2=true;
        }
        break;
    case 2://提高我可以发射的子弹数目
        //mt.fangxiang 0\1\2\3
        if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){
            props.live=false;
            this.myzdNum=30;
            this.huopao=1;
            this.n=4;
            b2=true;
        }
        break;
    case 3://显示的敌人坦克全死,但实际效果是..是不出敌方坦克了!!!!
        if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){
            props.live=false;
            for(int i=0;i<dtk.size();i++){
                if(dtk.get(i).live==true){
                    dtk.get(i).live=false;
                    Record.setDtNum();//有几个活坦克生命变假,就累计几辆dtNum
                }
            }
            b1=true;
            b2=true;
        }
        break;
    case 4://吃道具加命
        if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){
            props.live=false;
            Record.setAddMtNum();
            b2=true;

// System.out.println("吃道具加命程序,正常运行");
}
break;
}
return b2;

}

// addMyTank++;
//MyTank mt1=new MyTank(mt.getX(),mt.getY());//??创建另一个MyTank对象
// public void setAddMytank(){
// addMyTank++;
// };
// public static int getAddMytank(){
// return addMyTank;
// };
public void run() //我的画板的 线程函数
{
while(true){
try{
Thread.sleep(50);//
}catch(Exception e){}
for(int i=0;i<mt.aa.size();i++)//我的子弹集中敌坦克的线程
{
Zidan myzd=mt.aa.get(i);

            if(myzd.live){
                for(int j=0;j<dtk.size();j++){
                    DiTank dt=dtk.get(j);
                    //  Zidan zd=dt.dzd.get(j);//为啥dzd可以直接用,不用创建//   ||(b1==true&&Record.getDtNum()>0)
                    if(dt.live)//内关联敌人坦克重生的一种情况,有敌人坦克被打中
                    {
                        if(this.jzsf(myzd,dt)&&((Record.getDtNum()-tksl)>=0)){//调用jzsf(),打中同时,坦克定点?及时重生

                                DiTank dt0=new DiTank((int)(Math.random()*50+5)*10,(int)(Math.random()*100+450));
                                Thread t2=new Thread(dt0);
                                t2.start();
                                Zidan zd0=new Zidan(dt0.x,dt0.y,dt0.fangxiang);
                                Thread t3=new Thread(zd0);
                                t3.start();
                                dt0.dzd.add(zd0);
                                dtk.add(dt0);

                        }
                    }
                }
            }
        }

            if(Record.getDtNum()>=tksl&&b1==true){ //炸弹爆炸,敌坦克按条件重生,
                for(int i=0;i<tksl;i++){
                    DiTank dt1=new DiTank((int)(Math.random()*20)*10,(int)(Math.random()*100+450));
                    Thread t6=new Thread(dt1);
                    t6.start();
                    Zidan zd1=new Zidan(dt1.x,dt1.y,dt1.fangxiang);
                    Thread t7=new Thread(zd1);
                    t7.start();
                    dt1.dzd.add(zd1);
                    dtk.add(dt1);
                }
                b1=false;
            }
            if((Record.getDtNum()==(tksl-1))&&(b1==true)){
                for(int i=0;i<tksl-1;i++){
                    DiTank dt1=new DiTank((int)(Math.random()*20)*10,(int)(Math.random()*100+450));
                    Thread t6=new Thread(dt1);
                    t6.start();
                    Zidan zd1=new Zidan(dt1.x,dt1.y,dt1.fangxiang);
                    Thread t7=new Thread(zd1);
                    t7.start();
                    dt1.dzd.add(zd1);
                    dtk.add(dt1);
                    }
                b1=false;
            }
            if((Record.getDtNum()==(tksl-2))&&(b1==true)){

// for(int i=0;i DiTank dt1=new DiTank((int)(Math.random()*20)*10,(int)(Math.random()*100+450));
Thread t6=new Thread(dt1);
t6.start();
Zidan zd1=new Zidan(dt1.x,dt1.y,dt1.fangxiang);
Thread t7=new Thread(zd1);
t7.start();
dt1.dzd.add(zd1);
dtk.add(dt1);
b1=false;
}
for(int j=0;j {
DiTank dt=dtk.get(j);//取出所有敌方坦克
for(int i=0;i {
Zidan zd=dt.dzd.get(i);//?
if(zd.live)
{
if(this.jzsf(zd,mt)==true){//调用 击中敌坦 函数
}
}
}
}
if((this.time%120)==0){//6秒发生1次 道具随机重置//draw mt hit props
props.live=true;
// props.leixing=2;
props.leixing=(int)(Math.random()*propsSort);
props.x=(int)(Math.random()*370);
props.y=(int)(Math.random()*270);
props.livetime=100;//道具生存期
}
if(props.livetime>0){//道具生存期变化
props.livetime--;
}else{
props.live=false;
}
if(mt.live==true&&props.live==true){//调用 吃道具 方法
this.addprops(props,mt);
}
time++;
// if(SaveData.getSumDtNum()%20==0){
// Record.next();
// }
this.repaint();//线程运行中重绘??
}
}
public void jzwf()//敌人子弹集中我方坦克的方法
{
for(int i=0;i<this.dtk.size();i++){
DiTank dt=dtk.get(i);
for(int j=0;j<dt.dzd.size();j++){
Zidan zd=dt.dzd.get(j);
this.jzsf(zd, mt);
}
}
}

public void jzdf() //我的子弹击中坦克的方法
{
for(int i=0;i<mt.aa.size();i++){
Zidan zd=mt.aa.get(i);//从我的子弹集合类取我的各个子弹
if(zd.live==true){
for(int j=0;j<dtk.size();j++){
DiTank dt=dtk.get(j);//从敌坦克集合类取出各个敌坦克
if(dt.live){
this.jzsf(zd,dt);
// levelDtNum--;
}
}
}
this.repaint();
}

}
public boolean jzsf(Zidan zd,Tank tk)//击中双方的方法
{
    boolean b2=false;
    switch(tk.fangxiang)
    {
    case 0:
    case 1:
        if(zd.x>tk.x&&zd.x<tk.x+20&&zd.y>tk.y&&zd.y<tk.y+30)//分辨率判断?
        {

            if(tk instanceof DiTank){//只改这就实现 判断tk是不是DiTank的实例
                Record.setDtNum();
                Record.setSumDtNum();

// Record.setAddMtNum();
tk.live=false;

b2=true;
}else{
// System.out.println("Record.getMtNum()="+Record.getMtNum());
Record.setMtNum();//Record.getSumMtNum()一直小于0 ?bug
if(Record.getMtNum()+1<=0){
Record.lowAddMtNum();
}
// System.out.println("Record.getMtNum()="+Record.getMtNum());
// System.out.println("Record.AddMtNum()="+Record.getAddMtNum());
if(Record.getMtNum()+Record.getAddMtNum()>0){//bug 被打一下就游戏结束 已经解决
mt.setX(140);
mt.setY(232);
}
if(Record.getMtNum()+Record.getAddMtNum()<=0){

tk.live=false;
}
}
zd.live=false;
Baozha bz=new Baozha(tk.x,tk.y);
bzjh.add(bz);
}
break;
case 2:
case 3:
if(zd.x>tk.x&&zd.xtk.y&&zd.y if(tk instanceof DiTank){//只改这就实现 判断tk是不是DiTank的实例
Record.setDtNum();//每次敌人坦克数量-1
Record.setSumDtNum();
// Record.setAddMtNum();
tk.live=false;
b2=true;
}else{
// System.out.println("Record.getMtNum()="+Record.getMtNum());
Record.setMtNum();//Record.getSumMtNum()一直小于0 ?bug
if(Record.getMtNum()+1 Record.lowAddMtNum();
}
// System.out.println("Record.getMtNum()="+Record.getMtNum());
// System.out.println("Record.AddMtNum()="+Record.getAddMtNum());
if(Record.getMtNum()+Record.getAddMtNum()>0){//bug 被打一下就游戏结束 已经解决
mt.setX(550);
mt.setY(270);
}
if(Record.getMtNum()+Record.getAddMtNum()<=0){

tk.live=false;
}
}
zd.live=false;
Baozha bz=new Baozha(tk.x,tk.y);
bzjh.add(bz);
}
break;
}
return b2;
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public void drawTank(int x,int y,Graphics g,int fangxiang,int leixing)//画坦克函数
{
int m=10;
//double n=1;
switch(leixing)//不同阵营坦克
{
case 0://我的坦克
g.setColor(Color.yellow);// 我的坦克颜色 黄色
// g.fillOval(170*huopao, 240*huopao, 30*huopao, 30*huopao);
m=11;
break;
case 1://敌人的坦克
g.setColor(mycolor3);//敌人坦克颜色 蓝色
// m=15;
break;
case 2://玩家2的坦克
g.setColor(mycolor1);//敌人坦克颜色 绿色
break;
}
switch(fangxiang)//不同方向的坦克(0,1,2,3)分别代表上下左右,中心原点不变做坐标变换
{
case 0://上
g.fill3DRect(x,y,5,30,true);
g.fill3DRect(x+15,y,5,30,true);
g.fill3DRect(x+5,y+5,10,20,true);
g.drawLine(x+10,y-5,x+10,(y+10));
g.setColor(Color.black);
g.fillOval(x+5,y+10,10,10);
break;
case 1://下
g.fill3DRect(x,y,5,30,true);
g.fill3DRect(x+15,y,5,30,true);
g.fill3DRect(x+5,y+5,10,20,true);
g.drawLine(x+10,y+10,x+10,(y+35));
g.setColor(Color.black);
g.fillOval(x+5,y+10,10,10);
break;
case 2://左
g.fill3DRect(x-5,y+5,30,5,true);
g.fill3DRect(x-5,y+20,30,5,true);
g.fill3DRect(x,y+10,20,10,true);
g.drawLine((x-10)+n-m,y+15,(x+10),(y+15));
g.setColor(Color.black);
g.fillOval(x+5,y+10,10,10);
break;
case 3://右
g.fill3DRect(x-5,y+5,30,5,true);
g.fill3DRect(x-5,y+20,30,5,true);
g.fill3DRect(x,y+10,20,10,true);
g.drawLine((x+10)-n+m,y+15,(x+30),(y+15));
g.setColor(Color.black);
g.fillOval(x+5,y+10,10,10);
break;
}
}
public void drawProps(int x,int y,Graphics g,int leixing)//画道具
{
if(time%8==0){
switch(leixing)
{
case 0://画车轮对应坦克加速
g.setColor(Color.white);
g.fillOval(x, y, 21, 21);
g.setColor(Color.black);
g.fillOval(x+2,y+2,16,16);
g.setColor(Color.white);
g.drawOval(x+2,y+2,16,16);
g.drawLine(x+2,y+10,x+18,y+10);
g.drawLine(x+10,y+2,x+10,y+18);
g.drawLine(x+16,y+4,x+4,y+16);
g.drawLine(x+4,y+4,x+16,y+16);
break;
case 1://画回出生地道具图标
g.setColor(Color.white);
g.drawRoundRect(x, y, 20, 20, 5, 5);
g.setColor(mycolor3);
g.fillRoundRect(x+5, y+5, 10, 10, 5, 5);
break;
case 2://画增加子弹数目道具//?
g.setColor(mycolor2);
g.fill3DRect(x-15,y+8,30,5,false);
g.fill3DRect(x-15,y+6,10,10,true);
g.fillOval(x+15,y+7,7,7);
break;
case 3://画炸弹
g.setColor(mycolor2);
g.fillRect(x, y, 21, 21);
g.setColor(Color.black);
g.fillRect(x+8,y+6,6,2);
g.fillOval(x+3,y+7,14,14);
g.drawLine(x+11, y+3, x+11, y+6);
g.setColor(Color.white);
g.drawLine(x+11, y+15, x+8, y+14);
break;
case 4://画小坦克道具
g.setColor(Color.yellow);
g.fill3DRect(x,y,20,3,true);
g.fill3DRect(x,y+10,20,3,true);
g.fill3DRect(x+3,y+3,14,7,false);
g.fillOval(x+6,y+3,7,7);
g.drawLine(x-7,y+6,x+7,y+6);
break;
}
}
}
}
}

//坦克大战: 不会做多关卡??!!
//IO声音流没做,IO流存储也有点问题,有BUG继续游戏的时候看不到爆炸一下才能看到地方坦克,
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);//调用显示数量的函数
g.setColor(Color.red);//设置颜色
g.fillRect(530, 210, 30, 20);
g.setColor(Color.black);//设置颜色
g.drawLine(530, 210, 530, 320);
g.setColor(mycolor11);//设置颜色
if(mt.live==true){
this.drawTank(mt.getX(),mt.getY(),g,mt.fangxiang,0);
}
if(mt0.live==true){
this.drawTank(mt0.getX(),mt0.getY(),g,mt0.fangxiang,2);
}
if(mt01.live==true){
this.drawTank(mt01.getX(),mt01.getY(),g,mt01.fangxiang,2);
}
if(mt02.live==true){
this.drawTank(mt02.getX(),mt02.getY(),g,mt02.fangxiang,2);
}
if(mt.getLive()==false){
g.setColor(mycolor11);//设置颜色
g.setFont(new Font("Gill Sans Ultra Bold Condensed",1,40));//字体:华康楷体, Ravie, OCR A Extended
g.drawString("game over...",200 , 220);//绘字符串
this.repaint();
}
if(Record.getDtNum()%6==0&&(Record.getDtNum()>10)){
// if(time%2==0)
// {

g.setColor(Color.blue);//设置颜色
g.setFont(new Font("华文行楷",1,35));//字体:华康楷体, Ravie, OCR A Extended
g.drawString("你行不行?",310 , 265);//绘字符串

// }
}
if(Record.getDtNum()==0){
g.setColor(Color.red);//设置颜色
g.setFont(new Font("华文行楷",1,35));//字体:华康楷体, Ravie, OCR A Extended
g.drawString("过关!",300 , 265);//绘字符串

}
for(int i=0;i {
DiTank dt=dtk.get(i);
if(dt.live==true){
this.drawTank(dt.getX(),dt.getY(),g,dt.fangxiang,1);//??!!注意用法用dtk 还是dt调用
}
}
for(int i=0;i {
Zidan zd=mt.aa.get(i);
if(mt.zd!=null&&mt.zd.live==true) //???画子弹的条件
{
//g.fill3DRect((mt.zd.x-2),(mt.zd.y-2), 8, 8, false); //???画子弹火力圈
g.setColor(Color.black);//子弹颜色设置为白色
g.fillOval(zd.x+1,zd.y+1, 4,4);
}
if(zd.live==false)
{
mt.aa.remove(zd);
}
}
//this.repaint();//?
for(int i=0;i {
DiTank dt=dtk.get(i);
for(int j=0;j {
Zidan zd=dt.dzd.get(j);
if(zd!=null&&dtk.get(i).live==true)
{
g.setColor(Color.red);//子弹颜色设置为红色,次处不进循环是不是更好?
g.fillOval(zd.x+1,zd.y+1, 4,4);
}
if(zd.live==false)//删除生命为假的敌人子弹????
{
dt.dzd.remove(zd);
}
}
}
for(int i=0;i {
Baozha bz=bzjh.get(i);
if(bzjh.get(i).livetime>140){
g.setColor(Color.red);
g.fillOval(bz.x, bz.y+5, 20,20 );//代替上面的句子
//g.fillOval(bz.x, bz.y, 20,5 );//可以用来做合成图形,但是要定好坐标点
}else if((bzjh.get(i).livetime<=100)&&(bzjh.get(i).livetime>50)){
g.setColor(Color.orange);
g.fillOval(bz.x+4, bz.y+9, 12,12 );
}else if((bzjh.get(i).livetime<=50)&&(bzjh.get(i).livetime>20)){
g.setColor(Color.yellow);
g.fillOval(bz.x+7, bz.y+11,5,5 );
}else{
g.setColor(Color.pink);
g.fillOval(bz.x+10, bz.y+13,2,2 );
}
bz.ltjs(); //生存时间减少函数
if(bz.livetime==0){
bzjh.remove(bz);
}
}
//
if(props.live==true){//画道具
this.drawProps(props.getX(),props.getY(),g,props.getleixing());
}
//}
this.repaint();//教学视频少了这句,子弹无法自主运行,主类启动线程后仍然可动
}
public void keyPressed(KeyEvent e)//键盘输入事件
{
if(mt.getLive()==true){
if(e.getKeyCode()==KeyEvent.VK_W){
this.mt.setFangxiang(0);
this.mt.xiangshang();
}else if(e.getKeyCode()==KeyEvent.VK_S){
this.mt.setFangxiang(1);
this.mt.xiangxia();
}else if(e.getKeyCode()==KeyEvent.VK_A){
this.mt.setFangxiang(2);
this.mt.xiangzuo();
}else if(e.getKeyCode()==KeyEvent.VK_D){
this.mt.setFangxiang(3);
this.mt.xiangyou();
}
if(e.getKeyCode()==KeyEvent.VK_J)
{
if((mt.aa.size()<myzdNum)&&(mt.live==true))//子弹设置最多 myzdNum 发
{
this.mt.fszd();//调用发射子弹函数
}
}
}
}
public void crash(){

}
public boolean addprops(Props props,MyTank mt)//吃道具触发 方法 (道具功能触发模型为边长20的正方形)
{
    boolean b2=false;
    switch(props.leixing){
    case 0://我的坦克速度提高//mt.fangxiang 0\1\2\3
        if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){
            props.live=false;
            mt.sudu=20;
            b2=true;
        }
        break;
    case 1://效果回到出生地
        if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){
            props.live=false;
            mt.setX(630);
            mt.setY(280);
            b2=true;
        }
        break;
    case 2://提高我可以发射的子弹数目
        //mt.fangxiang 0\1\2\3
        if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){
            props.live=false;
            this.myzdNum=30;
            this.huopao=1;
            this.n=4;
            b2=true;
        }
        break;
    case 3://显示的敌人坦克全死,但实际效果是..是不出敌方坦克了!!!!
        if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){
            props.live=false;
            for(int i=0;i<dtk.size();i++){
                if(dtk.get(i).live==true){
                    dtk.get(i).live=false;
                    Record.setDtNum();//有几个活坦克生命变假,就累计几辆dtNum
                }
            }
            b1=true;
            b2=true;
        }
        break;
    case 4://吃道具加命
        if((mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15<props.getY()+20&&mt.getY()+15>props.getY())||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+10>props.getX()&&mt.getX()+10<props.getX()+20&&mt.getY()+15>props.getY()&&mt.getY()+15<props.getY()+20)||(mt.getX()+15>props.getX()&&mt.getX()+15<props.getX()+20&&mt.getY()+10>props.getY()&&mt.getY()+10<props.getY()+20)){
            props.live=false;
            Record.setAddMtNum();
            b2=true;

// System.out.println("吃道具加命程序,正常运行");
}
break;
}
return b2;

}

// addMyTank++;
//MyTank mt1=new MyTank(mt.getX(),mt.getY());//??创建另一个MyTank对象
// public void setAddMytank(){
// addMyTank++;
// };
// public static int getAddMytank(){
// return addMyTank;
// };
public void run() //我的画板的 线程函数
{
while(true){
try{
Thread.sleep(50);//
}catch(Exception e){}
for(int i=0;i<mt.aa.size();i++)//我的子弹集中敌坦克的线程
{
Zidan myzd=mt.aa.get(i);

            if(myzd.live){
                for(int j=0;j<dtk.size();j++){
                    DiTank dt=dtk.get(j);
                    //  Zidan zd=dt.dzd.get(j);//为啥dzd可以直接用,不用创建//   ||(b1==true&&Record.getDtNum()>0)
                    if(dt.live)//内关联敌人坦克重生的一种情况,有敌人坦克被打中
                    {
                        if(this.jzsf(myzd,dt)&&((Record.getDtNum()-tksl)>=0)){//调用jzsf(),打中同时,坦克定点?及时重生

                                DiTank dt0=new DiTank((int)(Math.random()*50+5)*10,(int)(Math.random()*100+450));
                                Thread t2=new Thread(dt0);
                                t2.start();
                                Zidan zd0=new Zidan(dt0.x,dt0.y,dt0.fangxiang);
                                Thread t3=new Thread(zd0);
                                t3.start();
                                dt0.dzd.add(zd0);
                                dtk.add(dt0);

                        }
                    }
                }
            }
        }

            if(Record.getDtNum()>=tksl&&b1==true){ //炸弹爆炸,敌坦克按条件重生,
                for(int i=0;i<tksl;i++){
                    DiTank dt1=new DiTank((int)(Math.random()*20)*10,(int)(Math.random()*100+450));
                    Thread t6=new Thread(dt1);
                    t6.start();
                    Zidan zd1=new Zidan(dt1.x,dt1.y,dt1.fangxiang);
                    Thread t7=new Thread(zd1);
                    t7.start();
                    dt1.dzd.add(zd1);
                    dtk.add(dt1);
                }
                b1=false;
            }
            if((Record.getDtNum()==(tksl-1))&&(b1==true)){
                for(int i=0;i<tksl-1;i++){
                    DiTank dt1=new DiTank((int)(Math.random()*20)*10,(int)(Math.random()*100+450));
                    Thread t6=new Thread(dt1);
                    t6.start();
                    Zidan zd1=new Zidan(dt1.x,dt1.y,dt1.fangxiang);
                    Thread t7=new Thread(zd1);
                    t7.start();
                    dt1.dzd.add(zd1);
                    dtk.add(dt1);
                    }
                b1=false;
            }
            if((Record.getDtNum()==(tksl-2))&&(b1==true)){

// for(int i=0;i DiTank dt1=new DiTank((int)(Math.random()*20)*10,(int)(Math.random()*100+450));
Thread t6=new Thread(dt1);
t6.start();
Zidan zd1=new Zidan(dt1.x,dt1.y,dt1.fangxiang);
Thread t7=new Thread(zd1);
t7.start();
dt1.dzd.add(zd1);
dtk.add(dt1);
b1=false;
}
for(int j=0;j {
DiTank dt=dtk.get(j);//取出所有敌方坦克
for(int i=0;i {
Zidan zd=dt.dzd.get(i);//?
if(zd.live)
{
if(this.jzsf(zd,mt)==true){//调用 击中敌坦 函数
}
}
}
}
if((this.time%120)==0){//6秒发生1次 道具随机重置//draw mt hit props
props.live=true;
// props.leixing=2;
props.leixing=(int)(Math.random()*propsSort);
props.x=(int)(Math.random()*370);
props.y=(int)(Math.random()*270);
props.livetime=100;//道具生存期
}
if(props.livetime>0){//道具生存期变化
props.livetime--;
}else{
props.live=false;
}
if(mt.live==true&&props.live==true){//调用 吃道具 方法
this.addprops(props,mt);
}
time++;
// if(SaveData.getSumDtNum()%20==0){
// Record.next();
// }
this.repaint();//线程运行中重绘??
}
}
public void jzwf()//敌人子弹集中我方坦克的方法
{
for(int i=0;i<this.dtk.size();i++){
DiTank dt=dtk.get(i);
for(int j=0;j<dt.dzd.size();j++){
Zidan zd=dt.dzd.get(j);
this.jzsf(zd, mt);
}
}
}

public void jzdf() //我的子弹击中坦克的方法
{
for(int i=0;i<mt.aa.size();i++){
Zidan zd=mt.aa.get(i);//从我的子弹集合类取我的各个子弹
if(zd.live==true){
for(int j=0;j<dtk.size();j++){
DiTank dt=dtk.get(j);//从敌坦克集合类取出各个敌坦克
if(dt.live){
this.jzsf(zd,dt);
// levelDtNum--;
}
}
}
this.repaint();
}

}
public boolean jzsf(Zidan zd,Tank tk)//击中双方的方法
{
    boolean b2=false;
    switch(tk.fangxiang)
    {
    case 0:
    case 1:
        if(zd.x>tk.x&&zd.x<tk.x+20&&zd.y>tk.y&&zd.y<tk.y+30)//分辨率判断?
        {

            if(tk instanceof DiTank){//只改这就实现 判断tk是不是DiTank的实例
                Record.setDtNum();
                Record.setSumDtNum();

// Record.setAddMtNum();
tk.live=false;

b2=true;
}else{
// System.out.println("Record.getMtNum()="+Record.getMtNum());
Record.setMtNum();//Record.getSumMtNum()一直小于0 ?bug
if(Record.getMtNum()+1<=0){
Record.lowAddMtNum();
}
// System.out.println("Record.getMtNum()="+Record.getMtNum());
// System.out.println("Record.AddMtNum()="+Record.getAddMtNum());
if(Record.getMtNum()+Record.getAddMtNum()>0){//bug 被打一下就游戏结束 已经解决
mt.setX(140);
mt.setY(232);
}
if(Record.getMtNum()+Record.getAddMtNum()<=0){

tk.live=false;
}
}
zd.live=false;
Baozha bz=new Baozha(tk.x,tk.y);
bzjh.add(bz);
}
break;
case 2:
case 3:
if(zd.x>tk.x&&zd.xtk.y&&zd.y if(tk instanceof DiTank){//只改这就实现 判断tk是不是DiTank的实例
Record.setDtNum();//每次敌人坦克数量-1
Record.setSumDtNum();
// Record.setAddMtNum();
tk.live=false;
b2=true;
}else{
// System.out.println("Record.getMtNum()="+Record.getMtNum());
Record.setMtNum();//Record.getSumMtNum()一直小于0 ?bug
if(Record.getMtNum()+1 Record.lowAddMtNum();
}
// System.out.println("Record.getMtNum()="+Record.getMtNum());
// System.out.println("Record.AddMtNum()="+Record.getAddMtNum());
if(Record.getMtNum()+Record.getAddMtNum()>0){//bug 被打一下就游戏结束 已经解决
mt.setX(550);
mt.setY(270);
}
if(Record.getMtNum()+Record.getAddMtNum()<=0){

tk.live=false;
}
}
zd.live=false;
Baozha bz=new Baozha(tk.x,tk.y);
bzjh.add(bz);
}
break;
}
return b2;
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public void drawTank(int x,int y,Graphics g,int fangxiang,int leixing)//画坦克函数
{
int m=10;
//double n=1;
switch(leixing)//不同阵营坦克
{
case 0://我的坦克
g.setColor(Color.yellow);// 我的坦克颜色 黄色
// g.fillOval(170*huopao, 240*huopao, 30*huopao, 30*huopao);
m=11;
break;
case 1://敌人的坦克
g.setColor(mycolor3);//敌人坦克颜色 蓝色
// m=15;
break;
case 2://玩家2的坦克
g.setColor(mycolor1);//敌人坦克颜色 绿色
break;
}
switch(fangxiang)//不同方向的坦克(0,1,2,3)分别代表上下左右,中心原点不变做坐标变换
{
case 0://上
g.fill3DRect(x,y,5,30,true);
g.fill3DRect(x+15,y,5,30,true);
g.fill3DRect(x+5,y+5,10,20,true);
g.drawLine(x+10,y-5,x+10,(y+10));
g.setColor(Color.black);
g.fillOval(x+5,y+10,10,10);
break;
case 1://下
g.fill3DRect(x,y,5,30,true);
g.fill3DRect(x+15,y,5,30,true);
g.fill3DRect(x+5,y+5,10,20,true);
g.drawLine(x+10,y+10,x+10,(y+35));
g.setColor(Color.black);
g.fillOval(x+5,y+10,10,10);
break;
case 2://左
g.fill3DRect(x-5,y+5,30,5,true);
g.fill3DRect(x-5,y+20,30,5,true);
g.fill3DRect(x,y+10,20,10,true);
g.drawLine((x-10)+n-m,y+15,(x+10),(y+15));
g.setColor(Color.black);
g.fillOval(x+5,y+10,10,10);
break;
case 3://右
g.fill3DRect(x-5,y+5,30,5,true);
g.fill3DRect(x-5,y+20,30,5,true);
g.fill3DRect(x,y+10,20,10,true);
g.drawLine((x+10)-n+m,y+15,(x+30),(y+15));
g.setColor(Color.black);
g.fillOval(x+5,y+10,10,10);
break;
}
}
public void drawProps(int x,int y,Graphics g,int leixing)//画道具
{
if(time%8==0){
switch(leixing)
{
case 0://画车轮对应坦克加速
g.setColor(Color.white);
g.fillOval(x, y, 21, 21);
g.setColor(Color.black);
g.fillOval(x+2,y+2,16,16);
g.setColor(Color.white);
g.drawOval(x+2,y+2,16,16);
g.drawLine(x+2,y+10,x+18,y+10);
g.drawLine(x+10,y+2,x+10,y+18);
g.drawLine(x+16,y+4,x+4,y+16);
g.drawLine(x+4,y+4,x+16,y+16);
break;
case 1://画回出生地道具图标
g.setColor(Color.white);
g.drawRoundRect(x, y, 20, 20, 5, 5);
g.setColor(mycolor3);
g.fillRoundRect(x+5, y+5, 10, 10, 5, 5);
break;
case 2://画增加子弹数目道具//?
g.setColor(mycolor2);
g.fill3DRect(x-15,y+8,30,5,false);
g.fill3DRect(x-15,y+6,10,10,true);
g.fillOval(x+15,y+7,7,7);
break;
case 3://画炸弹
g.setColor(mycolor2);
g.fillRect(x, y, 21, 21);
g.setColor(Color.black);
g.fillRect(x+8,y+6,6,2);
g.fillOval(x+3,y+7,14,14);
g.drawLine(x+11, y+3, x+11, y+6);
g.setColor(Color.white);
g.drawLine(x+11, y+15, x+8, y+14);
break;
case 4://画小坦克道具
g.setColor(Color.yellow);
g.fill3DRect(x,y,20,3,true);
g.fill3DRect(x,y+10,20,3,true);
g.fill3DRect(x+3,y+3,14,7,false);
g.fillOval(x+6,y+3,7,7);
g.drawLine(x-7,y+6,x+7,y+6);
break;
}
}
}
}
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
UE4多人大关卡之开镜优化思路
类似大逃杀类射击游戏,关卡很大,物件多,使用到Level Streaming和Cull Distance Volumes优化;Cull Distance Volumes是可以动态关闭和开启的。 Level Streaming:根据不同项目地图设定,大关卡拆分很多子关卡,根据玩家视野距离动态加载卸载关卡,注意开启异步加载net.AllowAsyncLoadingEnabled Cull Dis...
这个咋做,老手求救
我想做一个教学任务录入系统,它可以支持不同ID的登入(当然根据ID的级别不同,会有不同的权限) rn然后教学计划等可以查询 我需要掌握哪些知识? JSP是必须的吗?
java 做的坦克大战的源码
java 做的坦克大战的源码里面包括了许多技术,望大家相互参阅
小白求助做俄罗斯方块思路
小白一个,求助。不知道在c++中如何实现
用java做的坦克大战
用java做的坦克大战小游戏,可以运行.
Java小白求救
[code=java]class Rootrnrn staticrn System.out.println("Root的静态初始化块");rn rn rn System.out.println("Root的普通初始化块");rn rn public Root()rn rn System.out.println("Root的无参数的构造器");rn rnrnclass Mid extends Rootrnrn staticrn System.out.println("Mid的静态初始化块");rn rn rn System.out.println("Mid的普通初始化块");rn rn public Mid()rn rn System.out.println("Mid的无参数的构造器");rn rn public Mid(String msg)rn rn // 通过this调用同一类中重载的构造器rn this();rn System.out.println("Mid的带参数构造器,其参数值:"rn + msg);rn rnrnclass Leaf extends Midrnrn super();rn staticrn System.out.println("Leaf的静态初始化块");rn rn rn System.out.println("Leaf的普通初始化块");rn rn public Leaf()rn rn // 通过super调用父类中有一个字符串参数的构造器rn super("疯狂Java讲义");rn System.out.println("执行Leaf的构造器");rn rnrnpublic class Testrnrn public static void main(String[] args)rn rn new Leaf();rn new Leaf();rn rn[/code]rnrn求教大神如何执行的,还有this那行,为什么不是两个“Mid的无参数的构造器”
java 坦克大战java 坦克大战
java 坦克大战 java 坦克大战 java 坦克大战 java 坦克大战 java 坦克大战 java 坦克大战
java做的坦克大战(带图片)
自己做的坦克大战,有些地方可能还需要改进,希望不要介意!
用java做的坦克大战游戏
本作品为用java制作的坦克大战游戏,其中包含了java很多的重要知识,是学习java的好作品。
java做的坦克大战3.0版
该游戏已实现小时候玩的坦克大战的大部分功能,用来加强java编程很实用
JAVA 做坦克大战(请求指导)
能做么?rn需要用到什么?rn知道的告诉下~~~rn谢了~~
用java 做坦克大战 系统
对于计算机语言枯燥无味的学习让很多人感到无奈,那么在学习中,玩点小的项目,会不会增加点激情呢,大家一起来试试吧,
用java做的坦克大战源码
用java做的坦克大战 ,比较强大。比较适合初学者
咋做?
response.Write( "" &rs2("UserName") & " ")rnrn我想写成rnresponse.Write( "&username=<%=rs2("username")%>">" &rs2("UserName") & " ")rnrn的格式。老出错。
推箱子(多关卡)完整源代码
简单的推箱子游戏程序,包含读取加载及选关功能,游戏难度随着关卡提升而提高
C语言多关卡推箱子
C语言多关卡推箱子,兄台了解一下?没错,C语言完整简单项目实战 很高兴你能光临小编寒舍 首先感谢百忙之中你能从万千文章中点小编得专属页面。这不是娱乐篇,这是学习道场。开始前,小编就做一个简单得自我介绍:(开启装逼模式) 我就是传说中写文章通俗而不庸俗,说话风流而不下流,智慧与美貌并重,英雄与侠义得化身得小编老师。人间人爱,花见花开已不足以形容我得帅气! 我又被打了,帮忙叫下120 ...
(Java)坦克大战坦克大战
这是模仿经典的FC坦克大战的游戏,游戏里面用到了很多基础性的知识点,比如:集合,文件读取,获取焦点,等等一系列简单的知识。游戏的开发完整性较好,运行顺畅。在程序中解决了图像的闪烁问题,还解决了部分内存占用问题……
小白求救~
说实在话,从注册这个号到发帖才过了不到20分钟,看了几篇帖子,想了个开头都让我抓耳挠腮的,好吧,废话不多说。rn 本人才大学毕业,虽然是计算机专业,但是现在这个大学状况,大家懂的..对于计算机编程,php,html神马的一窍不通,更不用说各位大大讨论的什么VB啊之类的,但是偏偏天不遂人愿,被家里领导一脚踹到了一家网络公司,主管看我什么都不会,也是无奈至极,于是要我学习PHP。可是我一头雾水的,对于HTML只知道那么一点点,我发誓这是我说的最大的实话,真的只有一点点,所以想在这里求助大家,要学好PHP应该看什么书,从哪方面入手,先记哪些东西之类的。谢谢大家了,但愿我这烂贴不会沉..
小白求救!
最近学校有个比赛,要写个手机软件,本人小白,不会,求指导,时间紧迫啊。rn要求:编写一个软件,当有收到特定的短信内容(或指定短信号码)时会发出警报声。谢谢rn以下是我找的,求改,或者你们写出完整代码,指导我怎么做啊,谢谢。感激不尽。rn/**rn * rn */rnpackage org.crazyit.broadcast;rnrnimport android.content.BroadcastReceiver;rnimport android.content.Context;rnimport android.content.Intent;rnimport android.os.Bundle;rnimport android.telephony.SmsMessage;rnimport android.util.Log;rnimport android.widget.Toast;rnrnpublic class SmsReceiver extends BroadcastReceiverrn rn // 当接收到短信时被触发rn @Overridern public void onReceive(Context context, Intent intent)rn rn // 如果是接收到短信rn if (intent.getAction().equals(rn "android.provider.Telephony.SMS_RECEIVED"))rn rn // 取消广播(这行代码将会让系统收不到短信)rn abortBroadcast();rn StringBuilder sb = new StringBuilder();rn // 接收由SMS传过来的数据rn Bundle bundle = intent.getExtras();rn // 判断是否有数据rn if (bundle != null)rn rn // 通过pdus可以获得接收到的所有短信消息rn Object[] pdus = (Object[]) bundle.get("pdus");rn // 构建短信对象array,并依据收到的对象长度来创建array的大小 rn SmsMessage[] messages = new SmsMessage[pdus.length];rn for (int i = 0; i < pdus.length; i++)rn rn messages[i] = SmsMessagern .createFromPdu((byte[]) pdus[i]);rn rn // 将送来的短信合并自定义信息于StringBuilder当中 rn for (SmsMessage message : messages)rn rn sb.append("短信来源:");rn // 获得接收短信的电话号码rn sb.append(message.getDisplayOriginatingAddress());rn sb.append("\n------短信内容------\n");rn // 获得短信的内容rn sb.append(message.getDisplayMessageBody());rn rn rn Log.d("mss",sb.toString().trim());rn Toast.makeText(context, sb.toString()rn , 5000).show();rn rn rnrnrn
小白求救。。。
小弟初学C++,书上有一段例子,我用vc++2010编译的,while循环之后的那两句不显示,但程序可以正常运行,帮我看看是怎么回事吧:rn#include "stdafx.h"rn#include rn#include rnusing namespace std;rnint main()rnrn cout << "please input words:\n";rn string word;rn while (cin >> word)rn cout << "the word is " << word << '\n';rn [color=#FF0000]cout << "ok,no words any more! " << '\n' << "please input words:\n";//这里面的两句不显示[/color]rn return 0;rn
没思路没思路啊 大侠留步!
给你1 2 3 4 5 6 这个六个数 让你打印所有组合的结果 4不能排在第三位 3和5不能相邻rn
做这个东西有什么思路没
帮人做一个软件,要求是,对方用火狐浏览器打开登录淘宝,购买商品后,不是要添加收货地址么rn复制1个地址,点下软件,自动给加上去rn我post加地址都搞好了,发现想抓取浏览器的cookie好麻烦,首先不包含httponly的不能用,要抓完整的cookie就要监视网卡抓数据包,用了一个第三方模块,结果有时候灵有时候抓不到,很是麻烦,有什么好办法么
关卡 - Aragami关卡设计
游戏名为 荒神(Aragami),平台Steam注:由于本关卡是用游戏自带的关卡编辑器设计,需要拥有游戏本体才能运行该关卡。因此我将自己在关卡中游玩的视频录制下来。请访问地址观看:http://v.youku.com/v_show/id_XMzIxMDAwNTQzMg==.html?spm=a2h3j.8428770.3416059.1 关卡发布在Steam创意工坊,名称:LD - Introdu...
Java贪吃蛇(关卡功能)
贪吃蛇Java源代码,设置关卡功能,内有详细注解,学生党作品
java写的坦克大战(坦克大战单机版)
java写的坦克大战,坦克大战单机版,在Eclipse中运行成功
java用swing做的一个简单的坦克大战
使用java做的一个比较简单的坦克大战,主要面向于学过Java的人群,与学了一段时间的人,有利于面向对象思想的提高,如果运行不了,可以参看readme帮助文档,里面有整个坦克大战详细的说明,总是看到有些刚学java的人说java不好学,其实并不是,java并不难,哪门语言都一样都要多打代码,多思考,当然,我还没做到多思考,只是多打代码,同时可以给刚学java的人一些学习的动力。
用C#做坦克大战
通俗易懂的小游戏,和小时候玩的真像,消灭对方,响起胜利的音乐!!
1.22 做坦克大战
今天(其实就是夜里过了十二点),晴空万里,按照文中的目标下一步应该是做一个坦克,和让它动。 文中用了一个球代替。 在类中添加了一个画球的方法。 1. 其中有一段添加颜色的信息,是这样子的 Color c = g.getColor();   g.setColor(Color.RED);   g.fillOval(50, 50, 30, 30);   g.setColor(c
vb做的坦克大战小游戏
vb做的坦克大战,我是新手做的不好,大家评评吧
HTML5 坦克大战游戏的制作思路
BattleCity(坦克大战) github地址 在线试玩(使用ES6完成,浏览器版本过低无法打开) 整个游戏为我个人独立完成,基本上复原了85版的游戏,因为一开始写这个游戏的时候说实话连canvas都不懂,一直都是边学边改的状态,所以花费了二十来天的时间才写好。现在回过头再去看这个游戏其实并不算多么的复杂,一些基本的问题处理好就行——这也是这篇文章所想要说明的东西。如果有同学也想要自己写一
C语言做的坦克大战
大家可以看下这些代码,希望有些帮助,本人菜鸟,希望大家多多指导
1.21 做坦克大战
今天,晴空万里,决定做一个游戏练练手 找到一篇文章。 http://blog.csdn.net/u010412719/article/details/51712663 1. 发现有一个无法理解, this.getContentPane().setBackground(Color.RED); 在我的记忆中,好像不用加getcontentpane,我也不知道那是什么。。。 百度
java课程设计做的坦克大战(单机图片版)
这是我大学课程设计的代码,希望对大家有用,很全代码,注释,eclipse开发的,大家共同学习!
咋做?谢谢
前提:我的treeview已经和imagelist连接rntreeview在拖动的时候出现的是一个带图标和结点内容的虚图,rn问题:我只想出现虚框,即和QQ的一样,当treeview是复选的rn时候出现多个虚框.不要带图标和结点内容的虚图!!!
求救!!有什么思路做文件检索?
求助:有哪位兄弟姐妹做过不同格式的文件的检索?比如说,查找一个关键字,然后在一堆的文件中查找其文本,(如doc,html,pdf等格式)含有这个关键字的文件,然后返回该文件的URL地址??哪位大侠给点指点?期盼ing!
纯JAVA坦克大战,可以做毕业设计
J2SE ( Java 2 Standard Edition)就是Java2的标准版,主要用于桌面应用软件的编程,是伴随着计算机技术的飞速发展而诞生的一项新的开发技术。随着个人电脑的日益普及、Java功能在个人电脑上的实现,Java应用程序产生的单机增值服务逐渐体现出其影响力,对丰富人们的生活内容、愉悦身心、开发智力等起着不可忽视的作用。而随着网络的普及,信息技术的发展,电子竞技也以一种正规的行业逐步走进了人们的生活,特别是对年轻的一代,游戏更是娱乐项目中不可缺少的一种,玩游戏是一种娱乐,其实开发游戏更会使人乐在其中。 局域网坦克大战采用MyEclipse平台开发调试。玩家坦克的运行是通过键盘响应事件控制,敌方坦克则是自动运行并具有了一定的智能性。程序进行了精简和优化,游戏运行流畅,具有一定的吸引力。 论文通过总结和分析JAVA游戏的开发流程和代码框架的设计,开发了一款基于J2SE架构的游戏——局域网坦克大战,该游戏主要分为场景类、子弹类、坦克类、敌方坦克类、我方坦克类等几个类,能够实现敌方坦克和子弹的智能化运行等,具有一定的复杂性和可玩性。 题目:基于J2SE的局域网坦克大战设计与实现 运行平台要求: 1 首先电脑里按有JDK,然后安装MyEclipse。如果没有MyEclipse,只安装JDK也可以。 2 电脑系统Wxp,W7都可以,最好是Wxp 导入工程步骤和运行程序: 1 先讲解用JDK如何运行 (1)找到tank_java里的src文件夹,把src文件夹放到硬盘里,例如是D盘。 (2)开始->运行->cmd->输入d: ->cd src ->cd wyf ->cd cgq ->javac TankServer.java->java TankServer (3)开始->运行->cmd->输入d: ->cd src ->cd wyf ->cd cgq ->javac ClientServer.java->java ClientServer (4)输入用户名和IP等即可游戏。 2 用MyEclipse如何运行 (1)打开Myeclipse->File->import->General->Existing Projects into Workspace->选中Select root directory->单击右边的Browse ->找到Tank_Java,选中,确定->Finish (2)找到src打开->wyf.cgq->鼠标右键TankServer.java->Run As->Java Application (3)找到src打开->wyf.cgq->鼠标右键ClientServer.java->Run As->Java Application (4)输入用户名和IP等即可游戏。
c++做的坦克大战源码
c++做的坦克大战。附有源码。可以供学习者参考,界面很好。里面有很多经典的算法。对于c++的程序设计 ,可以参考参考。。
C#做的坦克大战
一个C#编写的坦克大战小游戏 可以看看
C#做FC坦克大战
利用C#做出FC经典游戏塔克大战,新手小白都可以拿去参考
java动态数组求和咋做啊??????
java动态数组求和咋做啊??????
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数