示例#1
0
        public void SolveSudoku(char[][] board)
        {
            var placeHoldersCount = 0;
            var placeHolders      = new bool[9][];
            var numberStatuses    = new NumberStatus[9];

            for (int i = 0; i < 9; i++)
            {
                numberStatuses[i] = new NumberStatus();
            }
            for (int i = 0; i < 9; i++)
            {
                placeHolders[i] = new bool[9];
                for (int j = 0; j < 9; j++)
                {
                    if (board[i][j] == '.')
                    {
                        placeHoldersCount++;
                        placeHolders[i][j] = true;
                    }
                    else
                    {
                        int val = board[i][j] - '1';
                        numberStatuses[val].UsedInColumns[j] = true;
                        numberStatuses[val].UsedInRows[i]    = true;
                        numberStatuses[val].UsedInSquares[NumberStatus.GetSquareNumber(i, j)] = true;
                    }
                }
            }

            SolveSudokuImpl(board, placeHolders, numberStatuses, placeHoldersCount);
        }
示例#2
0
 // Update is called once per frame
 void Update()
 {
     if (m_status == NumberStatus.Bigger)
     {
         if (current_scale.x < 1.2f / scale_num)
         {
             current_scale       += new Vector3(step / 5 / scale_num, step / scale_num, step / scale_num);
             transform.localScale = current_scale;
             transform.position  += new Vector3(0f, 0f, 0.05f / scale_num);
         }
         else
         {
             m_status = NumberStatus.Smaller;
         }
     }
     if (m_status == NumberStatus.Smaller)
     {
         if (current_scale.x > 1.0f / scale_num)
         {
             current_scale       -= new Vector3(step / 5 / scale_num, step / scale_num, step / scale_num);
             transform.localScale = current_scale;
             transform.position  -= new Vector3(0f, 0f, 0.05f / scale_num);
         }
         else
         {
             m_status = NumberStatus.Normal;
         }
     }
 }
示例#3
0
    //初始化
    public void Init(Grid grid)
    {
        grid.SetNumber(this);

        this.SetGrid(grid);

        this.SetNumber(2);

        status = NumberStatus.Normal;

        PlaySpawnAnim();
    }
示例#4
0
    /*End-生命周期------------------------------------------------------------------*/


    public void Init(MyGrid myGrid)
    {
        myGrid.SetNumber(this);
        // 设置所在的格子
        this.SetGrid(myGrid);
        // 给它一个初始化的数字
        this.SetNumber(2);

        status = NumberStatus.Normal;

        PlaySpawnAnim();
    }
示例#5
0
        private bool SolveSudokuImpl(char[][] board, bool[][] placeHolders, NumberStatus[] numberStatus, int numbersLeft)
        {
            if (numbersLeft == 0)
            {
                return(CheckSudokuSolved(board));
            }

            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                {
                    if (!placeHolders[i][j] || board[i][j] != '.')
                    {
                        continue;
                    }

                    for (char c = '1'; c <= '9'; c++)
                    {
                        var val = c - '1';
                        if (numberStatus[val].UsedInRows[i] ||
                            numberStatus[val].UsedInColumns[j] ||
                            numberStatus[val].UsedInSquares[NumberStatus.GetSquareNumber(i, j)])
                        {
                            continue;
                        }

                        var prevUsedInRows    = numberStatus[val].UsedInRows[i];
                        var prevUsedInColumns = numberStatus[val].UsedInColumns[j];
                        var prevUsedInSquares = numberStatus[val].UsedInSquares[NumberStatus.GetSquareNumber(i, j)];
                        board[i][j] = c;

                        if (SolveSudokuImpl(board, placeHolders, numberStatus, numbersLeft - 1))
                        {
                            return(true);
                        }

                        board[i][j] = '.';
                        numberStatus[val].UsedInRows[i]    = prevUsedInRows;
                        numberStatus[val].UsedInColumns[j] = prevUsedInColumns;
                        numberStatus[val].UsedInSquares[NumberStatus.GetSquareNumber(i, j)] = prevUsedInSquares;
                    }
                }
            }

            return(false);
        }
示例#6
0
    /// <summary>
    /// 合并
    /// </summary>
    public void Merge()
    {
        GamePanel gamePanel = GameObject.Find("Canvas/GamePanel").GetComponent <GamePanel>();

        gamePanel.AddScore(this.GetNumber());

        int number = this.GetNumber() * 2;

        this.SetNumber(number);
        if (number == 2048)
        {
            // 游戏胜利
            gamePanel.GameWin();
        }
        status = NumberStatus.NotMerge;

        PlayMergeAnim();
    }
示例#7
0
    //合并
    public void Merge()
    {
        Game GamePanel = GameObject.Find("Canvas/Game_Panel").GetComponent <Game>();

        GamePanel.AddScore(this.GetNumber());
        int number = this.GetNumber() * 2;

        this.SetNumber(number);

        if (number == 2048)
        {
            //游戏胜利
            GamePanel.GameWin();
        }

        status = NumberStatus.NotMerge;

        PlayMergeAnim();

        AudioManager._instance.PlaySound(sound);
    }
示例#8
0
 void Start()
 {
     current_scale        = new Vector3(1f / scale_num, 1f / scale_num, 1f / scale_num);
     transform.localScale = current_scale;
     m_status             = NumberStatus.Bigger;
 }