Ejemplo n.º 1
0
        public Movement GetMovementToClosestEnemy()
        {
            var player = _client.GetPlayerTank();
            var closestEnemyPosition = PlayerUtility.GetClosestEnemyPosition(_client, out var movementRoad, 30);

            if (closestEnemyPosition.IsNegativePoint())
            {
                return(GetLongTermRandomDirection());
            }

            if (_movementRoad?.Count > 0 && _movementTarget != null &&
                _client.IsEnemyAt(_movementTarget) &&
                player.GetDistance(closestEnemyPosition) == player.GetDistance(_movementTarget) &&
                _moveType == MoveType.MovementToClosestEnemy)
            {
                var movement = _movementRoad.First();
                _movementRoad.RemoveAt(0);
                return(movement);
            }

            _movementRoad = movementRoad;
            _moveType     = MoveType.MovementToClosestEnemy;

            {
                var movement = _movementRoad.First();
                _movementRoad.RemoveAt(0);
                _movementTarget = closestEnemyPosition;
                return(movement);
            }
        }
        private static Point GetClosestEnemyPosition(BattleNetClient client, List <List <Point> > checkedPoints,
                                                     List <List <Movement> > movements, List <Point> currentRangePoints, out List <Movement> road)
        {
            if (client.IsAnyOfEnemyAt(currentRangePoints))
            {
                for (int index = 0; index < currentRangePoints.Count; index++)
                {
                    if (client.IsEnemyAt(currentRangePoints[index]))
                    {
                        road = new List <Movement>(movements[index]);
                        return(currentRangePoints[index]);
                    }
                }
            }

            var iterationMap      = MapUtility.IterationMap;
            var nextRangePoints   = new List <Point>();
            var nextMovements     = new List <List <Movement> >();
            var nextCheckedPoints = new List <List <Point> >();

            for (int index = 0; index < movements.Count; index++)
            {
                foreach (var iteration in iterationMap)
                {
                    var nextPosition = iteration.Value(currentRangePoints[index]);
                    var movement     = iteration.Key.ToMovement();

                    if (checkedPoints[index].Exists(x => x.X == nextPosition.X && x.Y == nextPosition.Y))
                    {
                        continue;
                    }

                    if (client.IsOutOf(nextPosition) || client.IsObstacleAt(nextPosition))
                    {
                        continue;
                    }

                    nextRangePoints.Add(nextPosition);

                    var move = new List <Movement>(movements[index]);
                    move.Add(iteration.Key.ToMovement());
                    nextMovements.Add(move);

                    var nextChecked = new List <Point>(checkedPoints[index]);
                    nextChecked.Add(currentRangePoints[index]);
                    nextCheckedPoints.Add(nextChecked);
                }
            }

            checkedPoints.Clear();
            checkedPoints.AddRange(nextCheckedPoints);
            movements.Clear();
            movements.AddRange(nextMovements);
            currentRangePoints.Clear();
            currentRangePoints.AddRange(nextRangePoints);
            road = new List <Movement>();
            return(PointUtility.CreateNegativePoint());
        }
Ejemplo n.º 3
0
        public bool TryPostAct(Direction requestedDirection, List <MapPoint> enemiesInArea)
        {
            var testPosition = new Point(_client.PlayerX, _client.PlayerY);
            var iterator     = MapUtility.IterationMap[requestedDirection];

            testPosition = iterator(testPosition);

            if (_client.IsEnemyAt(testPosition))
            {
                return(true);
            }

            return(IsEnemiesOnLine(testPosition, requestedDirection, enemiesInArea));
        }