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

📄 gamelogic.java

📁 用JAVA写的
💻 JAVA
字号:
// FrontEnd Plus GUI for JAD
// DeCompiled : gamelogic.class
import java.io.PrintStream;
import java.util.Random;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;

public class gamelogic extends Canvas
{

    int gamelevel;
    int washcount;
    int em[] = {
        1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
        11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 
        1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
        11, 12, 13, 14, 15, 16, 17, 18, 19, 20
    };
    int map[];
    int usemap[];
    int usemaplength;
    int mapheight;
    int mapwidth;
    int oldrow;
    int oldcol;
    int dc;
    int line[];
    boolean isdrawline;

    public gamelogic()
    {
        gamelevel = 0;
        washcount = 4;
        oldrow = 0;
        oldcol = 0;
        dc = 0;
        line = new int[8];
        isdrawline = false;
        mapinit(8, 6);
    }

    public void mapinit(int i, int j)
    {
        mapwidth = i;
        mapheight = j;
        map = genmap();
        for(; !checkcn(); washmap());
        gamelevel = 1;
    }

    public void nextmap()
    {
        if(gamelevel % 2 == 0)
            mapwidth++;
        if(gamelevel % 3 == 0)
            mapheight++;
        System.out.println(mapwidth + "X" + mapheight);
        map = genmap();
        for(; !checkcn(); washmap());
        gamelevel++;
    }

    public boolean gameover()
    {
        boolean flag = true;
        for(int i = 0; i < map.length; i++)
            if(map[i] != 0)
                flag = false;

        return flag;
    }

    public int getmapvalue(int i, int j)
    {
        int k = i * mapwidth + j;
        return map[k];
    }

    public int setmapvalue(int i, int j, int k)
    {
        int l = i * mapwidth + j;
        map[l] = k;
        return l;
    }

    public int[] getmapposition(int i)
    {
        int ai[] = new int[2];
        ai[0] = i / mapwidth;
        ai[1] = i - (i / mapwidth) * mapwidth;
        return ai;
    }

    public void tilespop(int i)
    {
        for(int j = mapheight - 2; j > 1; j--)
        {
            for(int k = 1; k < mapwidth - 1; k++)
                if(getmapvalue(j, k) == 0)
                    if(getmapvalue(j - 1, k) != 0)
                    {
                        usemap[setmapvalue(j, k, getmapvalue(j - 1, k))] = 0;
                        usemap[setmapvalue(j - 1, k, 0)] = 1;
                    } else
                    {
                        usemap[setmapvalue(j, k, getmapvalue(j - 2, k))] = 0;
                        usemap[setmapvalue(j - 2, k, 0)] = 1;
                    }

        }

    }

    public boolean bclick(int i, int j)
    {
        int ai[] = new int[2];
        int ai1[] = new int[2];
        if(dc == 1)
        {
            dc = 0;
            ai[0] = oldrow;
            ai[1] = oldcol;
            ai1[0] = i;
            ai1[1] = j;
            if(connectok(ai, ai1))
            {
                isdrawline = true;
                usemap[setmapvalue(oldrow, oldcol, 0)] = 1;
                usemap[setmapvalue(i, j, 0)] = 1;
                usemaplength = usemaplength - 2;
                if(washcount > 0)
                    while(!checkcn()) 
                    {
                        washmap();
                        washcount--;
                    }
                return true;
            }
        } else
        {
            oldrow = i;
            oldcol = j;
            dc = 1;
        }
        return false;
    }

    public boolean connectok(int ai[], int ai1[])
    {
        int k3 = ai[0];
        int l3 = ai[1];
        int i4 = ai1[0];
        int j4 = ai1[1];
        boolean flag = false;
        if(getmapvalue(k3, l3) != getmapvalue(i4, j4))
            return flag;
        if(k3 == i4 && l3 == j4)
            return flag;
        if(getmapvalue(k3, l3) == 0)
            return flag;
        for(int i = 0; i < mapheight; i++)
        {
            int k4 = i;
            int i5 = l3;
            int k5 = i;
            int i6 = j4;
            flag = true;
            if(flag)
                if(k4 <= k3)
                {
                    for(int k = k4; k < k3; k++)
                    {
                        if(getmapvalue(k, l3) == 0)
                            continue;
                        flag = false;
                        break;
                    }

                } else
                {
                    for(int l = k3 + 1; l <= k4; l++)
                    {
                        if(getmapvalue(l, l3) == 0)
                            continue;
                        flag = false;
                        break;
                    }

                }
            if(flag)
                if(k5 <= i4)
                {
                    for(int i1 = k5; i1 < i4; i1++)
                    {
                        if(getmapvalue(i1, j4) == 0)
                            continue;
                        flag = false;
                        break;
                    }

                } else
                {
                    for(int j1 = i4 + 1; j1 <= k5; j1++)
                    {
                        if(getmapvalue(j1, j4) == 0)
                            continue;
                        flag = false;
                        break;
                    }

                }
            if(flag)
            {
                if(i5 <= i6)
                {
                    for(int k1 = i5 + 1; k1 < i6; k1++)
                    {
                        if(getmapvalue(k4, k1) == 0)
                            continue;
                        flag = false;
                        break;
                    }

                } else
                {
                    for(int l1 = i6 + 1; l1 < i5; l1++)
                    {
                        if(getmapvalue(k4, l1) == 0)
                            continue;
                        flag = false;
                        break;
                    }

                }
                line[0] = k3;
                line[1] = l3;
                line[2] = i4;
                line[3] = j4;
                line[4] = k4;
                line[5] = i5;
                line[6] = k5;
                line[7] = i6;
            }
            if(flag)
                break;
        }

        if(flag)
            return flag;
        for(int j = 0; j < mapwidth; j++)
        {
            int l4 = k3;
            int j5 = j;
            int l5 = i4;
            int j6 = j;
            flag = true;
            if(flag)
                if(j5 <= l3)
                {
                    for(int i2 = j5; i2 < l3; i2++)
                    {
                        if(getmapvalue(k3, i2) == 0)
                            continue;
                        flag = false;
                        break;
                    }

                } else
                {
                    for(int j2 = l3 + 1; j2 <= j5; j2++)
                    {
                        if(getmapvalue(k3, j2) == 0)
                            continue;
                        flag = false;
                        break;
                    }

                }
            if(flag)
                if(j6 <= j4)
                {
                    for(int k2 = j6; k2 < j4; k2++)
                    {
                        if(getmapvalue(i4, k2) == 0)
                            continue;
                        flag = false;
                        break;
                    }

                } else
                {
                    for(int l2 = j4 + 1; l2 <= j6; l2++)
                    {
                        if(getmapvalue(i4, l2) == 0)
                            continue;
                        flag = false;
                        break;
                    }

                }
            if(flag)
                if(l4 <= l5)
                {
                    for(int i3 = l4 + 1; i3 < l5; i3++)
                    {
                        if(getmapvalue(i3, j5) == 0)
                            continue;
                        flag = false;
                        break;
                    }

                } else
                {
                    for(int j3 = l5 + 1; j3 < l4; j3++)
                    {
                        if(getmapvalue(j3, j5) == 0)
                            continue;
                        flag = false;
                        break;
                    }

                }
            if(flag)
                break;
        }

        return flag;
    }

    public int[] genmap()
    {
        map = new int[mapwidth * mapheight];
        int i = 0;
        int ai[] = new int[map.length];
        usemap = new int[map.length];
        int j = ai.length;
        int ai1[] = new int[2];
        int ai3[] = new int[2];
        Random random = new Random();
        for(int k = 0; k < mapheight; k++)
        {
            for(int i1 = 0; i1 < mapwidth; i1++)
            {
                if(i1 == 0 || i1 == mapwidth - 1 || k == 0 || k == mapheight - 1)
                {
                    ai[i] = 1;
                    usemap[i] = 1;
                    j--;
                }
                i++;
            }

        }

        usemaplength = j;
        for(int l = 0; l < em.length; l++)
            if(j > 0)
            {
                int k1 = Math.abs(random.nextInt()) % j;
                int l1 = getnotuse(k1, ai);
                int ai2[] = getmapposition(l1);
                j--;
                ai[l1] = 1;
                usemaplength--;
                usemap[l1] = 1;
                for(int j1 = 0; j1 < j; j1++)
                {
                    int i2 = getnotuse(j1, ai);
                    int ai4[] = getmapposition(i2);
                    if(connectok(ai2, ai4))
                    {
                        j--;
                        ai[i2] = 1;
                        map[l1] = em[l];
                        usemap[l1] = 0;
                        usemaplength++;
                        map[i2] = em[l];
                        break;
                    }
                    if(j1 == j - 1)
                    {
                        j--;
                        ai[i2] = 1;
                        map[l1] = em[l];
                        usemap[l1] = 0;
                        usemaplength++;
                        map[i2] = em[l];
                    }
                }

            }

        return map;
    }

    public int getnotuse(int i, int ai[])
    {
        int j = 0;
        int k = 0;
        for(j = 0; j < ai.length; j++)
        {
            if(ai[j] == 0 && k == i)
                break;
            if(ai[j] != 1)
                k++;
        }

        return j;
    }

    public boolean checkcn()
    {
        boolean flag = false;
        int ai[] = new int[2];
        int ai2[] = new int[2];
        if(usemaplength <= 1)
            return true;
        for(int i = 0; i < usemaplength; i++)
        {
            int k = getnotuse(i, usemap);
            int ai1[] = getmapposition(k);
            for(int j = 0; j < usemaplength; j++)
            {
                int l = getnotuse(j, usemap);
                int ai3[] = getmapposition(l);
                if(i == j || !connectok(ai1, ai3))
                    continue;
                flag = true;
                break;
            }

            if(flag)
                break;
        }

        return flag;
    }

    public void washmap()
    {
        int ai[] = new int[usemap.length];
        System.arraycopy(usemap, 0, ai, 0, usemap.length);
        int i = usemaplength;
        int ai1[] = new int[2];
        int ai3[] = new int[2];
        Random random = new Random();
        int ai5[] = new int[usemaplength];
        for(int j = 0; j < usemaplength; j++)
        {
            int j1 = getnotuse(j, usemap);
            ai5[j] = map[j1];
        }

        for(int k = 0; k < ai5.length; k++)
            if(i > 0)
            {
                int i1 = Math.abs(random.nextInt()) % i;
                int k1 = getnotuse(i1, ai);
                int ai2[] = getmapposition(k1);
                i--;
                ai[k1] = 1;
                for(int l = 0; l < i; l++)
                {
                    int l1 = getnotuse(l, ai);
                    int ai4[] = getmapposition(l1);
                    if(connectok(ai2, ai4))
                    {
                        i--;
                        ai[l1] = 1;
                        map[k1] = ai5[k];
                        map[l1] = ai5[k];
                        break;
                    }
                    if(l == i - 1)
                    {
                        i--;
                        ai[l1] = 1;
                        map[k1] = ai5[k];
                        map[l1] = ai5[k];
                    }
                }

            }

    }

    public void drawline(Graphics g)
    {
        if(isdrawline)
        {
            isdrawline = false;
            for(int i = 0; i < 8; i++)
                System.out.println(line[i]);

        }
    }

    public void paint(Graphics g)
    {
    }
}

⌨️ 快捷键说明

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