Пример #1
0
    //左移填满空行
    public int[] DoMoveToLeft()
    {
        int[]      ret = new int[11];
        int        c;  int i;
        StarsBoard fullBoard = new StarsBoard();   //二值化完整棋盘,用于判定是否为空行

        StarsBoard[] tmpBoard = new StarsBoard[5]; //新的棋盘数组
        for (c = 0; c <= 4; c++)
        {
            fullBoard   = fullBoard.Or(_starsBoard[c]);
            tmpBoard[c] = new StarsBoard();
        }

        //遇到非空行就复制到新的之中
        int curidx = 0;

        for (i = 0; i < 10; i++)
        {
            if (!fullBoard.IsEmptyColumn(i))
            {
                for (c = 0; c <= 4; c++)
                {
                    tmpBoard[c].SetColumn(curidx, System.Convert.ToInt32(_starsBoard[c].GetColumn(i)));
                }
                ret[curidx] = i;    //记录当前位置存储的是原来的第几列。
                curidx++;
            }
        }
        //记录有效个数
        ret[10] = curidx;

        //替换现有引用
        _starsBoard = tmpBoard;
        return(ret);
    }
Пример #2
0
    //按坐标获取可消除块数
    public int GetBlackByPoint(int p, ref int[] retval)
    {
        int        tmpcnt    = 0;
        StarsBoard mTable    = new StarsBoard();
        StarsBoard fullBoard = new StarsBoard(); //二值化完整棋盘,用于判定是否为空行

        for (int i = 0; i < 5; i++)
        {
            fullBoard = fullBoard.Or(_starsBoard[i]);
        }
        for (int i = 0; i < 5; i++)
        {
            if (_starsBoard[i].GetValue(p))
            {
                _starsBoard[i].FillPath(mTable, fullBoard, p, ref retval, ref tmpcnt);
                retval[100] = (int)(i);        //颜色
                retval[101] = (int)(tmpcnt);   //长度
                return(tmpcnt);
            }
        }
        return(0);
    }
Пример #3
0
    //获取合理招法
    public int NextGenerateMove(ref int[][] retval)
    {
        int        cnt       = 0;
        int        tmpcnt    = 0;
        StarsBoard mTable    = new StarsBoard();
        StarsBoard fullBoard = new StarsBoard(); //二值化完整棋盘,用于判定是否为空行

        for (int c = 0; c <= 4; c++)
        {
            fullBoard = fullBoard.Or(_starsBoard[c]);
        }
        int p;

        for (int c = 0; c <= 4; c++) //遍历颜色
        {
            mTable = new StarsBoard();
            for (int y = 0; y <= 9; y++) //遍历坐标
            {
                for (int x = 0; x <= 9; x++)
                {
                    p = (int)((x << 4) | y);
                    int[] tmpps = new int[102];
                    if (mTable.GetValue(p) == false)
                    {
                        _starsBoard[c].FillPath(mTable, fullBoard, p, ref tmpps, ref tmpcnt);
                        if (tmpcnt > 1)
                        {
                            tmpps[100]  = (int)(c);      //颜色
                            tmpps[101]  = (int)(tmpcnt); //长度
                            retval[cnt] = tmpps;         //记录结果
                            cnt++;
                        }
                    }
                }
            }
        }
        return(cnt);
    }