⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gameplayer.java~63~

📁 坦克大战的游戏以及游戏管理 包括注册
💻 JAVA~63~
📖 第 1 页 / 共 2 页
字号:
                                                if (bi.x < GAMEX)
                                                {
                                                        bombGroup.removeElement(bi);
                                                        i--;
                                                }
                                                break;

                                            case DIRRIGHT:   //向右
                                                bi.x += rm.nextInt(10)+20;
                                                if (bi.x > GAMEX+GAMEWIDTH)
                                                {
                                                        bombGroup.removeElement(bi);
                                                        i--;
                                                }
                                                break;
                                    }

                                    //判断敌人的炮弹是否打中我方坦克,若打中,游戏结束
                                    gameOver = judgeShootMe(bi, me);
                                    if (gameOver) return;
                            }


                            //朝特定的方向移动自己打出的每个炮弹,
                            for(i=0; i<myBomb.size(); i++)
                            {
                                    BombInfor bi = (BombInfor)myBomb.elementAt(i);
                                    switch(bi.dir)
                                    {
                                            case DIRUP:   //向上
                                                bi.y -= rm.nextInt(10)+5;
                                                if (bi.y < GAMEY)
                                                {
                                                        myBomb.removeElement(bi);
                                                        i--;
                                                }
                                                break;

                                            case DIRDOWN:   //向下
                                                bi.y += rm.nextInt(10)+5;
                                                if (bi.y > GAMEY+GAMEHEIGHT)
                                                {
                                                        myBomb.removeElement(bi);
                                                        i--;
                                                }
                                                break;

                                            case DIRLEFT:   //向左
                                                bi.x -= rm.nextInt(10)+5;
                                                if (bi.x < GAMEX)
                                                {
                                                        myBomb.removeElement(bi);
                                                        i--;
                                                }
                                                break;

                                            case DIRRIGHT:   //向右
                                                bi.x += rm.nextInt(10)+5;
                                                if (bi.x > GAMEX+GAMEWIDTH)
                                                {
                                                        myBomb.removeElement(bi);
                                                        i--;
                                                }
                                                break;
                                    }

                                    //判断我方炮弹是否打中敌人坦克, true--胜利了, false--还没有胜利
                                    victory = judgeShootEnemy(bi, tankGroup);
                                    if (victory)
                                    {
                                            //通知服务器胜利的消息
                                            Message m = new Message();
                                            m.m1 = "Level";
                                            m.m2 = "";
                                            m.m3 = level;
                                            try
                                            {
                                                    oos.writeObject(m);
                                            }
                                            catch(Exception e){};

                                            level++;
                                            tankGroup.removeAllElements();
                                            bombGroup.removeAllElements();
                                            myBomb.removeAllElements();
                                            me.bombRemainder += MYBOMBTOTAL;    //每过一级,加20发炮弹;
                                            for (i=0; i<level+2; i++)
                                            {
                                                        tankGroup.addElement(new TankInfor(15, 15, 4, 0));
                                            }
                                    }
                            }


                            try
                            {
                                sleep(100);
                            }
                            catch(Exception e){};

                            repaint();
                    }
            }
    }

    //判断敌人的坦克是否与我方坦克碰撞,若碰撞,游戏结束. true--collide, false--No
    public boolean judgeCollision(TankInfor ti, MyTank me1)
    {
            boolean b1=false, b2=false, b3=false;
            switch(ti.dir)
            {
                    case DIRUP:
                        b1 = (ti.y >= me1.y) && (ti.y <= me1.y + MYTANKHEIGHT);
                        b2 = (ti.x >= me1.x) && (ti.x <= me1.x + MYTANKWIDTH);
                        b3 = (me1.x >= ti.x) && (me1.x <= ti.x + TANKWIDTH);
                        break;

                    case DIRDOWN:
                        b1 = (me1.y >= ti.y) && (me1.y <= ti.y + TANKHEIGHT);
                        b2 = (ti.x >= me1.x) && (ti.x <= me1.x + MYTANKWIDTH);
                        b3 = (me1.x >= ti.x) && (me1.x <= ti.x + TANKWIDTH);
                        break;

                    case DIRLEFT:
                        b1 = (ti.x >= me1.x) && (ti.x <= me1.x + MYTANKWIDTH);
                        b2 = (me1.y >= ti.y) && (me1.y <= ti.y + TANKHEIGHT);
                        b3 = (ti.y >= me1.y) && (ti.y <= me1.y + MYTANKHEIGHT);
                        break;

                    case DIRRIGHT:
                        b1 = (me1.x >= ti.x) && (me1.x <= ti.x + TANKWIDTH);
                        b2 = (me1.y >= ti.y) && (me1.y <= ti.y + TANKHEIGHT);
                        b3 = (ti.y >= me1.y) && (ti.y <= me1.y + MYTANKHEIGHT);
                        break;
            }

            if (b1 && (b2 || b3))
            {
                        acCollide.play();
                return true;
            }
            else
                return false;
    }

        //判断敌人的炮弹是否打中我方坦克,true---打中, false---没有
        public boolean judgeShootMe(BombInfor bi, MyTank me1)
        {
                boolean b1=false, b2=false;
                switch(bi.dir)
                {
                        case DIRUP:
                        case DIRDOWN:
                        case DIRLEFT:
                        case DIRRIGHT:
                            b1 = (bi.x >= me1.x) && (bi.x <= me1.x + MYTANKWIDTH);
                            b2 = (bi.y >= me1.y) && (bi.y <= me1.y + MYTANKHEIGHT);
                            break;
                }

                if (b1 && b2)
                    return true;
                else
                    return false;
        }

        //判断我方炮弹是否打中敌人坦克,true---打中, false---没有
        public boolean judgeShootEnemy(BombInfor bi, Vector tankGroup1)
        {
            for (int i=0; i<tankGroup1.size(); i++)
            {
                    TankInfor ti = (TankInfor)tankGroup1.elementAt(i);
                        boolean b1=false, b2=false;
                        switch(bi.dir)
                        {
                                case DIRUP:
                                case DIRDOWN:
                                case DIRLEFT:
                                case DIRRIGHT:
                                    b1 = (bi.x >= ti.x) && (bi.x <= ti.x + TANKWIDTH);
                                    b2 = (bi.y >= ti.y) && (bi.y <= ti.y + TANKHEIGHT);
                                    break;
                        }

                        if (b1 && b2)
                        {
                                tankGroup1.removeElement(ti);
                                i--;
                        }
            }

            if (tankGroup1.size() == 0){
              //score += 100;
              return true;
            }
            else
                return false;
        }


        public void paint(Graphics g)
        {
                if (paintStage == 0)
                {
                        mPanel.repaint();
                        lUser.repaint();
                        tfName.repaint();
                        lPass.repaint();
                        pfPass.repaint();
                        btLogin.repaint();
                        btReset.repaint();
                }
                else
                {
                    Image ii = this.createImage(this.getWidth(),this.getHeight());
                    Graphics g1 = ii.getGraphics();

                    g1.setColor(Color.yellow);
                    g1.fillRect(getX(), getY(),getWidth(),getHeight());
                    g1.setColor(Color.lightGray);
                    g1.fillRect(10, 10, 510, 510);
                    g1.setColor(Color.black);
                    g1.fillRect(15, 15, 500, 500);

                    drawTank(g1);
                    drawBomb(g1);

                    g1.setFont(new Font("黑体", Font.BOLD, 16));
                    g1.drawString("Name : "+tfName.getText(), 40, 550);
                    g1.drawString("Level : " + level, 40, 575);
                    g1.drawString("Score : " + score, 40, 600);

                    g1.drawString("Message From Server : ", 200, 550);
                    g1.drawString("                                  ", 220, 570);
                    g1.drawString(messageFromServer, 220, 575);
                    g1.drawString("Bomb Left : " + me.bombRemainder, 200, 600);
                    g1.drawImage(tankExa, 400, 530, this);


                    if (gameOver)
                    {
                            g1.setColor(Color.red);
                                g1.setFont(new Font("Comic Sans MS", Font.BOLD, 60));
                    g1.drawString("Game Over!", 100, 300);
                    }

                    g.drawImage(ii, 0, 0, this);
                }
        }

    public void drawTank(Graphics g)
    {
            //画敌人的坦克
            for (int i=0; i<tankGroup.size(); i++)
            {
                    TankInfor ti = (TankInfor)tankGroup.elementAt(i);
                    switch(ti.dir)
                    {
                            case DIRUP:
                                g.drawImage(tank1, ti.x, ti.y, this);
                                break;

                            case DIRDOWN:
                                g.drawImage(tank2, ti.x, ti.y, this);
                                break;

                            case DIRLEFT:
                                g.drawImage(tank3, ti.x, ti.y, this);
                                break;

                            case DIRRIGHT:
                                g.drawImage(tank4, ti.x, ti.y, this);
                                break;
                    }
            }

            //画自己的坦克
            switch(me.dir)
            {
                    case DIRUP:
                        g.drawImage(myTank1, me.x, me.y, this);
                        break;

                    case DIRDOWN:
                        g.drawImage(myTank2, me.x, me.y, this);
                        break;

                    case DIRLEFT:
                        g.drawImage(myTank3, me.x, me.y, this);
                        break;

                    case DIRRIGHT:
                        g.drawImage(myTank4, me.x, me.y, this);
                        break;
            }
    }


        public void drawBomb(Graphics g)
        {
                //画敌人的炮弹
                for (int i=0; i<bombGroup.size(); i++)
                {
                        BombInfor bi = (BombInfor)bombGroup.elementAt(i);
                    g.drawImage(bomb, bi.x, bi.y, this);
                }

                //画自己的炮弹
                for (int i=0; i<myBomb.size(); i++)
                {
                        BombInfor bi = (BombInfor)myBomb.elementAt(i);
                    g.drawImage(bomb, bi.x, bi.y, this);
                }
        }

        public void update(Graphics g)
        {
                paint(g);
        }


        //处理玩家的按键信息
        class KeyHandler extends KeyAdapter
        {
                public void keyPressed(KeyEvent e)
                {
                        switch(e.getKeyCode())
                        {
                                case KeyEvent.VK_UP:
                                    me.dir = DIRUP;
                                    me.y -= 6;
                                    if (me.y < GAMEY)
                                        me.y = GAMEY;
                                    break;

                                case KeyEvent.VK_DOWN:
                                    me.dir = DIRDOWN;
                                    me.y +=6;
                                    if (me.y > GAMEY+GAMEHEIGHT-MYTANKHEIGHT)
                                        me.y = GAMEY+GAMEHEIGHT-MYTANKHEIGHT;
                                    break;

                                case KeyEvent.VK_LEFT:
                                    me.dir = DIRLEFT;
                                    me.x -=6;
                                    if (me.x < GAMEX)
                                        me.x = GAMEX;
                                    break;

                                case KeyEvent.VK_RIGHT:
                                    me.dir = DIRRIGHT;
                                    me.x +=6;
                                    if (me.x > GAMEX+GAMEWIDTH-MYTANKWIDTH)
                                        me.x = GAMEX+GAMEWIDTH-MYTANKWIDTH;
                                    break;

                                default:
                                    if (me.bombRemainder > 0)
                                    {
                                        acExplode.play();
                                        myBomb.addElement(new BombInfor(me.x, me.y, me.dir));
                                        me.bombRemainder--;
                                    }
                                    else
                                    {
                                            gameOver = true;
                                    }
                                    break;
                        }
                }
        }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -