Пример #1
0
 def test_alternate_path(self, zombie):
     environment = [
         (Vector(2, 2), default_human()),
         (Vector(1, 1), default_zombie()),
         (Vector(1, 0), default_zombie()),
     ]
     limits = BoundingBox(Vector(-100, -100), Vector(100, 100))
     assert zombie.move(FakeViewpoint(environment), limits) == Vector(0, 1)
Пример #2
0
    def test_chooses_shortest_best_move(self):
        target_vectors = TargetVectors(
            FakeViewpoint([(Vector(1, 2), default_zombie())]))
        moves = [Vector.ZERO, Vector(1, 0), Vector(2, 0)]

        assert Living().best_move(target_vectors, moves) == Vector.ZERO
        # To make sure we're not lucking out based on the order
        assert Living().best_move(target_vectors,
                                  list(reversed(moves))) == Vector.ZERO
Пример #3
0
    def test_zombie_approaches_human(self):
        zombie = default_zombie()
        human = default_human()

        characters = {Point(0, 0): zombie, Point(2, 2): human}
        area = Area(Point(0, 0), Point(3, 3))
        roster = Roster.partitioned(characters,
                                    area=area,
                                    partition_func=LifeState.for_character)

        roster = Tick(roster).next()

        assert sorted(roster.positions) == [(Point(1, 1), zombie),
                                            (Point(2, 2), human)]
Пример #4
0
    def test_movement_with_zombies(self, zombie_vectors, moves):
        target_vectors = TargetVectors(
            FakeViewpoint([(v, default_zombie()) for v in zombie_vectors]))
        best_move = Living().best_move(target_vectors, moves)

        def distance_after_move(move):
            return min((zombie - move).distance for zombie in zombie_vectors)

        best_move_distance = distance_after_move(best_move)
        note(f"Best distance, after {best_move}: {best_move_distance}")

        for move in moves:
            move_distance = distance_after_move(move)
            note(f"Distance after {move}: {move_distance}")

        assert all(best_move_distance >= distance_after_move(move)
                   for move in moves)
Пример #5
0
 def env_contents(vector):
     return default_zombie() if vector else zombie
Пример #6
0
 def zombie(self):
     return default_zombie()