示例#1
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))
示例#2
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)