Пример #1
0
        /// <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);
        }
Пример #2
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);
        }