def test_get_movement_points_elevations_and_terrains(self):
        elevation_terrain = {
            Point(0, 0): (0, 3),
            Point(1, 0): (0, 4),
            Point(0, 1): (1, 5),
            Point(1, 1): (2, 6)
        }
        tiles = [
            Tile(point=point,
                 elevation=el_terrain[0],
                 terrain_mv=el_terrain[1])
            for point, el_terrain in elevation_terrain.items()
        ]
        map_ = Map(2, 2, tiles)

        origin = Point(0, 1)
        expected = {
            Point(0, 0): 5,
            Point(1, 0): 8,
            Point(0, 1): 0,
            Point(1, 1): 6
        }
        self.assertEqual(
            MovementCalculator(map_).get_movement_points(origin, 10), expected)

        origin = Point(0, 0)
        expected = {
            Point(0, 0): 0,
            Point(1, 0): 3,
            Point(0, 1): 4,
            Point(1, 1): 9
        }
        self.assertEqual(
            MovementCalculator(map_).get_movement_points(origin, 10), expected)
    def test_get_movement_points_with_path_non_uniform_terrain(self):
        terrain_mvs = {
            Point(0, 0): 1,
            Point(1, 0): 2,
            Point(0, 1): 4,
            Point(1, 1): 3
        }

        tiles = [
            Tile(point=point, terrain_mv=terrain)
            for point, terrain in terrain_mvs.items()
        ]
        map_ = Map(2, 2, tiles)
        origin = Point(0, 0)
        expected = {
            Point(0, 0): (0, []),
            Point(1, 0): (1, [E]),
            Point(0, 1): (1, [N]),
            Point(1, 1): (3, [E, N])
        }

        self.assertEqual(
            MovementCalculator(map_).get_movement_points_with_path(origin, 5),
            expected)

        origin = Point(0, 1)
        expected = {
            Point(0, 0): (4, [S]),
            Point(1, 0): (5, [S, E]),
            Point(0, 1): (0, []),
            Point(1, 1): (4, [E])
        }
        self.assertEqual(
            MovementCalculator(map_).get_movement_points_with_path(origin, 5),
            expected)
    def test_get_movement_points_non_uniform_terrain(self):
        terrain_mvs = {
            Point(0, 0): 1,
            Point(1, 0): 2,
            Point(0, 1): 4,
            Point(1, 1): 3
        }

        tiles = [
            Tile(point=point, terrain_mv=terrain)
            for point, terrain in terrain_mvs.items()
        ]
        map_ = Map(2, 2, tiles)
        origin = Point(0, 0)
        expected = {
            Point(0, 0): 0,
            Point(1, 0): 1,
            Point(0, 1): 1,
            Point(1, 1): 3
        }
        self.assertEqual(
            MovementCalculator(map_).get_movement_points(origin, 5), expected)

        origin = Point(0, 1)
        expected = {
            Point(0, 0): 4,
            Point(1, 0): 5,
            Point(0, 1): 0,
            Point(1, 1): 4
        }
        self.assertEqual(
            MovementCalculator(map_).get_movement_points(origin, 5), expected)
示例#4
0
class Actionator(object):
    def __init__(self, unit: Soldier, action: Action,
                 perimeter_listener: PerimeterListener, map_: Map,
                 teams: list):
        self._unit = unit
        self._action = action
        self._pl = perimeter_listener
        self._map = map_
        self._mc = MovementCalculator(self._map)
        self._teams = teams[:]

    def _get_targets_in_range(self):
        tf = TargetFinder(self._map, self._teams)
        return tf.enemies_in_range(self._unit)

    def _get_targets_in_sight(self):
        tf = TargetFinder(self._map, self._teams)
        return tf.enemies_in_sight(self._unit)

    def go(self):
        if self._action.has_any(Action.ATTACK):
            self.attack()
        else:
            self.move()

    def move(self):
        """
                        get location
                        get path  list of points
                            sigh range, enemy ally
                            attack range, enemy


                        for point in path:
                            check pl
                        jump to destination
                        set pl

                        pseudo-code
                        """

    def attack(self):
        pass

    def get_target(self):
        self._get_targets_in_range()
        self._get_targets_in_sight()

    def get_path(self):
        max_mv = self._get_max_mv()
        self._mc.get_movement_points_with_path(self._map.get_point(self._unit),
                                               max_mv)

    def _get_max_mv(self):
        return self._unit.get_action_points()

    """
示例#5
0
 def __init__(self, unit: Soldier, action: Action,
              perimeter_listener: PerimeterListener, map_: Map,
              teams: list):
     self._unit = unit
     self._action = action
     self._pl = perimeter_listener
     self._map = map_
     self._mc = MovementCalculator(self._map)
     self._teams = teams[:]
    def test_get_movement_points_with_path_obstacle_max_mv_lte_map_size(self):
        elevations = {
            Point(0, 0): 0,
            Point(1, 0): 0,
            Point(2, 0): 0,
            Point(3, 0): 0,
            Point(0, 1): 0,
            Point(1, 1): 9,
            Point(2, 1): 0,
            Point(3, 1): 0,
            Point(0, 2): 0,
            Point(1, 2): 0,
            Point(2, 2): 0,
            Point(3, 2): 0
        }
        tiles = [
            Tile(point=point, elevation=elevation)
            for point, elevation in elevations.items()
        ]
        map_ = Map(4, 3, tiles)
        origin = Point(1, 2)
        expected_four = {
            Point(0, 0): (3, [W, S, S]),
            Point(1, 0): (4, [W, S, S, E]),
            Point(2, 0): (3, [E, S, S]),
            Point(3, 0): (4, [E, S, S, E]),
            Point(0, 1): (2, [W, S]),
            Point(2, 1): (2, [E, S]),
            Point(3, 1): (3, [E, S, E]),
            Point(0, 2): (1, [W]),
            Point(1, 2): (0, []),
            Point(2, 2): (1, [E]),
            Point(3, 2): (2, [E, E])
        }

        expected_three = {
            Point(0, 0): (3, [W, S, S]),
            Point(2, 0): (3, [E, S, S]),
            Point(0, 1): (2, [W, S]),
            Point(2, 1): (2, [E, S]),
            Point(3, 1): (3, [E, S, E]),
            Point(0, 2): (1, [W]),
            Point(1, 2): (0, []),
            Point(2, 2): (1, [E]),
            Point(3, 2): (2, [E, E])
        }

        calculator = MovementCalculator(map_)
        # pretty_print(expected)
        # pretty_print(MovementCalculator(map_).get_movement_points_with_path(origin, 10))
        self.assertEqual(calculator.get_movement_points_with_path(origin, 4),
                         expected_four)
        self.assertEqual(calculator.get_movement_points_with_path(origin, 3),
                         expected_three)
    def test_get_movement_points_with_path_obstacle_lte_max_mv_will_continue_around_corner(
            self):
        elevations = {
            Point(0, 0): 0,
            Point(1, 0): 0,
            Point(2, 0): 0,
            Point(3, 0): 0,
            Point(0, 1): 3,
            Point(1, 1): 4,
            Point(2, 1): 0,
            Point(3, 1): 0,
            Point(0, 2): 0,
            Point(1, 2): 0,
            Point(2, 2): 0,
            Point(3, 2): 0
        }
        tiles = [
            Tile(point=point, elevation=elevation)
            for point, elevation in elevations.items()
        ]
        map_ = Map(4, 3, tiles)
        origin = Point(1, 2)
        expected_four = {
            Point(1, 0): (4, [E, S, S, W]),
            Point(2, 0): (3, [E, S, S]),
            Point(3, 0): (4, [E, S, S, E]),
            Point(2, 1): (2, [E, S]),
            Point(3, 1): (3, [E, S, E]),
            Point(0, 2): (1, [W]),
            Point(1, 2): (0, []),
            Point(2, 2): (1, [E]),
            Point(3, 2): (2, [E, E])
        }

        expected_five = {
            Point(0, 0): (5, [E, S, S, W, W]),
            Point(1, 0): (4, [E, S, S, W]),
            Point(2, 0): (3, [E, S, S]),
            Point(3, 0): (4, [E, S, S, E]),
            Point(0, 1): (5, [W, S]),
            Point(1, 1): (5, [S]),
            Point(2, 1): (2, [E, S]),
            Point(3, 1): (3, [E, S, E]),
            Point(0, 2): (1, [W]),
            Point(1, 2): (0, []),
            Point(2, 2): (1, [E]),
            Point(3, 2): (2, [E, E])
        }

        ranger = MovementCalculator(map_)
        self.assertEqual(ranger.get_movement_points_with_path(origin, 5),
                         expected_five)
        self.assertEqual(ranger.get_movement_points_with_path(origin, 4),
                         expected_four)
    def test_get_movement_points_obstacle_lte_max_mv_will_continue_around_corner(
            self):
        elevations = {
            Point(0, 0): 0,
            Point(1, 0): 0,
            Point(2, 0): 0,
            Point(3, 0): 0,
            Point(0, 1): 3,
            Point(1, 1): 4,
            Point(2, 1): 0,
            Point(3, 1): 0,
            Point(0, 2): 0,
            Point(1, 2): 0,
            Point(2, 2): 0,
            Point(3, 2): 0
        }
        tiles = [
            Tile(point=point, elevation=elevation)
            for point, elevation in elevations.items()
        ]
        map_ = Map(4, 3, tiles)
        origin = Point(1, 2)
        expected_four = {
            Point(1, 0): 4,
            Point(2, 0): 3,
            Point(3, 0): 4,
            Point(2, 1): 2,
            Point(3, 1): 3,
            Point(0, 2): 1,
            Point(1, 2): 0,
            Point(2, 2): 1,
            Point(3, 2): 2
        }

        expected_five = {
            Point(0, 0): 5,
            Point(1, 0): 4,
            Point(2, 0): 3,
            Point(3, 0): 4,
            Point(0, 1): 5,
            Point(1, 1): 5,
            Point(2, 1): 2,
            Point(3, 1): 3,
            Point(0, 2): 1,
            Point(1, 2): 0,
            Point(2, 2): 1,
            Point(3, 2): 2
        }

        ranger = MovementCalculator(map_)
        self.assertEqual(ranger.get_movement_points(origin, 5), expected_five)
        self.assertEqual(ranger.get_movement_points(origin, 4), expected_four)
    def test_get_movement_points_with_path_non_uniform_elevation(self):
        points_to_elevation = {
            Point(0, 0): 0,
            Point(1, 0): 1,
            Point(2, 0): 2,
            Point(0, 1): 1,
            Point(1, 1): 2,
            Point(2, 1): 3,
            Point(0, 2): 2,
            Point(1, 2): 3,
            Point(2, 2): 4
        }
        tiles = [
            Tile(elevation=elevation, point=point)
            for point, elevation in points_to_elevation.items()
        ]
        the_map = Map(3, 3, tiles)

        origin_1 = Point(1, 1)
        expected_1 = {
            Point(0, 0): (2, [S, W]),
            Point(1, 0): (1, [S]),
            Point(2, 0): (3, [S, E]),
            Point(0, 1): (1, [W]),
            Point(1, 1): (0, []),
            Point(2, 1): (2, [E]),
            Point(0, 2): (3, [W, N]),
            Point(1, 2): (2, [N]),
            Point(2, 2): (4, [E, N])
        }
        answer = MovementCalculator(the_map).get_movement_points_with_path(
            origin_1, 5)

        self.assertEqual(answer, expected_1)

        origin_2 = Point(2, 1)
        expected_2 = {
            Point(0, 0): (3, [S, W, W]),
            Point(1, 0): (2, [S, W]),
            Point(2, 0): (1, [S]),
            Point(0, 1): (2, [W, W]),
            Point(1, 1): (1, [W]),
            Point(2, 1): (0, []),
            Point(0, 2): (4, [W, W, N]),
            Point(1, 2): (3, [W, N]),
            Point(2, 2): (2, [N])
        }
        answer = MovementCalculator(the_map).get_movement_points_with_path(
            origin_2, 5)
        self.assertEqual(expected_2, answer)
示例#10
0
    def test_get_movement_points_with_path_regression_test_two(self):
        elevations = {
            Point(0, 0): 0,
            Point(1, 0): 11,
            Point(2, 0): 0,
            Point(0, 1): 0,
            Point(1, 1): 11,
            Point(2, 1): 0,
            Point(0, 2): 0,
            Point(1, 2): 11,
            Point(2, 2): 0,
            Point(0, 3): 0,
            Point(1, 3): 11,
            Point(2, 3): 0,
            Point(0, 4): 0,
            Point(1, 4): 0,
            Point(2, 4): 0
        }
        tiles = [
            Tile(point=point, elevation=elevation * 10)
            for point, elevation in elevations.items()
        ]
        map_ = Map(3, 5, tiles)
        origin = Point(0, 0)
        expected = {
            Point(0, 0): (0, []),
            Point(0, 1): (1, [N]),
            Point(0, 2): (2, [N, N]),
            Point(0, 3): (3, [N, N, N]),
            Point(0, 4): (4, [N, N, N, N]),
        }
        self.assertEqual(
            MovementCalculator(map_).get_movement_points_with_path(origin, 4),
            expected)

        expected = {
            Point(0, 0): (0, []),
            Point(0, 1): (1, [N]),
            Point(0, 2): (2, [N, N]),
            Point(0, 3): (3, [N, N, N]),
            Point(0, 4): (4, [N, N, N, N]),
            Point(1, 4): (5, [N, N, N, N, E]),
            Point(2, 4): (6, [N, N, N, N, E, E]),
            Point(2, 3): (7, [N, N, N, N, E, E, S]),
        }
        self.assertEqual(
            MovementCalculator(map_).get_movement_points_with_path(origin, 7),
            expected)
示例#11
0
    def test_get_movement_points_with_path_chooses_smallest_move_pts_different_order(
            self):

        elevations = {
            Point(0, 0): 2,
            Point(1, 0): 0,
            Point(0, 1): 1,
            Point(1, 1): 0
        }

        tiles = [
            Tile(point=point, elevation=elevation)
            for point, elevation in elevations.items()
        ]
        map_ = Map(2, 2, tiles)
        origin = Point(0, 1)
        expected = {
            Point(0, 0): (2, [S]),
            Point(1, 0):
            (2, [E, S]),  # point(1, 0) has two different ways from 0,1
            Point(0, 1): (0, []),
            Point(1, 1): (1, [E])
        }  # one way costs 2 and one way costs 3
        self.assertEqual(
            MovementCalculator(map_).get_movement_points_with_path(origin, 10),
            expected)
示例#12
0
    def test_get_movement_points_with_path_with_impassable_tile_in_place(self):
        elevations = {
            Point(0, 0): 2,
            Point(1, 0): 0,
            Point(2, 0): 3,
            Point(0, 1): 1,
            Point(1, 1): 9,
            Point(2, 1): 2,
            Point(0, 2): 2,
            Point(1, 2): 0,
            Point(2, 2): 1
        }
        tiles = [
            Tile(point=point, elevation=elevation)
            if elevation != 9 else ImpassableTile(point=point)
            for point, elevation in elevations.items()
        ]
        map_ = Map(3, 3, tiles)

        origin = Point(1, 2)
        expected = {
            Point(0, 0): (6, [W, S, S]),
            Point(1, 0): (7, [W, S, S, E]),
            Point(2, 0): (6, [E, S, S]),
            Point(0, 1): (4, [W, S]),
            Point(2, 1): (4, [E, S]),
            Point(0, 2): (3, [W]),
            Point(1, 2): (0, []),
            Point(2, 2): (2, [E])
        }
        self.assertEqual(
            MovementCalculator(map_).get_movement_points_with_path(origin, 10),
            expected)
示例#13
0
    def test_get_movement_points_with_path_goes_around_obstacle_and_recalculates_on_terrain(
            self):
        terrains = {
            Point(0, 0): 1,
            Point(1, 0): 1,
            Point(2, 0): 1,
            Point(3, 0): 1,
            Point(0, 1): 1,
            Point(1, 1): 1,
            Point(2, 1): 1,
            Point(3, 1): 1,
            Point(0, 2): 1,
            Point(1, 2): 4,
            Point(2, 2): 9,
            Point(3, 2): 1,
            Point(0, 3): 1,
            Point(1, 3): 1,
            Point(2, 3): 5,
            Point(3, 3): 1
        }
        tiles = [
            Tile(point=point, terrain_mv=terrain)
            for point, terrain in terrains.items()
        ]
        map_ = Map(4, 4, tiles)
        origin = Point(1, 3)
        expected_six = {
            Point(0, 0): (4, [W, S, S, S]),
            Point(1, 0): (5, [W, S, S, S, E]),
            Point(2, 0): (6, [W, S, S, S, E, E]),
            Point(0, 1): (3, [W, S, S]),
            Point(1, 1): (4, [W, S, S, E]),
            Point(2, 1): (5, [W, S, S, E, E]),
            Point(3, 1): (6, [W, S, S, E, E, E]),
            Point(0, 2): (2, [W, S]),
            Point(1, 2): (1, [S]),
            Point(2, 2): (5, [S, E]),
            Point(0, 3): (1, [W]),
            Point(1, 3): (0, []),
            Point(2, 3): (1, [E]),
            Point(3, 3): (6, [E, E])
        }

        ranger = MovementCalculator(map_)
        self.assertEqual(ranger.get_movement_points_with_path(origin, 6),
                         expected_six)
示例#14
0
    def test_get_movement_points_with_path_after_going_around_obstacle_will_recalculate_min_distance_r_to_l(
            self):
        elevations = {
            Point(0, 0): 9,
            Point(1, 0): 0,
            Point(2, 0): 0,
            Point(3, 0): 0,
            Point(0, 1): 0,
            Point(1, 1): 0,
            Point(2, 1): 3,
            Point(3, 1): 0,
            Point(0, 2): 9,
            Point(1, 2): 0,
            Point(2, 2): 0,
            Point(3, 2): 0,
            Point(0, 3): 0,
            Point(1, 3): 0,
            Point(2, 3): 0,
            Point(3, 3): 0
        }
        tiles = [
            Tile(point=point, elevation=elevation)
            for point, elevation in elevations.items()
        ]
        map_ = Map(4, 4, tiles)
        origin = Point(3, 1)
        expected_six = {
            Point(1, 0): (3, [S, W, W]),
            Point(2, 0): (2, [S, W]),
            Point(3, 0): (1, [S]),
            Point(0, 1): (5, [S, W, W, N, W]),
            Point(1, 1): (4, [S, W, W, N]),
            Point(2, 1): (4, [W]),
            Point(3, 1): (0, []),
            Point(1, 2): (3, [N, W, W]),
            Point(2, 2): (2, [N, W]),
            Point(3, 2): (1, [N]),
            Point(0, 3): (5, [N, W, W, N, W]),
            Point(1, 3): (4, [N, W, W, N]),
            Point(2, 3): (3, [N, W, N]),
            Point(3, 3): (2, [N, N])
        }

        ranger = MovementCalculator(map_)
        self.assertEqual(ranger.get_movement_points_with_path(origin, 6),
                         expected_six)
示例#15
0
    def test_get_movement_points_goes_around_obstacle_and_recalculates_on_terrain(
            self):
        terrains = {
            Point(0, 0): 1,
            Point(1, 0): 1,
            Point(2, 0): 1,
            Point(3, 0): 1,
            Point(0, 1): 1,
            Point(1, 1): 1,
            Point(2, 1): 1,
            Point(3, 1): 1,
            Point(0, 2): 1,
            Point(1, 2): 4,
            Point(2, 2): 9,
            Point(3, 2): 1,
            Point(0, 3): 1,
            Point(1, 3): 1,
            Point(2, 3): 5,
            Point(3, 3): 1
        }
        tiles = [
            Tile(point=point, terrain_mv=terrain)
            for point, terrain in terrains.items()
        ]
        map_ = Map(4, 4, tiles)
        origin = Point(1, 3)
        expected_six = {
            Point(0, 0): 4,
            Point(1, 0): 5,
            Point(2, 0): 6,
            Point(0, 1): 3,
            Point(1, 1): 4,
            Point(2, 1): 5,
            Point(3, 1): 6,
            Point(0, 2): 2,
            Point(1, 2): 1,
            Point(2, 2): 5,
            Point(0, 3): 1,
            Point(1, 3): 0,
            Point(2, 3): 1,
            Point(3, 3): 6
        }

        ranger = MovementCalculator(map_)
        self.assertEqual(ranger.get_movement_points(origin, 6), expected_six)
示例#16
0
    def test_get_movement_points_after_going_around_obstacle_will_recalculate_min_distance_l_to_r(
            self):
        elevations = {
            Point(0, 0): 0,
            Point(1, 0): 0,
            Point(2, 0): 0,
            Point(3, 0): 9,
            Point(0, 1): 0,
            Point(1, 1): 3,
            Point(2, 1): 0,
            Point(3, 1): 0,
            Point(0, 2): 0,
            Point(1, 2): 0,
            Point(2, 2): 0,
            Point(3, 2): 9,
            Point(0, 3): 0,
            Point(1, 3): 0,
            Point(2, 3): 0,
            Point(3, 3): 0
        }
        tiles = [
            Tile(point=point, elevation=elevation)
            for point, elevation in elevations.items()
        ]
        map_ = Map(4, 4, tiles)
        origin = Point(0, 1)
        expected_six = {
            Point(0, 0): 1,
            Point(1, 0): 2,
            Point(2, 0): 3,
            Point(0, 1): 0,
            Point(1, 1): 4,
            Point(2, 1): 4,
            Point(3, 1): 5,
            Point(0, 2): 1,
            Point(1, 2): 2,
            Point(2, 2): 3,
            Point(0, 3): 2,
            Point(1, 3): 3,
            Point(2, 3): 4,
            Point(3, 3): 5
        }

        ranger = MovementCalculator(map_)
        self.assertEqual(ranger.get_movement_points(origin, 6), expected_six)
示例#17
0
    def __init__(self, map_: Map, team_1: Team, team_2: Team):
        self._map = map_
        self._team_1 = team_1
        self._team_2 = team_2
        self._pm = PerimeterListener(self._map)
        self._mc = MovementCalculator(self._map)
        self._rf = RangeFinder(self._map)

        self._unmoved_units = []
示例#18
0
 def test_get_movement_points_with_path_only_to_max_mv(self):
     map_ = Map(3, 3, [Tile() for _ in range(9)])
     answer = MovementCalculator(map_).get_movement_points_with_path(
         Point(0, 0), 1)
     expected = {
         Point(0, 0): (0, []),
         Point(0, 1): (1, [N]),
         Point(1, 0): (1, [E])
     }
     self.assertEqual(answer, expected)
示例#19
0
 def test_get_movement_points_only_includes_distances_on_map(self):
     map_ = Map(2, 2, [Tile() for _ in range(4)])
     answer = MovementCalculator(map_).get_movement_points(Point(0, 0), 100)
     expected = {
         Point(0, 0): 0,
         Point(0, 1): 1,
         Point(1, 0): 1,
         Point(1, 1): 2
     }
     self.assertEqual(answer, expected)
示例#20
0
 def test_get_movement_points_with_path_only_includes_distances_on_map(
         self):
     map_ = Map(2, 2, [Tile() for _ in range(4)])
     answer = MovementCalculator(map_).get_movement_points_with_path(
         Point(0, 0), 100)
     expected = {
         Point(0, 0): (0, []),
         Point(0, 1): (1, [N]),
         Point(1, 0): (1, [E]),
         Point(1, 1): (2, [E, N])
     }
     self.assertEqual(answer, expected)
示例#21
0
 def test_get_movement_points_not_affected_by_unit_on_origin(self):
     map_ = Map(2, 2, [Tile() for _ in range(4)])
     origin = Point(0, 0)
     map_.place_unit(Soldier(), origin)
     answer = MovementCalculator(map_).get_movement_points(origin, 100)
     expected = {
         Point(0, 0): 0,
         Point(0, 1): 1,
         Point(1, 0): 1,
         Point(1, 1): 2
     }
     self.assertEqual(answer, expected)
示例#22
0
    def test_get_movement_points_with_path_elevations_and_terrains_different_order(
            self):
        elevation_terrain = {
            Point(0, 0): (2, 6),
            Point(1, 0): (0, 4),
            Point(0, 1): (1, 5),
            Point(1, 1): (0, 3)
        }
        tiles = [
            Tile(point=point,
                 elevation=el_terrain[0],
                 terrain_mv=el_terrain[1])
            for point, el_terrain in elevation_terrain.items()
        ]
        map_ = Map(2, 2, tiles)

        origin = Point(0, 1)
        expected = {
            Point(0, 0): (6, [S]),
            Point(1, 0): (8, [E, S]),
            Point(0, 1): (0, []),
            Point(1, 1): (5, [E])
        }
        self.assertEqual(
            MovementCalculator(map_).get_movement_points_with_path(origin, 10),
            expected)

        origin = Point(1, 0)
        expected = {
            Point(0, 0): (6, [W]),
            Point(1, 0): (0, []),
            Point(0, 1): (8, [N, W]),
            Point(1, 1): (4, [N])
        }
        self.assertEqual(
            MovementCalculator(map_).get_movement_points_with_path(origin, 10),
            expected)
示例#23
0
    def test_get_movement_points_with_path_with_occupied_space_in_place(self):
        elevations = {
            Point(0, 0): 2,
            Point(1, 0): 0,
            Point(2, 0): 3,
            Point(0, 1): 1,
            Point(1, 1): 0,
            Point(2, 1): 2,
            Point(0, 2): 2,
            Point(1, 2): 0,
            Point(2, 2): 1
        }
        tiles = [
            Tile(point=point, elevation=elevation)
            for point, elevation in elevations.items()
        ]

        map_ = Map(3, 3, tiles)

        occupied_point = Point(1, 1)
        origin = Point(1, 2)

        map_.place_unit(Soldier(), origin)
        map_.place_unit(Soldier(), occupied_point)

        expected = {
            Point(0, 0): (6, [W, S, S]),
            Point(1, 0): (7, [W, S, S, E]),
            Point(2, 0): (6, [E, S, S]),
            Point(0, 1): (4, [W, S]),
            Point(2, 1): (4, [E, S]),
            Point(0, 2): (3, [W]),
            Point(1, 2): (0, []),
            Point(2, 2): (2, [E])
        }
        self.assertEqual(
            MovementCalculator(map_).get_movement_points_with_path(origin, 10),
            expected)
示例#24
0
 def test_get_movement_points_only_to_max_mv(self):
     map_ = Map(3, 3, [Tile() for _ in range(9)])
     answer = MovementCalculator(map_).get_movement_points(Point(0, 0), 1)
     expected = {Point(0, 0): 0, Point(0, 1): 1, Point(1, 0): 1}
     self.assertEqual(answer, expected)