void Reveal(MineSweeperElement E) { if (E.TouchingBombsCount == 0 && !E.IsRevealed) { List <MineSweeperElement> NeedToBeRevealed = new List <MineSweeperElement>(); try { if (!E.IsRevealed) { NeedToBeRevealed.Add(E); } } catch { } for (int i = 0; i < NeedToBeRevealed.Count; i++) { NeedToBeRevealed[i].IsRevealed = true; List <MineSweeperElement> N = NeedToBeRevealed[i].GetNeigbours(); for (int i2 = 0; i2 < N.Count; i2++) { if (!N[i2].IsRevealed && N[i2].TouchingBombsCount == 0 && !NeedToBeRevealed.Contains(N[i2])) { NeedToBeRevealed.Add(N[i2]); } } } if (NeedToBeRevealed.Count > 1) { Assets.Reveal.Play(0.4f * Values.MasterVolume, 0, 0); } for (int i = 0; i < NeedToBeRevealed.Count; i++) { List <MineSweeperElement> N = NeedToBeRevealed[i].GetNeigbours(); for (int i2 = 0; i2 < N.Count; i2++) { if (!N[i2].HasBomb) { N[i2].IsRevealed = true; } } } } else { if (!E.IsRevealed) { E.IsRevealed = true; Assets.Reveal.Play(0.2f * Values.MasterVolume, 0, 0); } else { Assets.Error.Play(0.2f * Values.MasterVolume, 0, 0); } } }
void Restart(MineSweeperElement FirstClick) { lock (Grid) { // Reset Grid for (int ix = 0; ix < Grid.GetLength(0); ix++) { for (int iy = 0; iy < Grid.GetLength(1); iy++) { Grid[ix, iy] = new MineSweeperElement(ix * ElementSize + Field.X, iy * ElementSize + Field.Y, ElementSize, this); } } // Add Bombs for (int i = 0; i < MineCount; i++) { int x = Values.RDM.Next(Grid.GetLength(0)); int y = Values.RDM.Next(Grid.GetLength(1)); if (Grid[x, y].HasBomb && Grid[x, y] != FirstClick) { i--; } else { Grid[x, y].HasBomb = true; } } // Update BombCounters for (int ix = 0; ix < Grid.GetLength(0); ix++) { for (int iy = 0; iy < Grid.GetLength(1); iy++) { Grid[ix, iy].TouchingBombsCount = Grid[ix, iy].GetNeigbourBombCount(); } } Timer = 0; } Score = 0; }
public int GetElementGridIndexY(MineSweeperElement E) { return((E.y - Field.Y) / ElementSize); }
public int GetElementGridIndexX(MineSweeperElement E) { return((E.x - Field.X) / ElementSize); }