用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

请选择技术分类

 *如果你找不到更细的分类,可以选择上级分类
当前位置:云代码 - 技术问答 - 项目管理

坦克对战

 悬赏:10|提问者:云代码会员|浏览:805
举报|2019-10-30
分享到:
更多

我来回答

所有回答
举报|(3)|(2)2019-11-12
aaaaaa
举报|(2)|(2)2019-11-27
666
举报|(2)|(2)2019-12-07
66666666666
举报|(1)|(1)2020-01-03
是的是的是的
举报|(1)|(1)2020-01-03
55555555555555555
举报|(1)|(1)2020-02-07
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
举报|(1)|(1)2020-02-25
额可以
举报|(1)|(1)2020-03-23
用Java
举报|(0)|(0)2020-03-26
packagetankwar;
 
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.event.KeyEvent;
importjava.awt.event.KeyListener;
importjava.io.File;
importjava.io.FileInputStream;
importjava.util.ArrayList;
importjava.util.Random;
 
importjavax.swing.BorderFactory;
importjavax.swing.ImageIcon;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
 
importtankwar.Tank.Direction;
importbarrier.EnemyBorn;
importbarrier.Gold;
importbarrier.Home;
importbarrier.Iron;
importbarrier.SelfBorn;
importbarrier.Wall;
 
publicclassTankWarimplementsKeyListener {
    staticbooleanTIMEOUT =false;
    privateJFrame f;
    privateJPanel gamePanel;
    privatePanelShow messgePanel;
    privatemyPanel p;
    privateTank myTank;
    publicstaticfinalintAREA_WIDTH =830;
    publicstaticfinalintAREA_HEIGHT =800;
    privateArrayList<Missle> missles =newArrayList<Missle>();
    privateArrayList<Tank> allTanks =newArrayList<Tank>();
    privateArrayList<Boom> booms =newArrayList<Boom>();
    privateArrayList<Wall> walls =newArrayList<Wall>();
    privateArrayList<Iron> irons =newArrayList<Iron>();
    privateArrayList<Gold> golds =newArrayList<Gold>();
    privateArrayList<Item> items =newArrayList<Item>();
    privateArrayList<EnemyBorn> enemyBorns =newArrayList<EnemyBorn>();
    privateSelfBorn selfBorn;
    privateHome home;
    privateTank enemyTank;
    privateRandom r;
    privateImageIcon backGround;
    privatefinalString map;
    privateinttankMax;
    privatebooleanover =false;
    privatestaticintselfMax =3;
    privatebooleanwin;
    privatebooleanflash =false;
    privateTankWar tw =this;
    staticintSCORE =0;
 
    privatefinalJFrame mainF;
    privateintstyle;
 
    publicTankWar(String map,inttankMax, JFrame mainF,intstyle)
            throwsException {
        this.map = map;
        this.tankMax = tankMax;
        this.mainF = mainF;
        this.style = style;
        init();
    }
 
    privatevoidinit() {
        f =newJFrame("坦克大战 V3.0");
        gamePanel =newJPanel(null);
        p =newmyPanel();
        p.setBackground(Color.WHITE);
        r =newRandom();
        messgePanel =newPanelShow();
        initMap(newFile("map/"+ map));
 
        try{
            myTank =newTank(selfBorn.getX(), selfBorn.getY(),true, allTanks,
                    walls, irons, golds, missles, home, booms, style);
        }catch(Exception e1) {
        }
        myTank.setDir(Direction.U);
 
        allTanks.add(myTank);
        addTank();
        try{
            backGround =newImageIcon(
                    TankWar.class.getResource("/pic/whiteback.jpg"));
        }catch(Exception e) {
        }
 
        p.setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.WHITE));
        p.setSize(AREA_WIDTH, AREA_HEIGHT);
        messgePanel.setBounds(AREA_WIDTH,0,200, AREA_HEIGHT);
        gamePanel.add(messgePanel);
        gamePanel.add(p);
        f.add(gamePanel);
        f.setBounds(0,0, AREA_WIDTH +200, AREA_HEIGHT);
        f.setDefaultCloseOperation(3);
        f.setResizable(true);
        f.setFocusable(true);
        f.addKeyListener(this);
        f.setVisible(true);
 
        newThread(newRunnable() {
            publicvoidrun() {
                while(!over) {
                    if(!myTank.isLive()) {
                        selfMax--;
                        if(selfMax <0) {
                            f.removeKeyListener(tw);
                            over =true;
                            win =false;
                            break;
                        }else{
                            myTank.setLevel(1);
                            myTank.setX(selfBorn.getX());
                            myTank.setY(selfBorn.getY());
                            myTank.setDir(Direction.U);
                            myTank.setHp(50);
                            myTank.setLive(true);
                        }
                    }
                    if(tankMax <=0&& allTanks.size() ==1) {
                        f.removeKeyListener(tw);
                        over =true;
                        win =true;
                    }
                    if(!home.isLive()) {
                        f.removeKeyListener(tw);
                        over =true;
                        win =false;
                    }
                    p.repaint();
                    myTank.move();
                    for(inti =1; i < allTanks.size(); i++) {
                        allTanks.get(i).move();
                        allTanks.get(i).setNoFire(myTank.getNoFire() +1);
                        // if(allTanks.get(i).getX()%5==0&&allTanks.get(i).getY()%5==0)
                        aI(allTanks.get(i));
                    }
                    if(allTanks.size() <= enemyBorns.size() +1)
                        addTank();
                    myTank.setNoFire(myTank.getNoFire() +1);
                    messgePanel.setEnemyCount(tankMax);
                    messgePanel.setSelfCount(selfMax);
                    messgePanel.setScore(SCORE);
                    if(SCORE %500==0) {
                        SCORE +=100;
                        Item item =newItem(allTanks, booms, irons, home);
                        items.add(item);
                        item.start();
                    }
                    try{
                        Thread.sleep(30);
                    }catch(InterruptedException e) {
                    }
                }
 
                over();
            }
 
        }).start();
 
    }
 
    privateclassmyPanelextendsJPanel {
        /**
         *
         */
        privatestaticfinallongserialVersionUID = 4408440723797225328L;
 
        @Override
        publicvoidpaintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(backGround.getImage(),0,0,null);
            for(intj =0; j < walls.size(); j++) {
                walls.get(j).draw(g);
            }
            for(intj =0; j < irons.size(); j++) {
                irons.get(j).draw(g);
            }
            for(intj =0; j < golds.size(); j++) {
                golds.get(j).draw(g);
            }
            for(intj =0; j < enemyBorns.size(); j++) {
                enemyBorns.get(j).draw(g);
            }
            home.draw(g);
            selfBorn.draw(g);
 
            for(intj =0; j < allTanks.size(); j++) {
                allTanks.get(j).drawTank(g);
            }
            for(intj =0; j < irons.size(); j++) {
                irons.get(j).draw(g);
            }
 
            for(inti =0; i < missles.size(); i++) {
                missles.get(i).drawMissle(g);
                if(!missles.get(i).isLive())
                    missles.remove(i);
            }
            for(inti =0; i < booms.size(); i++) {
                if(booms.get(i).isLive())
                    booms.get(i).drawBoom(g);
                else
                    booms.remove(i);
            }
            for(intj =0; j < items.size(); j++) {
                if(!items.get(j).isLive()) {
                    items.remove(j);
                    continue;
                }
                items.get(j).draw(g);
            }
            if(over)
                drawOver(g);
            messgePanel.repaint();
        }
    }
 
    @Override
    publicvoidkeyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
 
    }
 
    @Override
    publicvoidkeyPressed(KeyEvent e) {
        if(over) {
            if(e.getKeyCode() == KeyEvent.VK_F1) {
                over =false;
                missles.clear();
                allTanks.clear();
                booms.clear();
                walls.clear();
                irons.clear();
                golds.clear();
                enemyBorns.clear();
                try{
                    init();
                }catch(Exception e1) {
                }
            }else{
                f.setVisible(false);
                mainF.setSize(800,800);
                mainF.setVisible(true);
            }
        }elseif(e.getKeyCode() == KeyEvent.VK_SPACE) {
            myTank.fire();
        }else{
            myTank.keyPress(e);
        }
    }
 
    @Override
    publicvoidkeyReleased(KeyEvent e) {
 
        myTank.keyReleased(e);
    }
 
    publicvoidaI(Tank tank) {
        if(TIMEOUT) {
            tank.setUp(false);
            tank.setLeft(false);
            tank.setDown(false);
            tank.setRight(false);
            return;
        }
 
        if(r.nextInt(40) ==0)
            tank.fire();
        if(r.nextInt(10) ==0) {
            if(tank.getX() >= myTank.getX()
                    && tank.getX() <= myTank.getX() + Tank.SIZE
                    && tank.getY() > myTank.getY()) {
                tank.setUp(true);
                tank.setLeft(false);
                tank.setDown(false);
                tank.setRight(false);
                tank.setDir(Direction.U);
                return;
            }elseif(tank.getX() >= myTank.getX()
                    && tank.getX() <= myTank.getX() + Tank.SIZE
                    && tank.getY() < myTank.getY()) {
                tank.setUp(false);
                tank.setLeft(false);
                tank.setDown(true);
                tank.setRight(false);
                tank.setDir(Direction.D);
                return;
            }
 
            elseif(tank.getX() > myTank.getX()
                    && tank.getY() >= myTank.getY()
                    && tank.getY() <= myTank.getY() + Tank.SIZE) {
                tank.setUp(false);
                tank.setLeft(true);
                tank.setDown(false);
                tank.setRight(false);
                tank.setDir(Direction.L);
                return;
            }elseif(tank.getX() < myTank.getX()
                    && tank.getY() >= myTank.getY()
                    && tank.getY() <= myTank.getY() + Tank.SIZE) {
                tank.setUp(false);
                tank.setLeft(false);
                tank.setDown(false);
                tank.setRight(true);
                tank.setDir(Direction.R);
                return;
            }
        }
        if(tank.getX() <=0) {
            tank.setUp(false);
            tank.setLeft(false);
            tank.setDown(false);
            tank.setRight(true);
            tank.setDir(Direction.R);
        }
        if(tank.getY() <=0) {
            tank.setUp(false);
            tank.setLeft(false);
            tank.setDown(true);
            tank.setRight(false);
            tank.setDir(Direction.D);
        }
        if(tank.getX() >= AREA_WIDTH - Tank.SIZE) {
            tank.setUp(false);
            tank.setLeft(true);
            tank.setDown(false);
            tank.setRight(false);
            tank.setDir(Direction.L);
        }
        if(tank.getY() >= AREA_HEIGHT - Tank.SIZE) {
            tank.setUp(true);
            tank.setLeft(false);
            tank.setDown(false);
            tank.setRight(false);
            tank.setDir(Direction.U);
        }elseif(r.nextInt(300) ==1) {
            tank.setUp(true);
            tank.setLeft(false);
            tank.setDown(false);
            tank.setRight(false);
            tank.setDir(Direction.U);
        }
 
        elseif(r.nextInt(300) ==2) {
            tank.setUp(false);
            tank.setLeft(true);
            tank.setDown(false);
            tank.setRight(false);
            tank.setDir(Direction.L);
        }elseif(r.nextInt(300) ==3) {
            tank.setUp(false);
            tank.setLeft(false);
            tank.setDown(true);
            tank.setRight(false);
            tank.setDir(Direction.D);
        }elseif(r.nextInt(300) ==4) {
            tank.setUp(false);
            tank.setLeft(false);
            tank.setDown(false);
            tank.setRight(true);
            tank.setDir(Direction.R);
        }
    }
 
    publicvoidinitMap(File file) {
        try{
            FileInputStream read =newFileInputStream(file);
            for(inti =0; i < AREA_HEIGHT /50; i++) {
                for(intj =0; j < AREA_WIDTH /50; j++) {
                    switch(read.read()) {
                    case1:
                        walls.add(newWall(j *50, i *50));
                        break;
                    case2:
                        irons.add(newIron(j *50, i *50));
                        break;
                    case3:
                        golds.add(newGold(j *50, i *50));
                        break;
                    case4:
                        selfBorn =newSelfBorn(j *50, i *50);
                        break;
                    case5:
                        enemyBorns.add(newEnemyBorn(j *50, i *50));
                        break;
                    case6:
                        home =newHome(j *50, i *50);
                        break;
                    }
                }
            }
            read.close();
        }catch(Exception e) {
        }
        ;
    }
 
    publicvoidaddTank() {
        if(tankMax <=0)
            return;
        for(inti = allTanks.size(); i < enemyBorns.size() +1; i++) {
            try{
                inttemp = r.nextInt(enemyBorns.size());
                enemyTank =newTank(enemyBorns.get(temp).getX(), enemyBorns
                        .get(temp).getY(),false, allTanks, walls, irons,
                        golds, missles, home, booms, r.nextInt(3) +1);
            }catch(Exception e) {
                e.printStackTrace();
            }
            enemyTank.setDir(Direction.D);
            enemyTank.setDown(true);
            allTanks.add(enemyTank);
            tankMax--;
            if(tankMax <=0)
                return;
        }
    }
 
    publicstaticvoidaddMyTankLives() {
        selfMax++;
    }
 
    privatevoidover() {
 
        for(inti =0; i < AREA_HEIGHT /50; i++) {
            for(intj =0; j < AREA_WIDTH /50; j++) {
                irons.add(newIron(j *50, i *50));
                p.repaint();
                try{
                    Thread.sleep(5);
                }catch(InterruptedException e) {
                }
            }
        }
        while(true) {
            flash = !flash;
            p.repaint();
            try{
                Thread.sleep(1000);
            }catch(InterruptedException e) {
            }
            f.addKeyListener(this);
        }
    }
 
    privatevoiddrawOver(Graphics g) {
        p.repaint();
        g.setColor(Color.red);
        g.setFont(newFont("Arial",1,100));
        g.drawString("GAME OVER",100,200);
        g.setFont(newFont("Arial",2,50));
        if(win)
            g.drawString("Congratulation!  You Win!",100,400);
        else
            g.drawString("So Sorry,  You Lose!",100,400);
        if(flash) {
            g.setFont(newFont("Arial",2,30));
            g.setColor(Color.BLACK);
            g.drawString("Press F1 to try again...,",150,500);
            g.drawString("Press the other Key to Return the Title...,",150,
                    600);
        }
    }
}

相关提问