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

📄 btltank.java.bak

📁 java 编写的小游戏--坦克大战
💻 BAK
📖 第 1 页 / 共 2 页
字号:
// Decompiled by DJ v2.9.9.60 Copyright 2000 Atanas Neshkov  Date: 2004-12-12 17:45:02
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3) 
// Source File Name:   BtlTank.java

import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.*;
import java.io.PrintStream;

// <applet code="BtlTank" align="baseline" width="400" height="250">
public class BtlTank extends Applet
    implements Runnable
{

    public void createGame()
    {
        if(!fGameIsLoaded)
        {
            fScreenWidth = size().width;
            fScreenHeight = size().height;
            fXMidScr = fScreenWidth / 2;
            fYMidScr = fScreenHeight / 2;
            fOffScrImage = createImage(fScreenWidth, fScreenHeight);
            fOffScrGraphics = fOffScrImage.getGraphics();
            fOffScrGraphics.setFont(fFont1);
            FontMetrics fontmetrics = fOffScrGraphics.getFontMetrics();
            fFont1Height = fontmetrics.getHeight();
            fStatsLeftMargin = fontmetrics.stringWidth("ENEMIES ");
            fOffScrGraphics.setFont(fFont2);
            fontmetrics = fOffScrGraphics.getFontMetrics();
            fFont2Height = fontmetrics.getHeight();
            fTitleImage = loadImage("title.gif");
            fPlayerGunSnd = getAudioClip(getCodeBase(), "pgun.au");
            fBgrSnd = getAudioClip(getCodeBase(), "bgr.au");
            fCollideSnd = getAudioClip(getCodeBase(), "collide.au");
            fExplodeSnd = getAudioClip(getCodeBase(), "explode.au");
            fViewerCollisionSnd = getAudioClip(getCodeBase(), "vcollide.au");
            ZTable.Initialize();
            ZMatrix.InitNonchangingValues();
            fView = new ZView();
            fLight = new ZLight(lightX, lightY, lightZ, lightIntensity);
            fWorld = new ZWorld();
            fWorld.Create(300, fLight, fCollideSnd, fExplodeSnd, fViewerCollisionSnd);
            fWorld.SetViewerDistance(256);
            fWorld.SetView(fView);
            ZObject.SetWorld(fWorld);
            createPoly();
            fWorld.SetGraphics(fOffScrGraphics, fScreenWidth, fScreenHeight, fXMidScr, fYMidScr);
            fWireframeMode = false;
            fWorld.SetWireframeMode(fWireframeMode);
            fBgrImage = createImage(fScreenWidth, fScreenHeight / 2 + 5);
            fView.SetView(0, 0, fScreenWidth, fScreenHeight, fScreenWidth / 2, fScreenHeight / 2);
            fView.SetWorld(fWorld);
            fSkyImage = loadImage("mtn.gif");
            fGameIsLoaded = true;
        }
        requestFocus();
    }

    public void stop()
    {
        if(fThread != null)
        {
            fBgrSnd.stop();
            if(fThread.isAlive())
                fThread.stop();
            fThread = null;
        }
    }

    public boolean keyDown(Event event, int i)
    {
        if(fStatus == 1)
        {
            newGame();
            newLevel();
            return true;
        }
        if(fStatus == 4)
            return true;
        switch(i)
        {
        default:
            break;

        case 74: // 'J'
        case 106: // 'j'
        case 1006: 
            fRotateLeft = true;
            break;

        case 76: // 'L'
        case 108: // 'l'
        case 1007: 
            fRotateRight = true;
            break;

        case 73: // 'I'
        case 105: // 'i'
        case 1004: 
            fMoveForward = true;
            break;

        case 75: // 'K'
        case 107: // 'k'
        case 1005: 
            fMoveBackward = true;
            break;

        case 32: // ' '
            fShooting = true;
            break;

        case 70: // 'F'
        case 102: // 'f'
            fWireframeMode = !fWireframeMode;
            fWorld.SetWireframeMode(fWireframeMode);
            break;

        case 77: // 'M'
        case 109: // 'm'
            fDrawMap = !fDrawMap;
            break;

        case 44: // ','
        case 60: // '<'
            fMapScalingFactor--;
            if(fMapScalingFactor < 1)
                fMapScalingFactor = 1;
            break;

        case 46: // '.'
        case 62: // '>'
            fMapScalingFactor++;
            if(fMapScalingFactor > 20)
                fMapScalingFactor = 20;
            break;

        case 82: // 'R'
        case 114: // 'r'
            enterIntro();
            return true;

        case 81: // 'Q'
        case 113: // 'q'
            lightIntensity += 5;
            fLight.SetLight(lightX, lightY, lightZ, lightIntensity);
            break;

        case 65: // 'A'
        case 97: // 'a'
            lightIntensity -= 5;
            fLight.SetLight(lightX, lightY, lightZ, lightIntensity);
            break;

        case 83: // 'S'
        case 115: // 's'
            fView.MoveY(10);
            break;

        case 87: // 'W'
        case 119: // 'w'
            fView.MoveY(-10);
            break;

        case 69: // 'E'
        case 101: // 'e'
            fView.RotateXZ(52, 0);
            break;

        case 68: // 'D'
        case 100: // 'd'
            fView.RotateXZ(-52, 0);
            break;

        case 84: // 'T'
        case 116: // 't'
            DEBUG = !DEBUG;
            break;

        case 66: // 'B'
        case 98: // 'b'
            BGR = !BGR;
            break;
        }
        return true;
    }

    public void checkKeys()
    {
        if(fStatus == 0 || fStatus == 2)
        {
            if(fMoveForward)
            {
                fView.Move(fMovementSpeed);
                fMovementSpeed += 3;
                if(fMovementSpeed > 20)
                    fMovementSpeed = 20;
            } else
            if(fMoveBackward)
            {
                fView.Move(-fMovementSpeed);
                fMovementSpeed += 3;
                if(fMovementSpeed > 20)
                    fMovementSpeed = 20;
            }
            if(fRotateLeft)
            {
                fView.RotateOnYAxis(-fRotationSpeed);
                fRotationSpeed += 5;
                if(fRotationSpeed > 26)
                    fRotationSpeed = 26;
            } else
            if(fRotateRight)
            {
                fView.RotateOnYAxis(fRotationSpeed);
                fRotationSpeed += 5;
                if(fRotationSpeed > 26)
                    fRotationSpeed = 26;
            }
            if(fShooting)
            {
                if(fView.Shoot(fWorld))
                    fPlayerGunSnd.play();
                fShooting = false;
            }
        }
    }

    public void drawCockpit()
    {
        fOffScrGraphics.setColor(Color.green);
        fOffScrGraphics.drawLine(fXMidScr - 20, fYMidScr, fXMidScr - 20 - 20, fYMidScr);
        fOffScrGraphics.drawLine(fXMidScr + 20, fYMidScr, fXMidScr + 20 + 20, fYMidScr);
        fOffScrGraphics.drawLine(fXMidScr, fYMidScr - 20, fXMidScr, fYMidScr - 20 - 20);
        fOffScrGraphics.drawLine(fXMidScr, fYMidScr + 20, fXMidScr, fYMidScr + 20 + 20);
        fOffScrGraphics.drawRect(fXMidScr - 20, fYMidScr - 20, 40, 40);
    }

    public void drawTextCentered(int i, int j, int k, String s, Graphics g)
    {
        FontMetrics fontmetrics = g.getFontMetrics();
        int l = i + (k - i - fontmetrics.stringWidth(s) >> 1);
        int i1 = j;
        g.setColor(Color.black);
        g.drawString(s, l - 1, i1);
        g.setColor(Color.gray);
        g.drawString(s, l + 1, i1);
        g.setColor(Color.white);
        g.drawString(s, l, i1);
    }

    public void drawBackground()
    {
        if(fStatus == 1)
        {
            fOffScrGraphics.setColor(Color.black);
            fOffScrGraphics.fillRect(0, 0, fScreenWidth, fScreenHeight);
            return;
        }
        if(!fWireframeMode)
        {
            fOffScrGraphics.drawImage(fSkyImage, -fView.fYAngle, 0, this);
            fOffScrGraphics.drawImage(fBgrImage, 0, fYMidScr + fView.fShakeYAmount, this);
            return;
        } else
        {
            fOffScrGraphics.setColor(Color.black);
            fOffScrGraphics.fillRect(0, 0, fScreenWidth, fScreenHeight);
            fOffScrGraphics.setColor(Color.gray);
            fOffScrGraphics.drawLine(0, fYMidScr + fView.fShakeYAmount, fScreenWidth, fYMidScr + fView.fShakeYAmount);
            return;
        }
    }

    private void newLevel()
    {
        fWorld.RemoveAllObjects();
        fLevel++;
        fView.fRemainingEnemies = 5;
        fStatus = 0;
        fStatusTimer = 0;
        fStartingLevelMessageCountdown = 100;
        fLowEnergyWarningMessageCountdown = 0;
        fLowEnergyWarningMessageHasPlayed = false;
        predrawBackground();
        createPoly();
        fView.SetPos(0, 0, 0, 0, 480, 0);
        fView.SetStatus(0);
        fMapScalingFactor = 4;
    }

    public void drawOffScreen()
    {
        fWorld.CheckCollision();
        fWorld.CheckCollisionWithEnemyBullet();
        checkKeys();
        fMatrix.InitTrans();
        fWorld.Transform(fMatrix);
        drawBackground();
        fView.Draw(fWorld);
        if(fStatus != 1)
        {
            drawMap(fOffScrGraphics);
            drawCockpit();
            drawStats(fOffScrGraphics);
        }
        if(fStatus == 1)
        {
            fOffScrGraphics.drawImage(fTitleImage, fScreenWidth - fTitleImage.getWidth(this) >> 1, 20, this);
            fOffScrGraphics.setFont(fFont2);
            drawTextCentered(0, 20 + fTitleImage.getHeight(this) + fFont2Height, size().width, "CLICK TO START", fOffScrGraphics);
            fOffScrGraphics.setFont(fFont1);
            drawTextCentered(0, fScreenHeight - fFont1Height, size().width, "(C) F. PERMADI", fOffScrGraphics);
        }
        if(fStatus == 3)
        {
            fOffScrGraphics.setFont(fFont2);
            drawTextCentered(0, fYMidScr - fFont2Height, size().width, "GAMEOVER", fOffScrGraphics);
            fStatusTimer++;
            if(fStatusTimer >= 100)
                enterIntro();
        }
        if(fStatus == 2)
        {
            fOffScrGraphics.setFont(fFont2);
            drawTextCentered(0, fYMidScr - fFont2Height, size().width, "STAGE " + fLevel + " CLEAR", fOffScrGraphics);
            fStatusTimer++;
            if(fStatusTimer >= 40)
                newLevel();
        }
        if(fStartingLevelMessageCountdown > 0)
        {
            fOffScrGraphics.setFont(fFont2);
            drawTextCentered(0, fYMidScr - fFont2Height * 3, size().width, "STAGE-" + fLevel, fOffScrGraphics);
            fOffScrGraphics.setFont(fFont1);
            drawTextCentered(0, (fYMidScr - fFont2Height * 3) + fFont1Height, size().width, "ELIMINATE ALL ENEMIES", fOffScrGraphics);
            fStartingLevelMessageCountdown--;
        } else
        if(fLowEnergyWarningMessageCountdown > 0)
        {
            if(fLowEnergyWarningMessageCountdown % 5 < 3)
            {
                fOffScrGraphics.setFont(fFont1);
                drawTextCentered(0, fYMidScr - fFont2Height * 3, size().width, "WARNING-LOW ENERGY", fOffScrGraphics);
            }
            fLowEnergyWarningMessageCountdown--;
        }
        if(fStatus == 0)
        {
            if(fView.fEnergy < 3)
                if(fView.fEnergy <= 0)
                {
                    fStatusTimer = 0;
                    fStatus = 3;
                } else
                if(!fLowEnergyWarningMessageHasPlayed)
                {
                    fLowEnergyWarningMessageHasPlayed = true;
                    fLowEnergyWarningMessageCountdown = 50;
                }
            if(fView.fRemainingEnemies <= 0)
            {
                fStatusTimer = 0;
                fStatus = 2;
            }
        }
    }

    public void destroy()
    {
        Runtime.getRuntime().gc();
        fOffScrGraphics.finalize();
    }

    private void newGame()
    {
        fView.fEnergy = 8;
        fView.fScore = 0;
        fLevel = 0;
    }

    private void drawMap(Graphics g)
    {
        if(!fDrawMap)
            return;
        byte byte0 = 5;
        int i = 100;
        int j = byte0 + i / 2;
        int k = fScreenHeight - (i + 5);
        int l = i;
        int i1 = (fScreenHeight - (i + 5)) + l / 2;
        float f = ((float)i / (float)(ZWorld.fWidth * 4)) * (float)fMapScalingFactor;
        g.setColor(Color.black);
        g.fillRect(byte0, k, i, l);
        g.setColor(Color.gray);
        g.drawRect(byte0, k, i, l);
        g.setColor(Color.green);
        g.drawLine(byte0, k, j, i1);
        g.drawLine(byte0 + i, k, j, i1);
        g.setFont(fFont1);
        g.setColor(Color.cyan);
        g.drawString("X" + fMapScalingFactor, byte0 + 2, (k + l) - 2);
        for(int l1 = 0; l1 < fWorld.fNumObjects; l1++)
        {
            if(fWorld.fObjects[l1].fType == 1)
                g.setColor(Color.red);
            else
            if(fWorld.fObjects[l1].fType == 0)
                g.setColor(Color.yellow);
            else
            if(fWorld.fObjects[l1].fType == 5)
                g.setColor(Color.cyan);
            else
                g.setColor(Color.white);
            int j1 = j + (int)((float)fWorld.fObjects[l1].fVertices[0].fAx * f);
            int k1 = i1 - (int)((float)fWorld.fObjects[l1].fVertices[0].fAz * f);
            if(j1 > byte0 && j1 < byte0 + i && k1 > k && k1 < k + l)
            {
                g.drawLine(j1, k1, j1 + 1, k1);
                g.drawLine(j1, k1 + 1, j1 + 1, k1 + 1);
            }
        }

    }

    public Image loadImage(String s)
    {
        MediaTracker mediatracker = new MediaTracker(this);

⌨️ 快捷键说明

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