private void MoveHero(Direction direction, int stepsCount) { for (var i = 0; i < stepsCount; i++) { sensorData = client.Move(direction); } }
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("Невозможно найти путь"); }
// Попытка реализовать метод 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); } } }
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); } } }