private void CreateLevel(int levelNum)
        {
            int currentLevel = levelNum;

            if (picBox != null)
            {
                puzzle.Controls.Remove(picBox);
                picBox.Dispose();
                picBox = null;
            }

            if (picBoxes == null)
            {
                images   = new Image[currentLevel];
                picBoxes = new PictureBox[currentLevel];
            }

            int numRow    = (int)Math.Sqrt(currentLevel);
            int numColumn = numRow;
            int unitX     = puzzle.Width / numRow;
            int unitY     = puzzle.Height / numColumn;

            int[] indexArr = new int[currentLevel];

            for (int i = 0; i < currentLevel; i++)
            {
                indexArr[i] = i;
                if (picBoxes[i] == null)
                {
                    picBoxes[i]             = new CutePictureBox();
                    picBoxes[i].Click      += new EventHandler(OnPuzzleClick);
                    picBoxes[i].BorderStyle = BorderStyle.Fixed3D;
                }

                picBoxes[i].Width  = unitX;
                picBoxes[i].Height = unitY;
                ((CutePictureBox)picBoxes[i]).Index = i;
                CreateBitmapImage2(image, images, i, numRow, numColumn, unitX, unitY);
                picBoxes[i].Location = new Point(unitX * (i % numColumn), unitY * (i / numColumn));
                if (!puzzle.Controls.Contains(picBoxes[i]))
                {
                    puzzle.Controls.Add(picBoxes[i]);
                }
            }

            Random(indexArr);
            for (int i = 0; i < currentLevel; i++)
            {
                picBoxes[i].Image = images[indexArr[i]];
                ((CutePictureBox)picBoxes[i]).ImageIndex = indexArr[i];
            }
        }
        private void ChangeImageLocation(CutePictureBox box1, CutePictureBox box2)
        {
            int index2 = box2.ImageIndex;

            box2.Image      = images[box1.ImageIndex];
            box2.ImageIndex = box1.ImageIndex;
            box1.Image      = images[index2];
            box1.ImageIndex = index2;
            if (IsWin())
            {
                Reset();
                var win = new YouWinForm();
                win.ShowDialog();
            }
        }
 public void OnPuzzleClick(object sender, EventArgs e)
 {
     if (first == null)
     {
         first             = (CutePictureBox)sender;
         first.BorderStyle = BorderStyle.FixedSingle;
     }
     else if (second == null && actionCounts > 0)
     {
         second             = (CutePictureBox)sender;
         second.BorderStyle = BorderStyle.FixedSingle;
         first.BorderStyle  = BorderStyle.Fixed3D;
         ChangeImageLocation(first, second);
         actionCounts--;
         counter.Text = (Convert.ToString(actionCounts));
         first        = null;
         second       = null;
     }
     else
     {
         Reset();
         GameOver();
     }
 }