private void MoveToNextStep()
        {
            if (this.totalSteps <= 0 || usedSteps <= 0)
            {
                return;
            }

            byte[] nums = this.puzzleGrid.GetNumberList();

            PuzzleMxNLib.PGGetNextMovePath(PuzzleSetting.Instance.Cols,
                                           PuzzleSetting.Instance.Rows, usedSteps--, ref nums);

            for (int i = 0; i < nums.Length; i++)
            {
                this.puzzleGrid.MoveTo(nums[i], i + 1);
            }
        }
        private void getAnswerBtn_Click(object sender, RoutedEventArgs e)
        {
            //    IntPtr gcPtr = new IntPtr();
            //    PuzzleMxNLib.PGInit(gcPtr);

            byte[] nums    = this.puzzleGrid.GetNumberList();
            byte[] retNums = new byte[nums.Length];
            for (int i = 0; i < retNums.Length; i++)
            {
                retNums[i] = (byte)i;
            }

            int ret = PuzzleMxNLib.PGGetAnswer(nums, ref retNums, PuzzleSetting.Instance.Cols, PuzzleSetting.Instance.Rows);

            if (ret > 0)
            {
                this.nextStepBtn.IsEnabled = true;
            }
            else
            {
                this.nextStepBtn.IsEnabled = false;
            }

            this.totalSteps = ret;
            this.usedSteps  = ret;

            if (this.totalSteps > 0)
            {
                this.totalSteps--;
            }

            this.answerLabel.Visibility = System.Windows.Visibility.Visible;
            this.answerLabel.Text       = string.Format(SoonLearning.BlockPuzzle.Properties.Resources.StepsOfTotal, 0, this.totalSteps);

            for (int i = 0; i < retNums.Length; i++)
            {
                retNums[i]++;
            }

            MoveToNextStep();
        }