예제 #1
0
        public void makeMedium()
        {
            this.Size     = new System.Drawing.Size(700, 700);
            this.numMines = 40;
            ptArr         = new PictureTile[16, 16];

            for (int i = 0; i < 16; i++)
            {
                for (int j = 0; j < 16; j++)
                {
                    ptArr[i, j]             = new PictureTile(i, j);
                    ptArr[i, j].Location    = new Point(j * 35 + 50, i * 32 + 50);
                    ptArr[i, j].BorderStyle = BorderStyle.FixedSingle;
                    ptArr[i, j].Visible     = true;
                    ptArr[i, j].Width       = 35;
                    ptArr[i, j].Height      = 35;
                    ptArr[i, j].BringToFront();
                    ptArr[i, j].Image = Image.FromFile("../../Images/BoardTile_UnClicked.png");

                    ptArr[i, j].MouseClick += new MouseEventHandler((o, a) =>
                    {
                        PictureTile pt = ((PictureTile)o);
                        pt.Image       = Image.FromFile("../../Images/EmptyTile.png");
                    });

                    this.Controls.Add(ptArr[i, j]);
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Swap Tiles
        /// </summary>
        /// <param name="Tile1"></param>
        /// <param name="Tile2"></param>
        /// <param name="images"></param>
        /// <returns></returns>
        public PictureTile SwapTiles(PictureTile Tile1, PictureTile Tile2, Image[] images)
        {
            int tmp = Tile2.ImageIndex;

            Tile2.Image      = images[Tile1.ImageIndex];
            Tile2.ImageIndex = Tile1.ImageIndex;

            Tile1.Image      = images[tmp];
            Tile1.ImageIndex = tmp;

            return(Tile2);
        }
예제 #3
0
 /// <summary>
 /// Move the Blank Tile
 /// </summary>
 /// <param name="x"></param>
 /// <param name="y"></param>
 private void MoveTile(int x, int y)
 {
     //check the range
     if (x >= 0 && y >= 0 && x < ctrl.Size && y < ctrl.Size)
     {
         PictureTile secondTile = ctrl.SearchTile(x, y, pictureBoxes);
         if (secondTile != null)
         {
             blankTile = ctrl.SwapTiles(blankTile, secondTile, images);
         }
     }
     else
     {
         return;
     }
 }
예제 #4
0
        /// <summary>
        /// Splits the image into multiple squares of images
        /// Shuffle them algorithmically
        /// </summary>
        private void GenerateLevel()
        {
            if (pictureBox != null)
            {
                //clear the preview opened image
                gameBoxPuzzle.Controls.Remove(pictureBox);
                pictureBox.Dispose();
                pictureBox = null;
            }

            if (pictureBoxes == null)
            {
                //initialize the fragmented images
                images       = new Image[ctrl.NrOfSquares];
                pictureBoxes = new PictureBox[ctrl.NrOfSquares];
            }

            //Scaling to fit in the gameBox
            int numRow = (int)Math.Sqrt(ctrl.NrOfSquares);
            int numCol = numRow;
            int unitX  = gameBoxPuzzle.Width / numRow;
            int unitY  = gameBoxPuzzle.Height / numCol;

            //Generates the splitted images on the board
            for (int i = 0; i < ctrl.NrOfSquares; i++)
            {
                ctrl.Indices[i] = i;
                if (pictureBoxes[i] == null)
                {
                    pictureBoxes[i] = new PictureTile();
                }
                pictureBoxes[i].Width  = unitX;
                pictureBoxes[i].Height = unitY;

                ((PictureTile)pictureBoxes[i]).Index = i;

                CreateBitmapImage(image, images, i, numRow, numCol, unitX, unitY);

                pictureBoxes[i].Location = new Point(unitX * (i % numCol), unitY * (i / numRow));
                if (!gameBoxPuzzle.Controls.Contains(pictureBoxes[i]))
                {
                    gameBoxPuzzle.Controls.Add(pictureBoxes[i]);
                }
            }

            for (int i = 0; i < ctrl.NrOfSquares; i++)
            {
                pictureBoxes[i].Image = images[ctrl.Indices[i]];
                ((PictureTile)pictureBoxes[i]).ImageIndex = ctrl.Indices[i];
            }

            //create matrix
            int k = 0;

            for (int i = 0; i < ctrl.Size; i++)
            {
                for (int j = 0; j < ctrl.Size; j++)
                {
                    ((PictureTile)pictureBoxes[k]).X = j;
                    ((PictureTile)pictureBoxes[k]).Y = i;
                    k++;
                }
            }
            //shuffle the indices corresponding to the images and add them to the board

            //Create the Blank Tile
            using (Graphics grp = Graphics.FromImage(images[ctrl.Indices[ctrl.NrOfSquares - 1]]))
            {
                grp.FillRectangle(Brushes.White, 0, 0, unitX, unitY);
            }
            blankTile = ctrl.SearchTile(ctrl.Size - 1, ctrl.Size - 1, pictureBoxes);

            Shuffle();
        }