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

📄 worldcupsoccerslime.java

📁 一个足球的小游戏
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
//<!-- 2-player version of Slime Volleyball -->
// Original code: Quin Pendragon, 1999.
//  I know that this isn't exactly an ideal example of either game coding or
//  good use of java. It wasn't meant to be. :P
//  No responsibility is taken for any damage to software, hardware,
//  keyboards, or individuals' coding habits as a result of using this code.
// Mods:
// 0) fractoid: Lost the source code, and decompiled the applet on my page
//  to get it back. This is why some of the methods are in a funny
//  order, and some variables are interestingly named :P
// 1) fractoid: added SuperSlime mod.
// 2) fractoid: turned it into SoccerSlime :)
// 3) fractoid: turned it into WorldCupSoccerSlime :)
// 4) fractoid: added Iceland and Night Elves, and sped up the final AI a smidgen
// ...

import java.applet.Applet;
import java.awt.*;

public class WorldCupSoccerSlime extends Applet
    implements Runnable
{
    private int nWidth;
    private int nHeight;
    private int p1Score;
    private int p2Score;
    private int p1X;
    private int p2X;
    private int p1Y;
    private int p2Y;
    private int p1Col;
    private int p2Col;
    private String slimeColText[] = {
        "Argentina", "Belgium", "Australia", "Iceland", "Cameroon", "P.R. of China", "Costa Rica",
        "Croatia", "Denmark", "Eucador", "Mexico", "France", "USA",
        "Italy", "Japan", "Russia", "Paraguay", "Poland",
        "Portugal", "Ireland", "Saudi Arabia", "Senegal", "Slovenia",
        "Spain", "Seth Efrica", "South Corea", "Sveden", "Tunisia", "Turkey",
        "Uruguay", "Brazil", "England", "Germany", "Night Elves"
    };
    private Color darkRed = new Color(128, 0, 0), darkGreen = new Color(0, 128, 0), darkBlue = new Color(0, 0, 128);
    private Color[] slimaryCols = {
        Color.cyan, Color.red, Color.green, Color.white, darkGreen, Color.white, darkRed,
        darkRed, new Color(119, 41, 28), Color.yellow, Color.green, Color.white, Color.white,
        new Color(128, 128, 255), darkBlue, Color.white, Color.red, Color.white,
        new Color(119, 41, 28), Color.green, Color.white, Color.white, Color.white,
        new Color(185, 30, 2), Color.white, Color.red, new Color(252, 239, 82), Color.white, Color.red,
        new Color(16, 180, 180), new Color(241, 245, 71), new Color(230, 230, 230), Color.white, Color.blue,
    };
    private Color[] secondaryCols = {
        Color.white, Color.black, Color.yellow, new Color(128, 128, 255), Color.red, Color.red, darkBlue,
        Color.white, Color.white, darkBlue, Color.green, Color.blue, darkBlue,
        Color.white, Color.white, Color.blue, Color.white, Color.red,
        darkGreen, Color.white, new Color(128, 255, 128), new Color(255, 128, 0), darkGreen,
        darkBlue, new Color(13, 131, 10), Color.white, Color.blue, Color.red, Color.white,
        Color.black, new Color(7, 177, 33), Color.red, Color.black, Color.blue,
    };
    private int p1OldX;
    private int p2OldX;
    private int p1OldY;
    private int p2OldY;
    private int p1XV;
    private int p2XV;
    private int p1YV;
    private int p2YV;
    private int ballX;
    private int ballY;
    private int ballVX;
    private int ballVY;
    private int ballOldX;
    private int ballOldY;
    private Graphics screen;
    private String promptMsg;
    private int replayData[][];
    private int replayPos;
    private int replayStart;
    private boolean mousePressed;
    private boolean fCanChangeCol;
    private boolean fInPlay;
    private int p1Blink;
    private int p2Blink;
    private boolean fP1Sticky;
    private boolean fP2Sticky;
    private boolean fP1Touched;
    private boolean fP2Touched;
    private int p1TouchingGoal;
    private int p2TouchingGoal;
    private Thread gameThread;
    private boolean fEndGame;
    private boolean fPlayOn;
    private int nScoreX;
    private long startTime;
    private long gameTime;
    private int scoringRun;
    private int frenzyCol = 0;
    private int playOnTicks;
    private Image backBuffer;
    private final int SMILE_DIFF = 2;
    private final int DAMPING = 7;
    private final int MAX_TICKS_TOUCHING_GOAL = 60;
    private int JUMPVEL;
    private int SLIMEVEL;
    private int GRAVITY;
    private int gameLength; 

    private boolean worldCup = false;
    private int worldCupRound = 0;
    private boolean fExtraTime;
    private boolean fGoldenGoal;

    private boolean fSuperSlime;

    private boolean doubleBuffered;

    public void initStuff()
    {
        fEndGame = true;
        p1X = 200;
        p1Y = 0;
        p2X = 800;
        p2Y = 0;
        p1XV = 0;
        p1YV = 0;
        p2XV = 0;
        p2YV = 0;
        p1Score = 0;
        p2Score = 0;
        ballOldX = ballX = 500;
        ballOldY = ballY = 200;
        ballVX = 0;
        ballVY = 0;
        replayStart = replayPos = 0;
        fP1Touched = fP2Touched = false;
        playOnTicks = 10;
        fPlayOn = false;
        fExtraTime = false;
        fGoldenGoal = false;
        JUMPVEL = (fSuperSlime) ? 65 : 31;
        SLIMEVEL = (fSuperSlime) ? 16 : 8;
        GRAVITY = (fSuperSlime) ? 8 : 2;
    }

    private void drawButtons()
    {
        String[] buttons = {"1 minute", "2 minutes", "4 minutes", "8 minutes", "World Cup" };
        FontMetrics fm = screen.getFontMetrics();
        Color darkBlue = new Color(0, 0, 128);
        for (int i=0; i<5; i++)
        {
            screen.setColor(darkBlue);
            screen.fillRect(((2*i+1)*nWidth/10)-nWidth/12,
                nHeight*2/10, nWidth/6, nHeight/10);
            screen.setColor(Color.white);
            screen.drawString(buttons[i],
                ((2*i+1)*nWidth/10)-fm.stringWidth(buttons[i]) / 2,
                nHeight*5/20+fm.getHeight()/2);
        }
        flip();
    }

    private boolean testButton(int x, int y)
    {
        for (int i=0; i<5; i++)
        {
            if ((x > ((2*i+1)*nWidth/10)-nWidth/12)
                && (x < ((2*i+1)*nWidth/10)+nWidth/12)
                && (y > (nHeight*2/10)) && (y < nHeight*3/10))
            {
                if (i == 4) //world cup mode
                {
                gameLength = 120000;
                worldCup = true;
                }
                else
                {
                gameLength = (1<<i)*60000;
                worldCup = false;
                }
                return true;
            }
        }
        return false;
    }

    public boolean handleEvent(Event event)
    {
        switch(event.id)
        {
        default:
            break;

        case 503: // Event.MOUSE_MOVE
            showStatus("Slime Volleyball 2-Player: Soccer Slime, by Quin Pendragon: tartarus.uwa.edu.au/~fractoid");
            requestFocus();
            break;

        case 501: // Event.MOUSE_DOWN
            mousePressed = true;
            if(!fInPlay && testButton(event.x, event.y))
            {
                fEndGame = false;
                fInPlay = true;
                p1X = 200;
                p1Y = 0;
                p2X = 800;
                p2Y = 0;
                p1XV = 0;
                p1YV = 0;
                p2XV = 0;
                p2YV = 0;
                ballX = 500;
                ballY = 200;
                ballOldX = 500;
                ballOldY = 200;
                ballVX = 0;
                ballVY = 0;
                p1Score = 0;
                p2Score = 0;
                promptMsg = "";
                paint(getGraphics());
                try { Thread.sleep(100); } catch (Exception e) { }
                gameThread = new Thread(this);
                gameThread.start();
            }
            break;

        case Event.KEY_ACTION:
        case 401: // Event.KEY_PRESS
            if (fCanChangeCol)
            switch(event.key)
            {
            case 83: // 'S'
            case 115: // 's'
                do
                    p1Col = p1Col != slimaryCols.length-1 ? p1Col + 1 : 0;
                while(p1Col == p2Col);
                drawScores();
                repaint();
                break;

            case 'W':
            case 'w':
                do
                    p1Col = p1Col == 0 ? slimaryCols.length-1 : p1Col-1;
                while (p1Col == p2Col);
                drawScores();
                repaint();
                break;

            case Event.DOWN:
            case 75: // 'K'
            case 107: // 'k'
                    do
                        p2Col = p2Col != slimaryCols.length-1 ? p2Col + 1 : 0;
                    while(p2Col == p1Col);
                    drawScores();
                    repaint();
                    break;

            case 'i':
            case 'I':
            case Event.UP:
                do
                    p2Col = p2Col == 0 ? slimaryCols.length-1 : p2Col-1;
                while (p1Col == p2Col);
                drawScores();
                repaint();
                break;

            case '6':
                fSuperSlime = !fSuperSlime;
                repaint();
            }
            if(fEndGame)
                break;
            switch(event.key)
            {
            default:
                break;

            case 's':
            case 'S':
                fP1Sticky = true;
                break;

            case 'k':
            case 'K':
            case Event.DOWN:
                if (!worldCup)
                    fP2Sticky = true;
                break;

            case 65: // 'A'
            case 97: // 'a'
                p1XV = -SLIMEVEL;
                break;

            case 68: // 'D'
            case 100: // 'd'
                p1XV = SLIMEVEL;
                break;

            case 87: // 'W'
            case 119: // 'w'
                if(p1Y == 0)
                    p1YV = JUMPVEL;
                break;

            case Event.LEFT:
            case 74: // 'J'
            case 106: // 'j'
                if (!worldCup)
                    p2XV = -SLIMEVEL;
                break;

            case Event.RIGHT:
            case 76: // 'L'
            case 108: // 'l'
                if (!worldCup)
                    p2XV = SLIMEVEL;
                break;

            case Event.UP:
            case 73: // 'I'
            case 105: // 'i'
                if(p2Y == 0)
                    if (!worldCup)
                        p2YV = JUMPVEL;
                break;

            case 'b':
            case 'B':
                toggleBuffering();
                break;

            case 32: // ' '
                mousePressed = true;
                break;
            }
            break;

⌨️ 快捷键说明

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