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

📄 gameplayer.java~69~

📁 坦克大战的游戏以及游戏管理 包括注册
💻 JAVA~69~
📖 第 1 页 / 共 3 页
字号:
        }


        //该线程监听从验证机来的消息
        class MsgReceiver extends Thread
        {
                ObjectInputStream ois;

                public MsgReceiver(ObjectInputStream ois)
                {
                        this.ois = ois;
                }

                public void run()
                {
                        while(!gameOver)
                        {
                                try
                                {
                                        Message tu = (Message)ois.readObject();
                                        messageFromServer = tu.m1;
                                }
                                catch(Exception e) {}
                        }
                }
        }



        //该线程序随机改变敌人坦克的位置和行进方向,并移动敌人和我方已经打出的炮弹
    class RandomTank extends Thread
    {
            Random rm = new Random();

            public void run()
            {
                    int i;

                    while(!gameOver)
                    {
                            for (i=0; i<tankGroup.size(); i++)    //随机移动敌人的坦克
                            {
                                    TankInfor ti = (TankInfor)tankGroup.elementAt(i);
                                    ti.dir = rm.nextInt(4)+1;

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

                                    switch(ti.dir)
                                    {
                                            case DIRUP:   //向上
                                                ti.y -= rm.nextInt(10)+10;
                                                if (ti.y < GAMEY)
                                                {
                                                    ti.y = GAMEY;
                                                }
                                                break;

                                            case DIRDOWN:   //向下
                                                ti.y += rm.nextInt(10)+10;
                                                if (ti.y > GAMEY+GAMEHEIGHT-TANKHEIGHT)
                                                {
                                                    ti.y = GAMEY+GAMEHEIGHT-TANKHEIGHT;
                                                }
                                                break;

                                            case DIRLEFT:   //向左
                                                ti.x -= rm.nextInt(10)+10;
                                                if (ti.x < GAMEX)
                                                {
                                                    ti.x = GAMEX;
                                                }
                                                break;

                                            case DIRRIGHT:   //向右
                                                ti.x += rm.nextInt(10)+10;
                                                if (ti.x > GAMEX+GAMEWIDTH-TANKWIDTH)
                                                {
                                                    ti.x = GAMEX+GAMEWIDTH-TANKWIDTH;
                                                }
                                                break;

                                            default:
                                                System.out.println("错误的方向");
                                    }
                                    //判断敌人的坦克是否与我方坦克碰撞,若碰撞,游戏结束
                                    gameOver = judgeCollision(ti, me);
                                    if (gameOver) return;

                                    ti.bomb = rm.nextInt(10);  //在随机移动敌人坦克的过程中随机打炮
                                    if (ti.bomb == 1)
                                    {
                                            bombGroup.addElement(new BombInfor(ti.x, ti.y, ti.dir));
                                        acGun.play();
                                    }
                            }

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

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

                                            case DIRLEFT:   //向左
                                                bi.x -= rm.nextInt(10)+20;
                                                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)+20;
                                                if (bi.y < GAMEY)
                                                {
                                                        myBomb.removeElement(bi);
                                                        i--;
                                                }
                                                break;

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

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

                                            case DIRRIGHT:   //向右
                                                bi.x += rm.nextInt(10)+20;
                                                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++)
                                            {
                                                        if (i%3==2){
                                                          tankGroup.addElement(new TankInfor(30, 15, 4, 0));
                                                        }
                                                        if (i%3==0){
                                                          tankGroup.addElement(new TankInfor(250, 15, 4, 0));
                                                        }
                                                        if (i%3==1){
                                                          tankGroup.addElement(new TankInfor(470, 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);

⌨️ 快捷键说明

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