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

📄 maincanvas.java

📁 j2me吃豆子游戏源码 很值得一看,对新手有作用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.io.IOException;
import javax.microedition.lcdui.*;

class MainCanvas extends Canvas implements Runnable
{

    int i;
    int j;
    int k;
    int l;
    int seed;
    int state;
    long nextTime;
    long now;
    Image maze;
    Image buf;
    Image mazebuf;
    Image imgs[];
    Graphics bg;
    Graphics mg;
    Command startCommand;
    Command pauseCommand;
    int pX;
    int pY;
    int pDir;
    int pLook;
    int pCount;
    int pState;
    int mX;
    int mY;
    int wantDir;
    int dots;
    int lives;
    int level;
    int eatCount;
    int gX[];
    int gY[];
    int gDir[];
    int gState[];
    int gCount[];
    int gLook[];
    int sLook[];
    int sX[];
    int sY[];
    int sCount[];
    int w;
    int h;
    int counter;
    int oldState;
    int speed;
    int targetX;
    int targetY;
    int bestVal;
    int bestDir;
    int randomness;
    Font f;
    char scoreChars[];
    char levelChars[];
    int fH;
    int fW;
    int lW;
    String various[] = {
        "E-BEAR presents", "The Develop Men:", "Bryan", "Tony", "Libeia"
    };
    String dummyScore;
    String dummyLevel;
    final int dx[] = {
        0, 0, 0, -1, 1
    };
    final int dy[] = {
        0, -1, 1, 0, 0
    };
    final int offsX[] = {
        -6, -6, -6, -6, -6, -6, -6, -6, -6, -6, 
        -6, -6, -6, -5, -6, -6, -6, -7, -7, -7, 
        -7
    };
    final int offsY[] = {
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 
        -2, -2, -2, 0, -2, -2, -2, 0, 0, 0, 
        0
    };
    final int bonuses[] = {
        8, 1, 2, 4
    };
    final int dPos[] = {
        0, -31, 31, -1, 1
    };
    int map[] = {
        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
        8, 8, 8, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 8, 8, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 
        8, 8, 8, 8, 1, 8, 8, 8, 8, 1, 
        8, 8, 8, 8, 8, 1, 8, 8, 1, 8, 
        8, 8, 8, 8, 1, 8, 8, 8, 8, 1, 
        8, 8, 8, 8, 8, 2, 8, 8, 8, 8, 
        1, 8, 8, 8, 8, 8, 1, 8, 8, 1, 
        8, 8, 8, 8, 8, 1, 8, 8, 8, 8, 
        2, 8, 8, 8, 8, 8, 1, 8, 8, 8, 
        8, 1, 8, 8, 8, 8, 8, 1, 8, 8, 
        1, 8, 8, 8, 8, 8, 1, 8, 8, 8, 
        8, 1, 8, 8, 8, 8, 8, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 8, 8, 8, 8, 8, 1, 8, 
        8, 8, 8, 1, 8, 8, 1, 8, 8, 8, 
        8, 8, 8, 8, 8, 1, 8, 8, 1, 8, 
        8, 8, 8, 1, 8, 8, 8, 8, 8, 1, 
        8, 8, 8, 8, 1, 8, 8, 1, 8, 8, 
        8, 8, 8, 8, 8, 8, 1, 8, 8, 1, 
        8, 8, 8, 8, 1, 8, 8, 8, 8, 8, 
        1, 1, 1, 1, 1, 1, 8, 8, 1, 1, 
        1, 1, 8, 8, 1, 1, 1, 1, 8, 8, 
        1, 1, 1, 1, 1, 1, 8, 8, 8, 8, 
        8, 8, 8, 8, 8, 8, 1, 8, 8, 8, 
        8, 8, 0, 8, 8, 0, 8, 8, 8, 8, 
        8, 1, 8, 8, 8, 8, 8, 8, 8, 8, 
        8, 8, 8, 8, 8, 8, 8, 1, 8, 8, 
        8, 8, 8, 0, 8, 8, 0, 8, 8, 8, 
        8, 8, 1, 8, 8, 8, 8, 8, 8, 8, 
        8, 8, 8, 8, 8, 8, 8, 8, 1, 8, 
        8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
        0, 8, 8, 1, 8, 8, 8, 8, 8, 8, 
        8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 
        8, 8, 0, 8, 8, 8, 8, 8, 8, 8, 
        8, 0, 8, 8, 1, 8, 8, 8, 8, 8, 
        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
        1, 8, 8, 0, 8, 8, 8, 8, 8, 8, 
        8, 8, 0, 8, 8, 1, 8, 8, 8, 8, 
        8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 
        0, 1, 0, 0, 0, 8, 8, 8, 8, 8, 
        8, 8, 8, 0, 0, 0, 1, 0, 0, 0, 
        0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 
        8, 8, 1, 8, 8, 0, 8, 8, 8, 8, 
        8, 8, 8, 8, 0, 8, 8, 1, 8, 8, 
        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
        8, 8, 8, 1, 8, 8, 0, 8, 8, 8, 
        8, 8, 8, 8, 8, 0, 8, 8, 1, 8, 
        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
        8, 8, 8, 8, 1, 8, 8, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 8, 8, 1, 
        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
        8, 8, 8, 8, 8, 1, 8, 8, 0, 8, 
        8, 8, 8, 8, 8, 8, 8, 0, 8, 8, 
        1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
        8, 8, 8, 8, 8, 8, 1, 8, 8, 0, 
        8, 8, 8, 8, 8, 8, 8, 8, 0, 8, 
        8, 1, 8, 8, 8, 8, 8, 8, 8, 8, 
        8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 1, 8, 8, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 8, 8, 
        8, 8, 8, 1, 8, 8, 8, 8, 1, 8, 
        8, 8, 8, 8, 1, 8, 8, 1, 8, 8, 
        8, 8, 8, 1, 8, 8, 8, 8, 1, 8, 
        8, 8, 8, 8, 1, 8, 8, 8, 8, 1, 
        8, 8, 8, 8, 8, 1, 8, 8, 1, 8, 
        8, 8, 8, 8, 1, 8, 8, 8, 8, 1, 
        8, 8, 8, 8, 8, 2, 1, 1, 8, 8, 
        1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 
        1, 1, 1, 1, 1, 1, 8, 8, 1, 1, 
        2, 8, 8, 8, 8, 8, 8, 8, 1, 8, 
        8, 1, 8, 8, 1, 8, 8, 8, 8, 8, 
        8, 8, 8, 1, 8, 8, 1, 8, 8, 1, 
        8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 
        8, 8, 1, 8, 8, 1, 8, 8, 8, 8, 
        8, 8, 8, 8, 1, 8, 8, 1, 8, 8, 
        1, 8, 8, 8, 8, 8, 8, 8, 1, 1, 
        1, 1, 1, 1, 8, 8, 1, 1, 1, 1, 
        8, 8, 1, 1, 1, 1, 8, 8, 1, 1, 
        1, 1, 1, 1, 8, 8, 8, 8, 8, 1, 
        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
        1, 8, 8, 1, 8, 8, 8, 8, 8, 8, 
        8, 8, 8, 8, 1, 8, 8, 8, 8, 8, 
        1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
        8, 1, 8, 8, 1, 8, 8, 8, 8, 8, 
        8, 8, 8, 8, 8, 1, 8, 8, 8, 8, 
        8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 8, 8, 8, 
        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
        8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
        8
    };
    Thread runner;
    int x0;
    int y0;

    public MainCanvas(Command command, Command command1)
    {
        seed = 1;
        state = 0;
        imgs = new Image[27];
        gX = new int[3];
        gY = new int[3];
        gDir = new int[3];
        gState = new int[3];
        gCount = new int[3];
        gLook = new int[3];
        sLook = new int[4];
        sX = new int[4];
        sY = new int[4];
        sCount = new int[4];
        counter = 0;
        f = Font.getFont(0, 0, 0);
        scoreChars = new char[6];
        levelChars = new char[2];
        dummyScore = "00000";
        dummyLevel = "00";
        //System.out.println("main error 1");

        startCommand = command;
        pauseCommand = command1;

        //System.out.println("main error 2 ");
        try
        {
            maze = Image.createImage("/pacmaze.png");
            for(i = 0; i < 27; i++)
                imgs[i] = Image.createImage("/img" + i + ".png");

        }
        catch(IOException ioexception) { }

        //System.out.println("main error 3 ");
        w = getWidth();
        h = getHeight();
        if(w > 112)
        {
            x0 = (w - 112) / 2;
            w = 112;
        }
        if(h > 133)
        {
            y0 = (h - 133) / 2;
            h = 133;
        }

        //System.out.println("main error 4 ");

        buf = Image.createImage(w, h);
        mazebuf = Image.createImage(112, 124);
        bg = buf.getGraphics();
        mg = mazebuf.getGraphics();
        //System.out.println("main error 4 ");

        bg.setColor(0, 0, 0);
        bg.fillRect(0, 0, w, h);
        //System.out.println("main error 5 ");

        f = Font.getFont(0, 0, 0);
        fH = f.getHeight() - 1;
        if(fH > 10)
        {
            f = Font.getFont(0, 0, 8);
            fH = f.getHeight() - 1;
            if(fH > 11)
                fH = 11;
        }

        //System.out.println("main error 6 ");
        bg.setFont(f);
        mg.setFont(f);
        fW = f.stringWidth(dummyScore);
        lW = f.stringWidth(dummyLevel);
        prepareIntro();

        //System.out.println("main error 7 ");
        runner = new Thread(this);
        runner.start();
        //System.out.println("main error 8 ");
    }

    public void prepareIntro()
    {
        //System.out.println("main error 9 ");
        mg.setColor(0, 0, 0);
        mg.fillRect(0, 0, w, h - 9);
        //MainCanvas _tmp = this;
        //MainCanvas _tmp1 = this;
        //System.out.println("main error 10 ");

        mg.drawImage(imgs[25], (w - 96) / 2, 11, 0x10 | 0x4);
        mg.setColor(255, 255, 255);

        //System.out.println("main error 11 ");
        //MainCanvas _tmp2 = this;
        //MainCanvas _tmp3 = this;

        //System.out.println("main error 12 ");
        mg.drawString(various[0], (w - f.stringWidth(various[0])) / 2, 0, 0x10 | 0x4);
        //MainCanvas _tmp4 = this;
        //MainCanvas _tmp5 = this;

        //System.out.println("main error 13 ");
        mg.drawString(various[1], (w - f.stringWidth(various[1])) / 2, 35, 0x10 | 0x4);
        bg.setClip(0, 0, w, h - 9);
        state = 10;
        oldState = 10;
        counter = 0;

        //System.out.println("main error 14 ");
        removeCommand(pauseCommand);
        addCommand(startCommand);
        //System.out.println("main error 15 ");
    }

    public void resetGame()
    {
        bg.setClip(0, 0, w, h);
        bg.setColor(0, 0, 0);
        removeCommand(startCommand);
        addCommand(pauseCommand);
        for(i = 0; i < 6; i++)
            scoreChars[i] = '0';

        lives = 2;
        level = 1;
        bg.fillRect(0, h - 9, w, 9);
        //MainCanvas _tmp = this;
        //MainCanvas _tmp1 = this;
        bg.drawImage(imgs[5], fW + 8, h - 8, 0x10 | 0x4);
        //MainCanvas _tmp2 = this;
        //MainCanvas _tmp3 = this;
        bg.drawImage(imgs[5], fW + 18, h - 8, 0x10 | 0x4);
        resetMap();
    }

    public void resetMap()
    {
        for(i = 0; i < 930; i++)
            map[i] &= 0xb;

        dots = 0;
        //MainCanvas _tmp = this;
        //MainCanvas _tmp1 = this;
        mg.drawImage(maze, 0, 0, 0x10 | 0x4);
        bg.setColor(0, 0, 0);
        bg.fillRect(w - lW - 10, h - 9, lW + 10, 9);
        bg.setColor(255, 255, 255);
        levelChars[1] = (char)(48 + level % 10);
        levelChars[0] = (char)(48 + (level / 10) % 10);
        //MainCanvas _tmp2 = this;
        //MainCanvas _tmp3 = this;
        bg.drawChars(levelChars, 0, 2, w - lW, h - fH, 0x10 | 0x4);
        //MainCanvas _tmp4 = this;
        //MainCanvas _tmp5 = this;
        bg.drawImage(imgs[21 + (level + 3 & 0x3)], w - lW - 10, h - 8, 0x10 | 0x4);
        resetMobiles();
    }

    public void resetMobiles()
    {
        state = 0;
        counter = 0;
        pX = 58;
        pY = 92;
        pLook = 4;
        wantDir = 0;
        pDir = 0;
        pState = 0;
        pCount = 20;
        for(i = 0; i < 4; i++)
            sCount[i] = 0;

        for(i = 0; i < 3; i++)
        {
            gLook[i] = 8 + i;
            gY[i] = 56;
            gX[i] = 50 + 8 * i;
            gDir[i] = 3 + (randi() & 0x1);
            gCount[i] = 30 + 30 * i;
            gState[i] = 0;
        }

        if(map[541] + map[542] > 0)
        {
            map[541] = 0;
            map[542] = 0;
            mg.setColor(0, 0, 0);
            mg.fillRect(50, 66, 12, 8);
        }
    }

    public int randi()
    {
        seed = (seed * 171) % 30269;
        return seed;
    }

    public void run()
    {
        do
        {
            now = System.currentTimeMillis();
            if(nextTime < now + 15L)
                nextTime = now + 15L;
            try
            {
                //MainCanvas _tmp = this;
                Thread.sleep(nextTime - now);
            }
            catch(Exception exception) { }
            nextTime = System.currentTimeMillis() + 50L;
            counter++;
            switch(state)
            {
            case 1: // '\001'
            case 5: // '\005'
            case 6: // '\006'
            case 7: // '\007'
            case 8: // '\b'
            case 9: // '\t'
            default:
                break;

            case 0: // '\0'
                if((counter & 0xff) == 255)
                {
                    map[541] = 4;
                    map[542] = 4;
                    //MainCanvas _tmp1 = this;
                    //MainCanvas _tmp2 = this;
                    mg.drawImage(imgs[21 + (level + 3 & 0x3)], 53, 66, 0x10 | 0x4);
                }
                pCount--;
                switch(pState)
                {
                default:

⌨️ 快捷键说明

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