コード例 #1
0
        public static void Main(string[] args)
        {
            const string local  = "127.0.0.1";
            const string online = "homm.ulearn.me";
            var          seed   = new Random().Next();

            if (args.Length == 0)
            {
                args = new[] { online, "18700" }
            }
            ;
            var ip   = args[0];
            var port = int.Parse(args[1]);

            var client = new HommClient();

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

            var ai = new HommAi(client);

            client.OnSensorDataReceived += ai.Act;

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

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

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

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

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

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

                speedUp: true,

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

                isOnLeftSide: true          // Вы можете указать, с какой стороны будет находиться замок героя при игре на втором уровне.
                                            // Помните, что на сервере выбор стороны осуществляется случайным образом, поэтому ваш код
                                            // должен работать одинаково хорошо в обоих случаях.
                );
        }
コード例 #2
0
ファイル: Common.cs プロジェクト: FoKycHuK/CVARC
 public void Init()
 {
     client     = new HommClient();
     sensorData = client.Configurate("127.0.0.1", 18700, Guid.Empty, operationalTimeLimit: 5, debugMap: true);
 }
コード例 #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();
        //}
    }
コード例 #4
0
ファイル: Homm.Client.Program.cs プロジェクト: fng3r/homm
        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);
                }
            }
        }