Пример #1
0
        private bool FindNextCellWithBestProbability()
        {
            var  bestProbability   = 0d;
            var  randomProbability = CalculateRandomProbability();
            Cell bestCell          = null;

            foreach (var cell in _map.GetCells())
            {
                if (cell.Number.HasValue)
                {
                    var adjacentUnknown      = (double)_map.GetAdjacentCellCountOfState(cell, CellState.Unknown);
                    var adjacentUnknownMines = (double)(cell.Number.Value - _map.GetAdjacentCellCountOfState(cell, CellState.Mine));
                    if (adjacentUnknown <= 0)
                    {
                        continue;
                    }

                    var currentCellProbability = 1d - (adjacentUnknownMines / adjacentUnknown);
                    if (currentCellProbability > bestProbability && currentCellProbability > randomProbability)
                    {
                        bestProbability = currentCellProbability;
                        bestCell        = _map.GetAdjacentCells(cell, x => x.State == CellState.Unknown).First();
                    }
                }
            }

            if (bestCell != null)
            {
                NextCellHasBeenFound.Raise(this, new CellLocationEventArgs(bestCell.Row, bestCell.Col));
            }
            return(bestCell != null);
        }
Пример #2
0
        private bool FindRandomCell()
        {
            var unknownCells = _map.GetCells().Where(x => x.State == CellState.Unknown).ToList();

            if (!unknownCells.Any())
            {
                return(false);
            }

            var randomCell = unknownCells.ElementAt(_random.Next(0, unknownCells.Count - 1));

            NextCellHasBeenFound.Raise(this, new CellLocationEventArgs(randomCell.Row, randomCell.Col));
            return(true);
        }
Пример #3
0
        private bool FindSolvedCells()
        {
            var foundAny = false;

            foreach (var cell in _map.GetCells())
            {
                if (cell.Number.HasValue &&
                    _map.GetAdjacentCellCountOfState(cell, CellState.Mine) == cell.Number.Value)
                {
                    var adjacentCells = _map.GetAdjacentCells(cell, x => x.State == CellState.Unknown);
                    foundAny = adjacentCells.Any();
                    foreach (var adjCell in adjacentCells)
                    {
                        NextCellHasBeenFound.Raise(this, new CellLocationEventArgs(adjCell.Row, adjCell.Col));
                    }
                }
            }
            return(foundAny);
        }