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

📄 weapon.java

📁 thq 发布的《worms》 motorola 源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                        {
                            Landscape _tmp1 = landscape;
                            if(positionY <= 150)
                                break label2;
                        }
                    }
                    weaponDone();
                    return;
                }
                smokeTrailSize[curTrail] = 10;
                landscape.center(positionX, positionY);
                if(activeWeapon == 3 || activeWeapon == 2)
                {
                    landscape.circle_init[0] = false;
                    landscape.circle_init[1] = false;
                    landscape.circle_init[2] = false;
                    landscape.circle_init[3] = false;
                    landscape.circle_init[4] = false;
                    if(blowUpTime == 0)
                    {
                        explode(positionX, positionY, 1);
                        if(activeWeapon == 3)
                            activeWeapon = -1;
                        if(activeWeapon == 2)
                        {
                            activeWeapon = 5;
                            initialX = positionX;
                            initialY = positionY;
                            time = 0;
                            for(int j = 0; j < explosionStartTime.length; j++)
                            {
                                if(j < 2)
                                    angle = Math.abs(random.nextInt()) % 90;
                                else
                                    angle = Math.abs(random.nextInt()) % 90 + 270;
                                sinAng[j] = Game.table[angle % 360] * 15;
                                cosAng[j] = Game.table[(angle + 90) % 360] * 15;
                                time = 60;
                                sinAng[j] *= deltaTime;
                                cosAng[j] *= deltaTime;
                                sinAngleI[j] = 0;
                                cosAngleI[j] = 0;
                                gravityAdd[j] = -2501 * deltaTime;
                                gravityI[j] = 0;
                                clustletX[j] = positionX;
                                clustletY[j] = positionY;
                            }

                        }
                    } else
                    {
                        if(time > 500 && (landscape.earthCollision(positionX - 4, positionY, true, null) || landscape.earthCollision(positionX + 4, positionY, true, null) || landscape.earthCollision(positionX - 4, positionY + 4, true, null) || landscape.earthCollision(positionX + 4, positionY + 4, true, null)))
                            fire(game, landscape, parentWorm, activeWeapon, positionX, positionY - 4, windFactor, velocity / 2 + velocity / 4, angle, false);
                        if(activeWeapon == 3)
                            grenade.setFrame(Game.curFrame % grenade.frameCount);
                        if(activeWeapon == 2)
                            cluster.setFrame(Game.curFrame % cluster.frameCount);
                    }
                }
                if(activeWeapon == 0 || activeWeapon == 1)
                {
                    landscape.circle_init[0] = false;
                    landscape.circle_init[1] = false;
                    landscape.circle_init[2] = false;
                    landscape.circle_init[3] = false;
                    landscape.circle_init[4] = false;
                    boolean flag = false;
                    if(weaponIterationCount < 8)
                        flag = CollisionIterator.checkCollision(oldPositionX, oldPositionY, positionX, positionY, landscape, parentWorm);
                    else
                        flag = CollisionIterator.checkCollision(oldPositionX, oldPositionY, positionX, positionY, landscape, null);
                    if(flag)
                    {
                        positionX = CollisionIterator.collisionX;
                        positionY = CollisionIterator.collisionY;
                        if(activeWeapon == 0)
                        {
                            explode(positionX, positionY, 1);
                            activeWeapon = -1;
                        }
                        if(activeWeapon == 1)
                        {
                            explode(positionX, positionY, 2);
                            activeWeapon = -1;
                        }
                    }
                }
            }
            if(activeWeapon == 5)
            {
                landscape.center(clustletX[0] + clustletX[1] + clustletX[2] + clustletX[3] >> 2, clustletY[0] + clustletY[1] + clustletY[2] + clustletY[3] >> 2);
                for(int k = 0; k < clustletY.length; k++)
                    if(!clustletExploded[k])
                        if(!landscape.earthCollision(clustletX[k], clustletY[k], true, null))
                        {
                            clustletX[k] = initialX + (cosAngleI[k] >> 16);
                            clustletY[k] = initialY - (sinAngleI[k] + (gravityI[k] >> 9) * time >> 16);
                            if(clustletY[k] > 150)
                                clustletExploded[k] = true;
                            time += deltaTime;
                            sinAngleI[k] += sinAng[k];
                            cosAngleI[k] += cosAng[k];
                            gravityI[k] += gravityAdd[k];
                        } else
                        {
                            explode(clustletX[k], clustletY[k], 0);
                            clustletExploded[k] = true;
                        }

                time += deltaTime;
            }
        }
        if(activeWeapon == 5)
        {
            landscape.circle_init[0] = false;
            landscape.circle_init[1] = false;
            landscape.circle_init[2] = false;
            landscape.circle_init[3] = false;
            landscape.circle_init[4] = false;
            boolean flag1 = true;
            for(int l = 0; l < clustletExploded.length; l++)
                if(!clustletExploded[l])
                    flag1 = false;

            if(flag1)
                weaponDone();
        }
    }

    public static boolean isActive()
    {
        return state == 1;
    }

    public static boolean isDynamiteActive()
    {
        return state == 2;
    }

    public static void paint(Graphics g)
    {
        rocket.setPosition((positionX - rocket.width / 2) + Landscape.levelX, (positionY - rocket.height / 2) + Landscape.levelY);
        mortar.setPosition((positionX - mortar.width / 2) + Landscape.levelX, (positionY - mortar.height / 2) + Landscape.levelY);
        grenade.setPosition((positionX - grenade.width / 2) + Landscape.levelX, (positionY - grenade.height / 2) + Landscape.levelY);
        cluster.setPosition((positionX - cluster.width / 2) + Landscape.levelX, (positionY - cluster.height / 2) + Landscape.levelY);
        dynamite.setPosition((positionX - dynamite.width / 2) + Landscape.levelX, (positionY - dynamite.height / 2) + Landscape.levelY);
        for(int i = smokeTrailX.length - 1; i > 0; i--)
            if(smokeTrailX[i] != -1 && smokeTrailSize[i] <= 8)
            {
                g.setColor(255 - (10 - smokeTrailSize[i]) * 10, 255 - (10 - smokeTrailSize[i]) * 10, 255 - (10 - smokeTrailSize[i]) * 10);
                g.fillArc((smokeTrailX[i] + Landscape.levelX) - smokeTrailSize[i] / 2, (smokeTrailY[i] + Landscape.levelY) - smokeTrailSize[i] / 2, smokeTrailSize[i], smokeTrailSize[i], 0, 360);
            }

        if(state == 1)
        {
            if(activeWeapon == 0)
                rocket.paint(g);
            if(activeWeapon == 1)
                mortar.paint(g);
            if(activeWeapon == 3)
                grenade.paint(g);
            if(activeWeapon == 2)
                cluster.paint(g);
            if(activeWeapon == 5)
            {
                for(int j = 0; j < clustletX.length; j++)
                    if(!clustletExploded[j])
                    {
                        clustlet.setPosition((clustletX[j] + Landscape.levelX) - clustlet.width / 2, (clustletY[j] + Landscape.levelY) - clustlet.height / 2);
                        clustlet.setFrame((Game.curFrame + clustletStartFrame[j]) % clustlet.frameCount);
                        clustlet.paint(g);
                    }

            }
            if(blowUpTime > 0)
            {
                if(activeWeapon == 3)
                    FontRender.writeString(g, "" + blowUpTime, grenade.positionX - 6, grenade.positionY - 6);
                if(activeWeapon == 2)
                    FontRender.writeString(g, "" + blowUpTime, grenade.positionX - 6, grenade.positionY - 6);
            }
        }
        if(state == 2)
        {
            if(activeWeapon == 4)
                dynamite.paint(g);
            FontRender.writeString(g, "" + blowUpTime, dynamite.positionX + 2, dynamite.positionY - 10);
        }
        for(int k = 0; k < explosionStartTime.length; k++)
            if(explosionStartTime[k] != -1L)
            {
                explosionFrame[k] = (int)(Worms.getTime() - explosionStartTime[k]) / deviceTimerDivide;
                if(explosionFrame[k] <= 70)
                {
                    curExplosionSpr.setPosition((explosionX[k] + Landscape.levelX) - 17, (explosionY[k] + Landscape.levelY) - 17);
                    paintPhattExplosions(g, explosionFrame[k], (explosionX[k] + Landscape.levelX) - explosionHeight / 2, (explosionY[k] + Landscape.levelY) - explosionHeight / 2, explosionHeight, explosionHeight, k);
                } else
                if(explosionFrame[k] > 70)
                {
                   /* if(Menu.vibratorEnabled())
                        Game.vibrationOFF();*/
                    wormHit = false;
                    if(landscape != null && !doneQuartile4[k])
                        landscape.mapCircle_quartile4(k, explosionX[k], explosionY[k], explosionHeight);
                    doneQuartile1[k] = false;
                    doneQuartile2[k] = false;
                    doneQuartile3[k] = false;
                    doneQuartile4[k] = false;
                    explosionStartTime[k] = -1L;
                    explodeTerrain[k] = true;
                }
            }

    }

    public static void reset()
    {
        state = 0;
        for(int i = 0; i < smokeTrailX.length; i++)
        {
            smokeTrailX[i] = -1;
            smokeTrailY[i] = -1;
        }

        curTrail = 0;
    }

    public static void paintPhattExplosions(Graphics g, int i, int j, int k, int l, int i1, int j1)
    {
        if(i > 70)
            return;
        try
        {
            byte byte0;
            int k1;
            if(i < 30)
            {
                byte0 = 1;
                k1 = 0;
                g.setColor(255, 255, 230);
                if(explodeTerrain[j1])
                {
                    landscape.paint_explosion(j1, explosionX[j1], explosionY[j1], explosionHeight);
                    explodeTerrain[j1] = false;
                    if(Menu.soundEnabled()) {
                            //Game.sound_EXPLOSION.start();
                    	Game.sound.getPlayer(2);
                    	Game.sound.start();
                    }

                    /*if(Menu.vibratorEnabled() && wormHit)
                    {
                        Worms.vibratorStartTime = Worms.getTime();
                        Game.vibrationON();
                    }*/
                }
            } else
            if(i < 40)
            {
                byte0 = 2;
                k1 = (j / 5) * byte0;
                g.setColor(225, 225, 225);
                curExplosionSpr.setFrame(1);
                curExplosionSpr.paint(g);
                if(!doneQuartile1[j1])
                {
                    landscape.mapCircle_quartile1(j1, explosionX[j1], explosionY[j1], explosionHeight);
                    doneQuartile1[j1] = true;
                    //Game.vibrationOFF();
                }
            } else
            if(i < 50)
            {
                byte0 = 3;
                k1 = (j / 5) * byte0;
                g.setColor(200, 200, 200);
                if(!doneQuartile2[j1])
                {
                    landscape.mapCircle_quartile2(j1, explosionX[j1], explosionY[j1], explosionHeight);
                    doneQuartile2[j1] = true;
                    //Game.vibrationOFF();
                }
            } else
            if(i < 60)
            {
                byte0 = 4;
                k1 = (j / 5) * byte0;
                g.setColor(175, 175, 175);
                if(!doneQuartile3[j1])
                {
                    landscape.mapCircle_quartile3(j1, explosionX[j1], explosionY[j1], explosionHeight);
                    doneQuartile3[j1] = true;
                    //Game.vibrationOFF();
                }
            } else
            {
                byte0 = 5;
                k1 = (j / 5) * byte0;
                g.setColor(150, 150, 150);
                if(!doneQuartile4[j1])
                {
                    landscape.mapCircle_quartile4(j1, explosionX[j1], explosionY[j1], explosionHeight);
                    doneQuartile4[j1] = true;
                    //Game.vibrationOFF();
                }
            }
            g.fillArc(j + k1 / 2, k + k1 / 2, l - k1, i1 - k1, 0, 360);
            if(byte0 < 3)
            {
                curExplosionSpr.setFrame(2);
                curExplosionSpr.paint(g);
            } else
            if(byte0 == 3)
            {
                int l1 = i / 5;
                g.setColor(150, 150, 0);
                g.drawArc(j, k, l, i1, 0, 360);
                g.setColor(200, 200, 0);
                g.drawArc(j - l1, k - l1, l + 2 * l1, i1 + 2 * l1, 0, 360);
                g.setColor(255, 255, 100);
                g.drawArc(j - 2 * l1, k - 2 * l1, l + 4 * l1, i1 + 4 * l1, 0, 360);
            } else
            if(byte0 == 4)
            {
                int i2 = i / 5;
                g.setColor(100, 100, 0);
                g.drawArc(j, k, l, i1, 0, 360);
                g.setColor(150, 50, 50);
                g.drawArc(j - i2, k - i2, l + 2 * i2, i1 + 2 * i2, 0, 360);
                g.setColor(200, 200, 200);
                g.drawArc(j - 2 * i2, k - 2 * i2, l + 4 * i2, i1 + 4 * i2, 0, 360);
            } else
            if(byte0 == 5)
            {
                int j2 = i / 5;
                g.setColor(150, 150, 150);
                g.drawArc(j - j2, k - j2, l + 2 * j2, i1 + 2 * j2, 0, 360);
            }
        }
        catch(Exception exception)
        {
            exception.printStackTrace();
        }
        return;
    }

}

⌨️ 快捷键说明

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