/// <summary> /// Тут проверим какую цифру рисовали уничтоженные кусты /// </summary> /// <param name="unit">Куст</param> /// <returns>Бонус очков</returns> public int CheckNumber(Unit unit) { ///С начала добавляем куст в список уничтоженых кустов BlockBonusUnit.Add(unit); if (BlockBonusUnit.Count > 11) { BlockBonusUnit.Remove(BlockBonusUnit.First()); } List <Point> pointUnitList = new List <Point>(); foreach (var item in BlockBonusUnit.OrderBy(p => p.PositionX)) { pointUnitList.Add(new Point(item.PositionX, item.PositionY)); } int minX = int.MaxValue; int maxY = int.MinValue; foreach (var item in pointUnitList) { minX = Math.Min(minX, (int)item.X); maxY = Math.Max(maxY, (int)item.Y); } if (BlockBonusUnit.Count >= 8) { ///Теперь проверяем какую цифру отображают блоки ///Начинать проверку будем с левого нижнего края ///Проверяем цифру "1" bool one = CheckOne(pointUnitList, minX, maxY); if (one) { return(1000); } bool three = CheckThree(pointUnitList, minX, maxY); if (three) { return(3000); } bool five = CheckFive(pointUnitList, minX, maxY); if (five) { return(5000); } } return(0); }
/// <summary> /// Проверка цифры 1 /// </summary> /// <param name="pointUnitList"></param> private bool CheckOne(List <Point> pointUnitList, int minX, int maxY) { Point leftBottomPoint = pointUnitList.FirstOrDefault(p => p.X == minX && p.Y == maxY); if (leftBottomPoint != null) { if (!pointUnitList.Any(p => p.X == minX && p.Y == maxY - 4)) { return(false); } if (!pointUnitList.Any(p => p.X == minX + 1 && p.Y == maxY)) { return(false); } if (!pointUnitList.Any(p => p.X == minX + 1 && p.Y == maxY - 1)) { return(false); } if (!pointUnitList.Any(p => p.X == minX + 1 && p.Y == maxY - 2)) { return(false); } if (!pointUnitList.Any(p => p.X == minX + 1 && p.Y == maxY - 3)) { return(false); } if (!pointUnitList.Any(p => p.X == minX + 1 && p.Y == maxY - 4)) { return(false); } if (!pointUnitList.Any(p => p.X == minX + 2 && p.Y == maxY)) { return(false); } BlockBonusUnit.Clear(); return(true); } return(false); }