public BotMove PerformNextMove(BotArenaInfo arenaInfo)
        {
            var aiService = new TankBlasterSimpleAIService(false, true, 99999, 8);
            var result    = aiService.CalculateNextMove(arenaInfo);

            return(result);
        }
Example #2
0
        public override BotMove PerformNextMove(BotArenaInfo arenaInfo)
        {
            var aiService = new TankBlasterSimpleAIService(true, true, 7, 7);
            var result    = aiService.CalculateNextMove(arenaInfo);

            return(result);
        }
        public BotMove CalculateNextMove(BotArenaInfo arenaInfo)
        {
            _field = arenaInfo;
            var result = new BotMove();

            if (_shouldDropBombs && _rand.Next(_bombDroppingFrequency) == 0)
            {
                result.Action = BotAction.DropBomb;
            }

            if (_shouldFireMissiles && _field.MissileAvailableIn == 0)
            {
                var fireDirections = _allMoveDirections.Where(direction =>
                {
                    var tempLocation = _field.BotLocation;
                    for (int i = 0; i < CurrentMissileBlastRadius + 1; i++)
                    {
                        tempLocation = AddDirectionMove(tempLocation, direction);
                        if (!IsLocationValid(tempLocation) || _field.Board[tempLocation.X, tempLocation.Y] != BoardTile.Empty)
                        {
                            return(false);
                        }
                    }
                    return(true);
                }).ToList();

                if (fireDirections.Any())
                {
                    result.Action        = BotAction.FireMissile;
                    result.FireDirection = fireDirections.ElementAt(_rand.Next(fireDirections.Count()));
                }
            }

            if (IsInDangerZone(_field.BotLocation))
            {
                result.Action = BotAction.None;
            }

            var directions = _allMoveDirections.Where(direction => !IsInDangerZone(AddDirectionMove(_field.BotLocation, direction))).ToList();

            if (!directions.Any())
            {
                directions = _allMoveDirections;
            }
            result.Direction = result.Action == BotAction.FireMissile ? (MoveDirection?)null : directions[_rand.Next(directions.Count)];

            return(result);
        }
 public abstract BotMove PerformNextMove(BotArenaInfo arenaInfo);