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

📄 llkmatrix.java

📁 一个连连看游戏
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
import java.util.Random;
public class LLKMatrix
{
    private int matrix[][];
    private int VSize = 0;
    private int HSize = 0;
    private int SeedCount = 0;
    private int Score1 = 10;
    private int Score2 = 20;
    private int Score3 = 50;
    public int VConn =  - 10;
    public int HConn =  - 11;
    public int SConn =  - 10;
    public int LDConn =  - 12;
    public int LUConn =  - 13;
    public int RDConn =  - 14;
    public int RUConn =  - 15;
    public LLKMatrix(int h, int v, int s)
    {
        if ((v * h) % 2 == 0)
        {
            VSize = v;
            HSize = h;
            SeedCount = s;
            initMatrix(HSize, VSize);
        }
    }

    public int getAt(int x, int y)
    {
        if (x > HSize || x < 1 || y > VSize || y < 1)
        {
            return  - 1;
        }
        else
        {
            return matrix[x - 1][y - 1];
        }
    }
    public int setAt(int x, int y, int b)
    {
        if (x > HSize || x < 1 || y > VSize || y < 1)
        {
            return 0;
        }
        else
        {
            matrix[x - 1][y - 1] = b;
            return 1;
        }
    }
    public void shuffleMatrix()
    {
        Random r = new Random();
        clearTrace();
        for (int x = 0; x < HSize; x++)
        {
            for (int y = 0; y < VSize; y++)
            {
                int xx = Math.abs(r.nextInt()) % HSize;
                int yy = Math.abs(r.nextInt()) % VSize;
                int b = matrix[x][y];
                matrix[x][y] = matrix[xx][yy];
                matrix[xx][yy] = b;
            }
        }
    }
    public void clearTrace()
    {
        for (int x = 0; x < HSize; x++)
        {
            for (int y = 0; y < VSize; y++)
            {
                if (matrix[x][y] <  - 1)
                {
                    matrix[x][y] =  - 1;
                }
            }
        }
    }
    public int judge(int x, int y, int xx, int yy, boolean mark)
    {
        x--;
        y--;
        xx--;
        yy--;
              //  outputMatrix(matrix);
        if (x == xx && y == yy)
        {
            return 0;//同一个位置
        }
        if (x < 0 || x > HSize - 1 || y < 0 || y > VSize - 1 || xx < 0 || xx >
            HSize - 1 || yy < 0 || yy > VSize - 1)
        {
            return 0;//不在区域
        }
        if (matrix[x][y] != matrix[xx][yy])
        {
            return 0;//不匹配
        }
        if (matrix[x][y] < 0 || matrix[xx][yy] < 0)
        {
            return 0;//空
        }
        int i;
        int a;
        if (x == xx)//同一列
        {
            if (y > yy)
            {
                int c = y;
                y = yy;
                yy = c;
            }
            a = 0;
            for (i = y + 1; i < yy; i++)
            {
                a += matrix[x][i];
            }
            if ( - a == yy - y - 1)
            {
                if (mark)
                {
               
                    for (i = y + 1; i < yy; i++)
                    {
                        matrix[x][i] = VConn;//纵向相连
                    }
                }
                return Score1;
            }
        }
        if (y == yy)//同一行
        {
            if (x > xx)
            {
                int c = x;
                x = xx;
                xx = c;
            }
            a = 0;
            for (i = x + 1; i < xx; i++)
            {
                a += matrix[i][y];
            }
            if ( - a == xx - x - 1)
            {
                if (mark)
                {
                    for (i = x + 1; i < xx; i++)
                    {
                        matrix[i][y] = HConn;//横向相连
                    }
                }
                return Score1;
            }
        }//并排
        a = 0;
        if (x > xx)
        {
            int c = x;
            x = xx;
            xx = c;
            c = y;
            y = yy;
            yy = c;
        }
        if (y < yy)
        {
            for (i = x + 1; i <= xx; i++)
            {
                a += matrix[i][y];
            }
            for (i = y + 1; i < yy; i++)
            {
                a += matrix[xx][i];
            }
            if ( - a == ((xx - x) + yy) - y - 1)
            {
                if (mark)
                {
                    for (i = x + 1; i <= xx; i++)
                    {
                        matrix[i][y] = HConn;
                    }
                    for (i = y + 1; i < yy; i++)
                    {
                        matrix[xx][i] = VConn;
                    }
                    matrix[xx][y] = LDConn;
                }
                return Score2;
            }
            a = 0;
            for (i = x; i < xx; i++)
            {
                a += matrix[i][yy];
            }
            for (i = y + 1; i < yy; i++)
            {
                a += matrix[x][i];
            }
            if ( - a == ((xx - x) + yy) - y - 1)
            {
                if (mark)
                {
                    for (i = x; i < xx; i++)
                    {
                        matrix[i][yy] = HConn;
                    }
                    for (i = y + 1; i < yy; i++)
                    {
                        matrix[x][i] = VConn;
                    }
                    matrix[x][yy] = RUConn;
                }
                return Score2;
            }
        }
        else
        {
            for (i = x + 1; i <= xx; i++)
            {
                a += matrix[i][y];
            }
            for (i = yy + 1; i < y; i++)
            {
                a += matrix[xx][i];
            }
            if ( - a == ((xx - x) + y) - yy - 1)
            {
                if (mark)
                {
                    for (i = x + 1; i <= xx; i++)
                    {
                        matrix[i][y] = HConn;
                    }
                    for (i = yy + 1; i < y; i++)
                    {
                        matrix[xx][i] = VConn;
                    }
                    matrix[xx][y] = LUConn;
                }
                return Score2;
            }
            a = 0;
            for (i = x; i < xx; i++)
            {
                a += matrix[i][yy];
            }
            for (i = yy + 1; i < y; i++)
            {
                a += matrix[x][i];
            }
            if ( - a == ((xx - x) + y) - yy - 1)
            {
                if (mark)
                {
                    for (i = x; i < xx; i++)
                    {
                        matrix[i][yy] = HConn;
                    }
                    for (i = yy + 1; i < y; i++)
                    {
                        matrix[x][i] = VConn;
                    }
                    matrix[x][yy] = RDConn;
                }
                return Score2;
            }
        }
        int y1;
        int y2;
        if (y > yy)
        {
            y1 = yy;
            y2 = y;
        }
        else
        {
            y1 = y;
            y2 = yy;
        }
        i = x;
        for (int s = 0; Math.abs(s) < HSize;)
        {
            s =  - s;
            if (s >= 0)
            {
                s++;
            }
            i = x + s;
            if (i < HSize && i >= 0)
            {
                a = 0;
                for (int j = y1; j <= y2; j++)
                {
                    a += matrix[i][j];
                }
                if ( - a == (y2 - y1) + 1)
                {
                    a = 0;
                    if (x > i)
                    {
                        for (int c = i; c < x; c++)
                        {
                            a += matrix[c][y];
                        }
                    }
                    else
                    {
                        for (int c = x + 1; c <= i; c++)
                        {
                            a += matrix[c][y];
                        }
                    }
                    if ( - a == Math.abs(x - i))
                    {
                        a = 0;
                        if (xx > i)
                        {
                            for (int c = i; c < xx; c++)
                            {
                                a += matrix[c][yy];
                            }
                        }
                        else
                        {
                            for (int c = xx + 1; c <= i; c++)
                            {
                                a += matrix[c][yy];
                            }
                        }
                        if ( - a == Math.abs(xx - i))
                        {
                            if (mark)
                            {
                                if (x > i)
                                {
                                    for (int c = i; c < x; c++)
                                    {
                                        matrix[c][y] = HConn;
                                    }
                                    if (y < yy)
                                    {
                                        matrix[i][y] = RDConn;
                                    }

⌨️ 快捷键说明

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