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

📄 boardcanvas.java

📁 五子棋,J2ME小游戏
💻 JAVA
字号:
// Decompiled by DJ v2.9.9.61 Copyright 2000 Atanas Neshkov  Date: 2004-12-21 16:10:40
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3) 

package igs;

import javax.microedition.lcdui.*;

// Referenced classes of package igs:
//            ThinkThread, HelloMIDlet

public class BoardCanvas extends Canvas
    implements CommandListener
{

    public void setSide(int i)
    {
        side = i;
    }

    public void clearBoard()
    {
        for(int i = 0; i < 15; i++)
        {
            for(int j = 0; j < 15; j++)
                board[i][j] = 0;

        }

        stepIndex = 0;
    }

    public BoardCanvas(byte abyte0[][], HelloMIDlet hellomidlet)
    {
        stepIndex = 0;
        gameName = 0;
        side = 0;
        blackName = "";
        blackTime = 0;
        blackStep = 0;
        whiteName = "";
        whiteTime = 0;
        whiteStep = 0;
        gameInfo = "";
        cursorX = 0;
        cursorY = 0;
        board = abyte0;
        midlet = hellomidlet;
        clearBoard();
    }

    public void checkWin(byte abyte0[][], int i, int j)
    {
        try
        {
            StringBuffer stringbuffer = new StringBuffer();
            byte byte0 = ThinkThread.computerSide;
            boolean flag = false;
            boolean flag1 = false;
            for(int k = 0; k < dxs.length; k++)
            {
                int l = dxs[k];
                int i1 = dys[k];
                stringbuffer.delete(0, stringbuffer.length());
                int j1 = i - l * 6;
                int k1 = j - i1 * 6;
                for(int l1 = 0; l1 < 12;)
                {
                    char c = 'X';
                    if(j1 >= 0 && j1 < 15 && k1 >= 0 && k1 < 15)
                        if(abyte0[j1][k1] == 0)
                            c = '.';
                        else
                        if(abyte0[j1][k1] == byte0)
                            c = 'M';
                        else
                        if(abyte0[j1][k1] == 3 - byte0)
                            c = 'W';
                    stringbuffer.append(c);
                    l1++;
                    j1 += l;
                    k1 += i1;
                }

                String s = stringbuffer.toString();
                if(s.indexOf("MMMMM") >= 0)
                {
                    flag1 = true;
                    continue;
                }
                if(s.indexOf("WWWWW") >= 0)
                    flag = true;
            }

            if(flag1)
            {
                midlet.alarm("\u7535\u8BDD\u8D62\u4E86", AlertType.INFO, 1000);
                clearBoard();
                side = ThinkThread.userSide;
            }
            if(flag)
            {
                midlet.alarm("\u4F60\u8D62\u4E86", AlertType.INFO, 1000);
                clearBoard();
                side = ThinkThread.userSide;
            }
        }
        catch(Throwable throwable)
        {
            throwable.printStackTrace();
        }
    }

    public void commandAction(Command command, Displayable displayable)
    {
    }

    public void paint(Graphics g)
    {
        int i = 0;
        int j = 0;
        g.setColor(0);
        g.fillRect(0, 0, g.getClipWidth(), g.getClipHeight());
        i = Math.min(g.getClipWidth() / 2 - cursorX * perBox, i);
        j = Math.min(g.getClipHeight() / 2 - cursorY * perBox, j);
        i = Math.max(i, g.getClipWidth() - 16 * perBox);
        j = Math.max(j, g.getClipHeight() - 16 * perBox);
        g.translate(i, j);
        int k = i + g.getClipX() / perBox;
        int l = j + g.getClipY() / perBox;
        int i1 = k + g.getClipWidth() / perBox + 1;
        int j1 = l + g.getClipHeight() / perBox + 1;
        k = 0;
        l = 0;
        i1 = 15;
        j1 = 15;
        if(k < 0)
            k = 0;
        if(i1 > 15)
            i1 = 15;
        if(l < 0)
            l = 0;
        if(j1 > 15)
            j1 = 15;
        g.setColor(0xf9a902);
        g.fillRect(0, 0, perBox * 16, perBox * 16);
        g.setColor(0);
        for(int k1 = k; k1 < i1; k1++)
            g.drawLine((k1 + 1) * perBox, perBox, (k1 + 1) * perBox, 15 * perBox);

        for(int l1 = l; l1 < j1; l1++)
            g.drawLine(perBox, (l1 + 1) * perBox, 15 * perBox, (l1 + 1) * perBox);

        for(int i2 = k; i2 < i1; i2++)
        {
            for(int k2 = l; k2 < j1; k2++)
                switch(board[i2][k2])
                {
                case 1: // '\001'
                    g.setColor(0xffffff);
                    g.fillArc(i2 * perBox + (perBox + 1) / 2, k2 * perBox + (perBox + 1) / 2, perBox - 1, perBox - 1, 0, 360);
                    g.setColor(0x400000);
                    g.drawArc(i2 * perBox + (perBox + 1) / 2, k2 * perBox + (perBox + 1) / 2, perBox - 1, perBox - 1, 0, 360);
                    break;

                case 2: // '\002'
                    g.setColor(0);
                    g.fillArc(i2 * perBox + (perBox + 1) / 2, k2 * perBox + (perBox + 1) / 2, perBox - 1, perBox - 1, 0, 360);
                    g.setColor(0x400000);
                    g.drawArc(i2 * perBox + (perBox + 1) / 2, k2 * perBox + (perBox + 1) / 2, perBox - 1, perBox - 1, 0, 360);
                    break;
                }

        }

        int j2 = cursorX;
        int l2 = cursorY;
        g.setColor(255, 0, 0);
        g.drawRect(j2 * perBox + perBox / 2, l2 * perBox + perBox / 2, perBox, perBox);
        g.drawLine(j2 * perBox + perBox / 2, l2 * perBox + perBox / 2, j2 * perBox + (perBox * 3) / 2, l2 * perBox + (perBox * 3) / 2);
        g.drawLine(j2 * perBox + (perBox * 3) / 2, l2 * perBox + perBox / 2, j2 * perBox + perBox / 2, l2 * perBox + (perBox * 3) / 2);
        g.translate(-i, -j);
        g.setFont(Font.getFont(0, 1, 16));
        int i3 = 0;
        if(cursorX < 10)
        {
            Graphics _tmp = g;
            i3 |= 8;
            i = g.getClipWidth();
        } else
        {
            Graphics _tmp1 = g;
            i3 |= 4;
            i = 0;
        }
        if(cursorY < 10)
        {
            Graphics _tmp2 = g;
            i3 |= 0x20;
            j = g.getClipHeight();
        } else
        {
            Graphics _tmp3 = g;
            i3 |= 0x10;
            j = 0;
        }
        g.translate(i, j);
        g.setColor(0, 0, 0);
        g.drawString(gameInfo, 1, 0, i3);
        g.drawString(gameInfo, 0, 1, i3);
        g.drawString(gameInfo, -1, 0, i3);
        g.drawString(gameInfo, 0, -1, i3);
        g.setColor(255, 0, 0);
        g.drawString(gameInfo, 0, 0, i3);
    }

    protected void keyRepeated(int i)
    {
        int j = getGameAction(i);
        switch(j)
        {
        case 1: // '\001'
        case 2: // '\002'
        case 5: // '\005'
        case 6: // '\006'
            keyPressed(i);
            // fall through

        case 3: // '\003'
        case 4: // '\004'
        default:
            return;
        }
    }

    protected void pointerPressed(int i, int j)
    {
        int k = 0;
        int l = 0;
        k = Math.min(getWidth() / 2 - cursorX * perBox, k);
        l = Math.min((getHeight()+20) / 2 - cursorY * perBox, l);
        k = Math.max(k, getWidth() - 16 * perBox);
        l = Math.max(l, (getHeight()+20) - 16 * perBox);
        cursorX = ((i - k) + perBox / 2) / perBox;
        cursorY = ((j - l) + perBox / 2) / perBox;
        repaint();
        keyPressed(8);
    }

    protected void keyPressed(int i)
    {
        int j = getGameAction(i);
        switch(j)
        {
        case 1: // '\001'
        case 50: // '2'
            if(cursorY > 0)
                cursorY--;
            break;

        case 6: // '\006'
        case 56: // '8'
            if(cursorY < 14)
                cursorY++;
            break;

        case 2: // '\002'
        case 52: // '4'
            if(cursorX > 0)
                cursorX--;
            break;

        case 5: // '\005'
        case 54: // '6'
            if(cursorX < 14)
                cursorX++;
            break;

        case 8: // '\b'
            if(side == ThinkThread.userSide && board[cursorX][cursorY] == 0)
            {
                board[cursorX][cursorY] = ThinkThread.userSide;
                side = ThinkThread.computerSide;
                repaint();
                checkWin(board, cursorX, cursorY);
                ThinkThread thinkthread = new ThinkThread(board, this);
                thinkthread.start();
            }
            break;
        }
        switch(i)
        {
        case 55: // '7'
            perBox--;
            break;

        case 57: // '9'
            perBox++;
            break;
        }
        repaint();
    }

    private Command gotoMainFormCommand;
    private Command passCommand;
    private Command doneCommand;
    private Command undoCommand;
    private Command resignCommand;
    byte board[][];
    int stepIndex;
    HelloMIDlet midlet;
    int gameName;
    int side;
    String blackName;
    int blackTime;
    int blackStep;
    String whiteName;
    int whiteTime;
    int whiteStep;
    String gameInfo;
    static final int dxs[] = {
        1, 1, 0, -1, -1, -1, 0, 1
    };
    static final int dys[] = {
        0, 1, 1, 1, 0, -1, -1, -1
    };
    public static int perBox = 6;
    static final int borderColor = 0x400000;
    static final int whiteColor = 0xffffff;
    static final int blackColor = 0;
    static final int boardColor = 0xf9a902;
    int cursorX;
    int cursorY;

}

⌨️ 快捷键说明

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