public override void RefreshPosibilities(Tuple <char, int> position, PositionStatus positionStatus, bool isSinked, ShipType?shipType) { if (Posibilities is not null) { if (positionStatus is PositionStatus.White || shipType is not ShipType.Battleship) { Posibilities.RemoveAll(r => r.Any(rr => rr.Position.Equals(position))); } else { Posibilities.Where(r => r.Any(rr => rr.Position.Equals(position))).ToList().ForEach(series => { series.Single(r => r.Position.Equals(position)).Status = PositionStatus.Red; }); if (isSinked) { Posibilities.RemoveAll(r => r.Any(rr => rr.Status != PositionStatus.Red)); } else { Posibilities.RemoveAll(r => r.All(rr => rr.Status is PositionStatus.Red)); } } }
public override Tuple <char, int> FindNextSquer(List <Square> SquareBoard, Tuple <char, int> currentPosition) { Posibilities ??= GeneratePosibilities(SquareBoard, currentPosition); var minimumCost = Posibilities.Min(serries => serries.Count(r => r.Status is PositionStatus.Empty)); var minimumSeries = Posibilities.Where(series => series.Count(r => r.Status is PositionStatus.Empty) == minimumCost).ToList(); if (minimumSeries.Count() == 1) { return(minimumSeries.First().FirstOrDefault(r => r.Status is PositionStatus.Empty).Position); } else { return(FindCommonPosition(minimumSeries)); } }