private string PrintActions(StepCommands stepCommands)
        {
            var response = string.Empty;

            if (stepCommands.Fire == Fire.FIRE_BEFORE_ACTION)
            {
                response += "ACT";
                if (stepCommands.Command != 0)
                {
                    response += ",";
                    response += ChooseCommand(stepCommands.Command);
                }

                return(response);
            }

            if (stepCommands.Fire == Fire.FIRE_AFTER_ACTION)
            {
                response += ChooseCommand(stepCommands.Command);
                response += ",";
                response += "ACT";
                return(response);
            }

            response += ChooseCommand(stepCommands.Command);

            return(response);
        }
Beispiel #2
0
        public async Task <StepCommands> CreateAction(StepData stepData)
        {
            _stepData = stepData;
            var allTanks = _stepData.Enemies;

            allTanks.AddRange(_stepData.AiTanks);
            allTanks = allTanks.Where(t => t.Alive).ToList();
            var stepCommands = new StepCommands();

            switch (_rnd.Next(3))
            {
            case 1:
                stepCommands.Fire = Fire.FIRE_AFTER_ACTION;
                break;

            case 2:
                stepCommands.Fire = Fire.FIRE_BEFORE_ACTION;
                break;
            }

            var             nearestEnemy      = GetNearest(allTanks);
            List <Commands> availableCommands = new List <Commands>();

            if (!_stepData.PlayerTank.Alive)
            {
                availableCommands.Add(Commands.GO_RIGHT);
                availableCommands.Add(Commands.GO_LEFT);
                availableCommands.Add(Commands.GO_TOP);
                availableCommands.Add(Commands.GO_DOWN);
            }

            if (nearestEnemy.X > _stepData.PlayerTank.X)
            {
                availableCommands.Add(Commands.GO_RIGHT);
            }
            if (nearestEnemy.X < _stepData.PlayerTank.X)
            {
                availableCommands.Add(Commands.GO_LEFT);
            }
            if (nearestEnemy.Y > _stepData.PlayerTank.Y)
            {
                availableCommands.Add(Commands.GO_TOP);
            }

            if (nearestEnemy.Y < _stepData.PlayerTank.Y)
            {
                availableCommands.Add(Commands.GO_DOWN);
            }

            stepCommands.Command =
                availableCommands[_rnd.Next(1, availableCommands.Count) - 1];

            return(stepCommands);
        }