Exemple #1
0
        private double GetMaxPercentCell(ListСell cells)
        {
            var maxPercentCell = 0.0;

            foreach (Сell numberField in cells)
            {
                if (VisibleСell.IsPresent(numberField))
                {
                    var aroundCells = VisibleСell.GetAroundCellsNoTags(numberField, size);
                    var countFlags  = 0;

                    foreach (Сell aroundField in aroundCells)
                    {
                        if (MarkCell.IsPresent(aroundField))
                        {
                            countFlags++;
                        }
                    }

                    var countNoFlags = aroundCells.Count - countFlags;

                    var percentCell = 1.0 * (VisibleСell[numberField.Row, numberField.Column].Value - countFlags) / countNoFlags;

                    if (maxPercentCell < percentCell)
                    {
                        maxPercentCell = percentCell;
                    }
                }
            }

            return(maxPercentCell);
        }
Exemple #2
0
        public void GenerateMines()
        {
            var randomCellsList = ListСell.Generate(Size, CountMines);

            foreach (Сell field in randomCellsList)
            {
                Mines.Add(new CellMine(field));
            }
        }
Exemple #3
0
        private void VisibleMarkMine()
        {
            var markMineList = new ListСell();

            foreach (Сell fieldIntersection in ListСell.Intersection(Marks, Mines))
            {
                markMineList.Add(new CellMine(fieldIntersection, true));
            }

            VisibleСells.Add(markMineList);
        }
Exemple #4
0
        public override string ToString()
        {
            var screen    = string.Empty;
            var listCells = new ListСell
            {
                { VisibleСells, Marks },
            };

            for (var row = 0; row < Size.Row; row++)
            {
                for (var column = 0; column < Size.Column; column++)
                {
                    switch (listCells[row, column].Status)
                    {
                    case CellStatus.Absent:
                        screen += "O" + " ";
                        break;

                    case CellStatus.Number:
                        screen += listCells[row, column].Value + " ";
                        break;

                    case CellStatus.Open:
                        screen += "_" + " ";
                        break;

                    case CellStatus.Mark:
                        screen += "F" + " ";
                        break;

                    case CellStatus.MarkMine:
                        screen += "M" + " ";
                        break;

                    case CellStatus.Mine:
                        screen += "H" + " ";
                        break;

                    case CellStatus.Explosion:
                        screen += "E" + " ";
                        break;
                    }
                }

                screen += "\n";
            }

            return(screen);
        }
Exemple #5
0
        private ListСell GetRemovedMarkedMines()
        {
            var markMineList = new ListСell();

            foreach (Сell field in Mines)
            {
                if (Marks.IsPresent(field))
                {
                    Marks.Remove(field);
                    Mines.Remove(field);
                    markMineList.Add(new CellMine(field, true));
                }
            }

            return(markMineList);
        }
Exemple #6
0
        public static Сell GetСhoice(ListСell listСell, ListСell markCells, Сell size, int countMine)
        {
            var testAlgorithm = GetInstance();

            testAlgorithm.size        = size;
            testAlgorithm.countMine   = countMine;
            testAlgorithm.VisibleСell = listСell;
            testAlgorithm.MarkCell    = markCells;

            if (listСell.Count + markCells.Count < size.Row * size.Column)
            {
                if ((listСell.Count != 0) || (testAlgorithm.GetMark() != null))
                {
                    return(testAlgorithm.GetMark());
                }
            }

            return(Сell.Random(testAlgorithm.size));
        }
Exemple #7
0
        private void AddRandomList(ListСell cells, Сell field, double maxPercentCell, double minPercent, double totalPercent)
        {
            if ((maxPercentCell < minPercent) && (maxPercentCell != 0))
            {
                minPercent = maxPercentCell;
                cells.Clear();
            }

            if (totalPercent < minPercent)
            {
                minPercent = totalPercent;
                cells.Clear();
            }

            if ((maxPercentCell == minPercent) || (totalPercent == minPercent))
            {
                cells.Add(field);
            }
        }
Exemple #8
0
        public Сell GetBestRandomChoice()
        {
            var listNoTags = ListСell.GetReverseCells(size, VisibleСell, MarkCell);

            var totalPercent = 1.0 * (countMine - MarkCell.Count) / ((size.Row * size.Column) - VisibleСell.Count);
            var minPercent   = totalPercent;
            var randomList   = new ListСell();

            foreach (Сell field in listNoTags)
            {
                var numberCells    = listNoTags.GetAroundCellsNoTags(field, size);
                var maxPercentCell = GetMaxPercentCell(numberCells);
                AddRandomList(randomList, field, maxPercentCell, minPercent, totalPercent);
            }

            Random rand = new Random();

            return(randomList[rand.Next(randomList.Count)]);
        }