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 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)