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]); } } }
/// <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); }
/// <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; } }
/// <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(); }