/// <summary> /// This event fire each time that user click on any button on panelMain /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void TileButton_Click(object sender, EventArgs e) { //Get the button that fire the event TileButton btnClicked = (TileButton)sender; ChangebuttonState(btnClicked); }
private void CommonToolStripAction(ToolStripMenuItem toolStripMenuItemToMark) { UnselectAllDifficultyToolStrip(); toolStripMenuItemToMark.Checked = true; btnInitial = null; btnFinal = null; CreateControls(); }
/// <summary> /// Create and asign controls to main form /// </summary> private void CreateControls() { //Get setup for selected difficulty SetSetupByDifficulty(); //Clean panel and set enabled true mainPanel.Controls.Clear(); mainPanel.Enabled = true; int iCountParcial = 0; int iLocationA = 0; int iLocationB = 0; int sideSizeForButton = increase; //Get number of button to generate TotalNumOfButtons = (PnlSize / increase) * NumButtonsPerRow; for (int i = 0; i < TotalNumOfButtons; i++) { TileButton btnToAsign = new TileButton { Name = ButtonPrefix + i, BackgroundImageLayout = ImageLayout.Stretch }; //Add events to button btnToAsign.Click += new EventHandler(TileButton_Click); btnToAsign.Location = new Point(iLocationA, iLocationB); btnToAsign.Text = string.Empty; btnToAsign.FlatStyle = FlatStyle.Flat; //Set Size btnToAsign.Size = new Size(sideSizeForButton, sideSizeForButton); //Add to the panel mainPanel.Controls.Add(btnToAsign); //Increase count of button set in panel iCountParcial++; //Increase referencial location point if (iCountParcial < NumButtonsPerRow) { iLocationA += increase; } else { iCountParcial = 0; iLocationA = 0; iLocationB += increase; } } }
/// <summary> /// Clean controls in panel /// </summary> private void CleanPanel() { foreach (Control item in mainPanel.Controls) { if (item.GetType() == typeof(TileButton)) { item.BackgroundImage = null; } } btnInitial = null; btnFinal = null; }
/// <summary> /// Handle the 4 types of tile (Empty, Wall, Initial and Final) /// </summary> /// <param name="btnClicked"></param> private void ChangebuttonState(TileButton btnClicked) { //If empty can set as Wall if (btnClicked.IsEmptyTitle()) { //Set as wall btnClicked.BackgroundImage = TileBlock; btnClicked.SetAsWallTitle(); } else if (btnClicked.IsWallTile && btnInitial == null) { //Check if exist a previous Initial Tile if (btnInitial != null) { btnInitial.BackgroundImage = null; btnInitial.SetAsEmptyTitle(); } //Set as Initial Tile btnClicked.BackgroundImage = InitialTile; btnClicked.SetAsInitialTitle(); btnInitial = btnClicked; } else if (btnClicked.IsInitialTile) { btnClicked.SetAsEmptyTitle(); btnInitial = null; } else if (btnClicked.IsFinalTile) { btnClicked.SetAsEmptyTitle(); btnFinal = null; } else if (btnClicked.IsWallTile && btnFinal == null) { //Check if exist a previous Final Tile if (btnFinal != null) { btnFinal.BackgroundImage = null; btnFinal.SetAsEmptyTitle(); } btnClicked.BackgroundImage = EndTile; btnClicked.SetAsFinalTitle(); btnFinal = btnClicked; } else { btnClicked.SetAsEmptyTitle(); } }
/// <summary> /// Generate walls randomly, not checks if the path can be solved /// </summary> private void GenerateWalls() { int numOfWalls = TotalNumOfButtons / 3; int wallCount = 0; do { int wallIndex = randomize.Next(0, TotalNumOfButtons); TileButton btnWall = (TileButton)mainPanel.Controls[wallIndex]; if (btnWall.IsEmptyTitle()) { btnWall.BackgroundImage = TileBlock; btnWall.SetAsWallTitle(); wallCount++; } }while (wallCount < numOfWalls); }
/// <summary> /// Generate initial and final tiles /// </summary> private void GenerateInitialAndFinalButton() { //Generate initial button int initialButtonIndex = randomize.Next(0, TotalNumOfButtons); btnInitial = (TileButton)mainPanel.Controls[initialButtonIndex]; btnInitial.BackgroundImage = InitialTile; btnInitial.SetAsInitialTitle(); //Generate final button int finalButtonIndex; do { finalButtonIndex = randomize.Next(0, TotalNumOfButtons); } // We need check that we don't use the same button and also that we have a minimun difference while (finalButtonIndex == initialButtonIndex || Math.Abs(initialButtonIndex - finalButtonIndex) < 45); btnFinal = (TileButton)mainPanel.Controls[finalButtonIndex]; btnFinal.BackgroundImage = EndTile; btnFinal.SetAsFinalTitle(); }