Пример #1
0
        private static void Main()
        {
            var client = new BattleNetClient(
                "http://dojorena.io/codenjoy-contest/board/player/ix61eg04ddy0dtfh3ckq?code=382142621680346506&gameName=battlecity");
            var analitics       = new RegionAnalysis(client);
            var fightProgram    = new FightProgram(client);
            var moveProgram     = new MoveProgram(client);
            var wayOutProgram   = new WayOutProgram(client);
            var defenseProgram  = new DefenseProgram(client);
            var commandsUtility = new CommandsProcessor(client);
            var logger          = new NLog.LogFactory().GetCurrentClassLogger();

            client.Run(() =>
            {
                try
                {
                    Stopwatch timer = Stopwatch.StartNew();

                    if (!client.IsPlayerAlive())
                    {
                        client.SendActions(client.Blank());
                        logger.Debug("Our tank had been destroyed");
                        return;
                    }
                    logger.Debug($"Current coordinates [{client.PlayerX}, {client.PlayerY}]");
                    //var freeRegion = analitics.GetFreeRegion();
                    var freeRegion = new Region(new Region(client.PlayerY, client.PlayerY, client.PlayerX, client.PlayerX), 6);
                    //logger.Debug($"Region analitics finished {freeRegion.ToString()}");
                    //var enemiesInArea = client.GetEnemiesPoints(freeRegion);
                    var enemiesInArea = client.GetEnemiesPoints(freeRegion);
                    logger.Debug($"Enemy search region {freeRegion.ToString()}");
                    var enemiesCount = enemiesInArea.Count;
                    logger.Debug($"Enemies {enemiesCount} found at region");

                    if (enemiesCount > 0)
                    {
                        logger.Debug($"Closest enemy at {analitics.GetClosestEnemy(freeRegion)} found at region");
                    }

                    var preAct   = false;
                    var movement = Movement.Stop;
                    var postAct  = false;
                    if (defenseProgram.CanBeUsed())
                    {
                        logger.Debug("Defense mode used");
                        movement = moveProgram.GetSafeMovementDirection(defenseProgram.DangerDirections);
                    }
                    else if (fightProgram.CanBeUsed(6))
                    {
                        logger.Debug("Fight mode used");
                        //preAct = fightProgram.TryPreAct(enemiesInArea);
                        movement = moveProgram.GetMovementToClosestEnemy();
                        postAct  = fightProgram.TryPostAct(movement.ToDirection(client), enemiesInArea);
                    }
                    else if (wayOutProgram.CanBeUsed(6))
                    {
                        logger.Debug("WayOut mode used");
                        //preAct = wayOutProgram.TryPreAct(freeRegion);
                        movement = moveProgram.GetMovementToClosestConstruction();
                        postAct  = true; //wayOutProgram.TryPostAct(movement.ToDirection(client), freeRegion);
                    }
                    else
                    {
                        logger.Debug("default mode used");
                        //Move(client);
                        movement = moveProgram.GetLongTermRandomDirection();
                    }

                    var command = commandsUtility.CreateCommand(preAct, movement, postAct);
                    logger.Debug($"Command sending [{command}]");
                    client.SendActions(command);
                    timer.Stop();
                    logger.Debug($"Turn finished in {timer.ElapsedMilliseconds} ms");
                }
                catch (Exception e)
                {
                    logger.Fatal(e, "Programm ended\n");
                    throw;
                }
            });
            Console.Read();
        }