//TODO: Clean, figure out whether should do in GameBoard or here private void OnClick(int r, int c) { if (board.IsMine(r, c)) { MessageBoxFactory.ShowError("Lose", "You Lose"); InGame = false; } else { CellsLeft--; var button = buttonGrid[r, c]; if (button.IsEmpty) { for (int row = r - 1; row <= r + 1; row++) { for (int col = c - 1; col <= c + 1; col++) { GridButton gb = GetButton(row, col); if (gb != null && gb != button && !gb.Clicked && !gb.IsMine) { gb.Click(); //This is recursive } } } } CheckWin(); } }
private void CreateGameGrid(GameBoard board) { grid.ColumnDefinitions.Clear(); grid.Children.Clear(); grid.RowDefinitions.Clear(); this.board = board; this.buttonGrid = new GridButton[board.Height, board.Width]; //Create rows, columns for (int i = 0; i < board.Width; i++) { grid.ColumnDefinitions.Add(new ColumnDefinition()); } for (int i = 0; i < board.Height; i++) { grid.RowDefinitions.Add(new RowDefinition()); } //Create buttons for (int r = 0; r < board.Height; r++) { for (int c = 0; c < board.Width; c++) { var info = new ButtonInfo() { Column = c, Row = r }; if (board.IsMine(r, c)) { info.IsMine = true; } else { int adjacentMines = board.GetNumMines(r, c); info.Value = adjacentMines; info.IsMine = false; } GridButton button = new GridButton(); button.SetValue(Grid.RowProperty, r); button.SetValue(Grid.ColumnProperty, c); button.InitializeButton(info); grid.Children.Add(button); buttonGrid[r, c] = button; } } //Initialize Game MinesLeft = board.TotalMines; actualMinesLeft = board.TotalMines; triggeredMines = 0; CellsLeft = board.Width * board.Height; //Set Handlers GridButton.SetHandlers( OnClick, Flag, AutoClick ); InGame = true; }