Example #1
0
 def test_angles(self):
     vector = Vector(1, 0)
     for _ in range(10):
         print(
             f'Vector({vector.x}, {vector.y}) -> {math.degrees(vector.angle)} / {vector.angle}'
         )
         vector.rotate(math.radians(90))
Example #2
0
    def test_difference(self):
        alpha = Vector(1, 0)
        beta = Vector(1, 0)

        differences = [0, -45, -90, -135, 180, 135, 90, 45]
        for i in range(8):
            self.assertEqual(Vector.difference(alpha.angle, beta.angle),
                             math.radians(differences[i]))
            beta.rotate(math.radians(-45))
    def load(self, name):
        """Load a existing world from file."""
        filename = f'{self._directory}/{name}.json'
        with open(filename, 'r') as file:
            world = json.load(file)

        self.size = world['size']
        self._structure = copy.deepcopy(world['data'])

        if 'snake' in world.keys():
            snake = world['snake']
            position = Vector(snake['position'])
            direction = Vector(snake['direction'])
            length = snake['length']
            self._snake = Snake(self, position, direction, length)
        else:
            self._snake = Snake(self)

        self._apple = Apple(self)

        self._create_surfaces()
        self._build_structure()

        self.reset()
Example #4
0
    def observe(self):
        def distance(x): return min(math.floor(round(x) / 2), 3)

        state = []
        direction = self.world.snake.direction.inverted()
        snake = self.world.snake.position
        for _ in range(3):
            direction.rotate(math.radians(90))
            value, position = self.world.raycast(
                snake, direction, (Apple.VALUE, Snake.VALUE, self.world.WALL_VALUE))

            state.append(
                (value, distance(snake.distance(position))))

        delta_vector = self.world.snake.position.inverted() + \
            self.world.apple.position
        delta = math.degrees(Vector.difference(
            self.world.snake.direction.angle, delta_vector.angle))

        state.append((
            round(delta / 45) * 45,
            distance(snake.distance(self.world.apple.position))
        ))
        return tuple(state)
Example #5
0
    def test_distance_diagonal_anti(self):
        vector_a = Vector(7, 3)
        vector_b = Vector(1, 2)

        distance = vector_a.distance(vector_b)
        self.assertAlmostEqual(distance, 6.082763, delta=0.001)
Example #6
0
    def test_distance_diagonal_main(self):
        vector_a = Vector(2, 3)
        vector_b = Vector(5, 7)

        distance = vector_a.distance(vector_b)
        self.assertAlmostEqual(distance, 5)
Example #7
0
    def test_distance_diagonal_origin(self):
        vector_a = Vector(0, 0)
        vector_b = Vector(2, 2)

        distance = vector_a.distance(vector_b)
        self.assertAlmostEqual(distance, 2.828427, delta=0.001)
Example #8
0
    def test_distance_same_points(self):
        vector_a = Vector(2, 2)
        vector_b = Vector(2, 2)

        distance = vector_a.distance(vector_b)
        self.assertEqual(distance, 0)
Example #9
0
    def test_distance_vertical_three_to_eight(self):
        vector_a = Vector(0, 3)
        vector_b = Vector(0, 8)

        distance = vector_a.distance(vector_b)
        self.assertEqual(distance, 5)
Example #10
0
 def test_rotation(self):
     vec = Vector(1, 0)
     vectors = [
         Vector(1, 0),
         Vector(1, 1),
         Vector(0, 1),
         Vector(-1, 1),
         Vector(-1, 0),
         Vector(-1, -1),
         Vector(0, -1),
         Vector(1, -1)
     ]
     for i in range(8):
         self.assertEqual(vec, vectors[i])
         vec = vec.rotated(math.radians(45))
Example #11
0
    def test_distance_vertical_zero_to_six(self):
        vector_a = Vector(0, 0)
        vector_b = Vector(0, 6)

        distance = vector_a.distance(vector_b)
        self.assertEqual(distance, 6)
Example #12
0
    def test_distance_horizontal_five_to_nine(self):
        vector_a = Vector(5, 0)
        vector_b = Vector(9, 0)

        distance = vector_a.distance(vector_b)
        self.assertEqual(distance, 4)
Example #13
0
    def test_distance_horizontal_zero_to_ten(self):
        vector_a = Vector(0, 0)
        vector_b = Vector(10, 0)

        distance = vector_a.distance(vector_b)
        self.assertEqual(distance, 10)