public static void Main(string[] args)
        {
            Connect(args);
            BestAI ai = new BestAI(sensorData, client);

            client.OnSensorDataReceived += Print;
            // Сообщаем с событием OnSensorDataReceived метод обновления локальной карты
            // списков шахт и ресурсов
            client.OnSensorDataReceived += ai.Updates;
            client.OnInfo += OnInfo;
            ai.ThinkingWhatToDoNext();
            client.Exit();
        }
Пример #2
0
 public void Dispose()
 {
     client.Exit();
 }
Пример #3
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();

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

            var sensorData = client.Configurate(
                ip, port, CvarcTag,

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

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

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

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

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

                level: HommLevel.Level1,                    // Здесь можно выбрать уровень. На уровне два на карте присутствует оппонент.

                isOnLeftSide: true                          // Вы можете указать, с какой стороны будет находиться замок героя при игре на втором уровне.
                // Помните, что на сервере выбор стороны осуществляется случайным образом, поэтому ваш код
                // должен работать одинаково хорошо в обоих случаях.
                );

            //var outPutPrinter = new CmdOutPutPrinter();

            //outPutPrinter.PrintMap(sensorData.Map.Objects,sensorData.MyArmy, sensorData.Map.Width, sensorData.Map.Height );
            var listCells  = sensorData.Map.Objects.Select(item => item.ToCell()).ToList();
            var pathFinder = new Finder(listCells, new Cell(sensorData.Location.X, sensorData.Location.Y));

            //var a = pathFinder.GetMoves(sensorData.Map.Objects.Single(o => o.Location.X == 10 && o.Location.Y == 10).ToCell());

            //outPutPrinter.PrintPath(sensorData.Map.Objects, a, sensorData.MyArmy, sensorData.Map.Width, sensorData.Map.Height );
            //var b = Converter.ConvertCellPathToDirection(a);

            //foreach (var item in b)
            //{
            //	client.Move(item);
            //}

            var actionManager = new ActionManager(client, sensorData);

            //TODO: remove this cicle
            while (true)
            {
                actionManager.Play();
            }
            client.Exit();
        }

        //static void Print(HommSensorData data)
        //{
        //	Console.WriteLine("---------------------------------");

        //	//Console.WriteLine($"You are here: ({data.Location.X},{data.Location.Y})");

        //	//  Console.WriteLine($"You have {data.MyTreasury.Select(z => z.Value + " " + z.Key).Aggregate((a, b) => a + ", " + b)}");

        //	//var location = data.Location.ToLocation();

        //	//Console.Write("W: ");
        //	//Console.WriteLine(GetObjectAt(data.Map, location.NeighborAt(Direction.Up)));

        //	//Console.Write("E: ");
        //	//Console.WriteLine(GetObjectAt(data.Map, location.NeighborAt(Direction.RightUp)));

        //	//Console.Write("D: ");
        //	//Console.WriteLine(GetObjectAt(data.Map, location.NeighborAt(Direction.RightDown)));

        //	//Console.Write("S: ");
        //	//Console.WriteLine(GetObjectAt(data.Map, location.NeighborAt(Direction.Down)));

        //	//Console.Write("A: ");
        //	//Console.WriteLine(GetObjectAt(data.Map, location.NeighborAt(Direction.LeftDown)));

        //	//Console.Write("Q: ");
        //	//Console.WriteLine(GetObjectAt(data.Map, location.NeighborAt(Direction.LeftUp)));
        //}

        //static string GetObjectAt(MapData map, Location location)
        //{
        //	if (location.X < 0 || location.X >= map.Width || location.Y < 0 || location.Y >= map.Height)
        //		return "Outside";
        //	return map.Objects.
        //		Where(x => x.Location.X == location.X && x.Location.Y == location.Y)
        //		.FirstOrDefault()?.ToString() ?? "Nothing";
        //}

        //static void OnInfo(string infoMessage)
        //{
        //	Console.ForegroundColor = ConsoleColor.Green;
        //	//Console.WriteLine(infoMessage);
        //	Console.ResetColor();
        //}
    }