Example #1
0
 private void MoveHero(Direction direction, int stepsCount)
 {
     for (var i = 0; i < stepsCount; i++)
     {
         sensorData = client.Move(direction);
     }
 }
Example #2
0
 public static void MoveTowards(this HommClient client, Location location, Pathfinder pathfinder)
 {
     if (location.IsEqualTo(pathfinder.HeroLocation))
     {
         client.Wait(0.2);
         return;
     }
     var path = pathfinder.FindPathTo(location);
     if (path.Count != 0)
         client.Move(path[0]);
     else
         throw new Exception("Невозможно найти путь");
 }
Example #3
0
        // Попытка реализовать метод ThinkingWhatToDoNext блок-схемы
        public void ThinkingWhatToDoNext()
        {
            int step = 0;

            while (true)
            {
                step++;
                Console.WriteLine($"\nStep №:{step}\n");
                try
                {
                    if (sensorData.IsDead)
                    {
                        client.Wait(2);
                    }
                    // Находимся ли мы в таверне и сколько юнитов можем купить
                    int hireUnits = HireUnit(sensorData.Location);
                    // Если можем нанять хоть кого-нибудь в таверне
                    if (hireUnits != 0)
                    {
                        // Нанимаем
                        client.HireUnits(hireUnits);
                    }

                    Cell entity = new Cell();

                    entity = FindEnemy();
                    if (entity != null)
                    {
                        if (entity.X != -1 && entity.Y != -1)
                        {
                            Chain heh = AStarSolver((Cell)sensorData.Location, entity);
                            client.Move(StringToDirection(heh.path)[0]);
                            continue;
                        }
                    }

                    // Список ближайших объектов
                    Dictionary <Cell, string> nearestStuff = new Dictionary <Cell, string>();

                    // Если у нас нет золотой шахты, но есть неохраняемая шахта, добавляем ее в список на проверку
                    // Ищем шахту
                    entity = FindMine();
                    if (entity != null)
                    {
                        if (entity.X != -1 && entity.Y != -1)
                        {
                            nearestStuff.Add(entity, "Mine");
                        }
                    }

                    // Ищем таверну
                    entity = FindSecurityDwelling();

                    if (entity != null)
                    {
                        if (entity.X != -1 && entity.Y != -1)
                        {
                            nearestStuff.Add(entity, "Dwelling");
                        }
                    }

                    // Ищем ресурс
                    entity = FindResource();

                    if (entity != null)
                    {
                        if (entity.X != -1 && entity.Y != -1)
                        {
                            nearestStuff.Add(entity, "Resource");
                        }
                    }
                    // Если список не пустой
                    if (nearestStuff.Count() != 0)
                    {
                        Chain heh = FindNearest(nearestStuff.Keys.ToList());
                        client.Move(StringToDirection(heh.path)[0]);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }
        }
Example #4
0
        public static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                args = new[] { "127.0.0.1", "18700" }
            }
            ;
            var ip   = args[0];
            var port = int.Parse(args[1]);

            var client = new HommClient <HommSensorData>();

            client.OnSensorDataReceived += Print;
            client.OnInfo += OnInfo;

            var sensorData = client.Configurate(
                ip,
                port,
                CvarcTag,
                timeLimit: 90,              // Продолжительность матча в секундах (исключая время, которое "думает" ваша программа).

                operationalTimeLimit: 5,    // Суммарное время в секундах, которое разрешается "думать" вашей программе.
                                            // Вы можете увеличить это время для отладки, чтобы ваш клиент не был отключен, пока вы разглядываете программу в режиме дебаггинга

                seed: 0,                    // seed карты. Используйте этот параметр, чтобы получать одну и ту же карту и отлаживаться на ней
                                            // Иногда меняйте этот параметр, потому что ваш код должен хорошо работать на любой карте

                spectacularView: true,      // Вы можете отключить графон, заменив параметр на false

                debugMap: false             // Вы можете использовать отладочную простую карту, чтобы лучше понять, как устроен игоровой мир

                );


            while (true)
            {
                var resources     = GetResources(sensorData.Map);
                var currentObject = GetObjectAt(sensorData.Map, sensorData.Location.ToLocation());
                var adjacencyList = BuildAdjacencyListFromMap(sensorData.Map);

                var desiredObject = default(MapObjectData);
                switch (state)
                {
                case State.NeedResources:
                    desiredObject = GetNearestObject(sensorData.Location.ToLocation(), resources);
                    break;

                case State.NeedArmy:
                    break;

                case State.NeedGlory:
                    break;
                }

                if (desiredObject == null)
                {
                    continue;
                }

                var direction = GetNextDirection(currentObject, desiredObject, adjacencyList);
                if (direction.HasValue)
                {
                    sensorData = client.Move(direction.Value);
                }
            }
        }