public string GetNextMove(State state, Countdown countdown) { if (state.RoundType < 0) { return(CommandHelper.SelectHero(HeroType.Valkyrie)); } var heroInfo = state.GetMy(UnitType.Hero).First(); if (!ReadyToAttack(heroInfo.Pos)) { return(GotoPosition()); } var unitsInRange = state.GetHis(); var unitToAttack = unitsInRange.Where(u => u.Pos.InRadiusTo(heroInfo.Pos, heroInfo.AttackRange)) .OrderBy(u => u.Health) .FirstOrDefault(); if (unitToAttack != null) { return(CommandHelper.Attack(unitToAttack)); } return(CommandHelper.Wait()); }
private static void Main(string[] args) { var reader = new StateReader(); var initData = reader.ReadInitData(); var ironManAi = new KiteAi(initData.AttackDirection, HeroType.IronMan); var doctorStrangeAi = new KiteAi(initData.AttackDirection, HeroType.DoctorStrange); var ais = new List <AiBase>() { ironManAi, doctorStrangeAi, }; while (true) { var state = reader.ReadState(initData); var countdown = new Countdown(45); if (state.RoundType == -2) { Console.WriteLine(CommandHelper.SelectHero(HeroType.IronMan)); continue; } if (state.RoundType == -1) { Console.WriteLine(CommandHelper.SelectHero(HeroType.DoctorStrange)); continue; } foreach (var ai in ais) { var move = ai.GetNextMove(state, countdown); Console.Error.WriteLine(countdown); Console.WriteLine(move); } } }