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); }
public void GenerateMines() { var randomCellsList = ListСell.Generate(Size, CountMines); foreach (Сell field in randomCellsList) { Mines.Add(new CellMine(field)); } }
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); }
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); }
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); }
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)); }
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); } }
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)]); }