protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e) { base.OnMouseLeftButtonUp(e); if (!IsFlagged) { if (IsMine) { Background = new SolidColorBrush(Color.FromRgb(219, 43, 31)); Content = new Image { Source = new BitmapImage(new Uri(minePath)), VerticalAlignment = VerticalAlignment.Center }; Console.WriteLine("GAME OVER"); Game.Lose(); // Do game over } else { Reveal(PosX, PosY); Game.GameBoard.RevealedCount++; // Check if all non-mine tiles are clear, display score if (DidWin()) { Game.Win(); } } } }
/// <summary> /// Toggles covered tile flag on described coors. /// </summary> /// <param name="x_tile">Clicked tile x coors.</param> /// <param name="y_tile">Clicked tile y coors.</param> internal void RightClickTile(uint x_tile, uint y_tile) { switch (TileState[x_tile, y_tile]) // ignores uncovered tiles { case 0: // !flagged tile TileState[x_tile, y_tile] = 1; flagCount++; if (TileBomb[x_tile, y_tile]) { flaggedBombCount++; } break; case 1: // flagged tile TileState[x_tile, y_tile] = 0; flagCount--; if (TileBomb[x_tile, y_tile]) { flaggedBombCount--; } break; } // win condition if (flaggedBombCount == bombCount) { game.Win(); } }
private void Reveal(int x, int y) { int cordsX; int cordsY; if (Game.GameBoard.TileBoard[x, y].CountNearbyMines() == 0) { for (int i = -1; i <= 2; i++) { for (int j = -1; j <= 2; j++) { cordsX = x; cordsY = y; cordsX += j; cordsY += i; if (cordsX >= 0 && cordsX < Game.GameBoard.Width && cordsY >= 0 && cordsY < Game.GameBoard.Height) { if (!Game.GameBoard.TileBoard[cordsX, cordsY].IsRevealed && !Game.GameBoard.TileBoard[cordsX, cordsY].IsMine && !Game.GameBoard.TileBoard[cordsX, cordsY].IsFlagged) { Game.GameBoard.TileBoard[cordsX, cordsY].IsRevealed = true; Game.GameBoard.TileBoard[cordsX, cordsY].IsEnabled = false; Game.GameBoard.TileBoard[cordsX, cordsY].Background = new SolidColorBrush(Color.FromRgb(255, 255, 255)); Game.GameBoard.RevealedCount++; if (DidWin()) { Game.Win(); return; } if (Game.GameBoard.TileBoard[cordsX, cordsY].CountNearbyMines() != 0) { int nearby = Game.GameBoard.TileBoard[cordsX, cordsY].CountNearbyMines(); Game.GameBoard.TileBoard[cordsX, cordsY].Content = nearby; SetTextColor(nearby, cordsX, cordsY); } if (Game.GameBoard.TileBoard[cordsX, cordsY].CountNearbyMines() == 0) { Reveal(cordsX, cordsY); } } } } } } else { Content = CountNearbyMines(); IsRevealed = true; IsEnabled = false; Background = new SolidColorBrush(Color.FromRgb(255, 255, 255)); SetTextColor(CountNearbyMines(), x, y); } }