让我来解释一下,我实际上是想为Snake这个游戏创建一个人工智能,作为输入,我想使用与墙的距离,与苹果的距离,与自己的距离来实现7个不同的方向。作为输入,我想使用与墙的距离,与苹果的距离,与自己的距离作为7个不同的方向,基于头的方向。
现在我有这样的代码。
head_position = self.__snake.position[0]
front_direction_vector = numpy.array(self.__snake.position[0]) - numpy.array(self.__snake.position[1])
left_direction_vector = numpy.array([front_direction_vector[1], -front_direction_vector[0]])
right_direction_vector = numpy.array([-front_direction_vector[1], front_direction_vector[0]])
front_left_direction_vector = numpy.array([left_direction_vector[0], front_direction_vector[1]])
front_right_direction_vector = numpy.array([right_direction_vector[0], front_direction_vector[1]])
back_left_direction_vector = numpy.array([left_direction_vector[0], -front_direction_vector[1]])
back_right_direction_vector = numpy.array([right_direction_vector[0], -front_direction_vector[1]])
for i in range(1, 5):
for direction in [front_direction_vector, left_direction_vector, right_direction_vector,
front_left_direction_vector, front_right_direction_vector, back_left_direction_vector,
back_right_direction_vector]:
pos = head_position + direction * i
pygame.draw.rect(self.__display, config.SNAKE_SENSOR_COLOR,
pygame.Rect(pos[0], pos[1], self.__side[0] - 1, self.__side[1] - 1))
很好用 但只有当蛇向上或向下看时才有效 当蛇向右或向左看时,一半的 "传感器 "都消失了,我似乎找不到解决办法。
我将贴出2张显示问题的截图。
碰了一阵子壁之后,我居然找到了解决方案,这是工作代码。
head_position = self.__snake.position[0]
front_direction_vector = self.__snake.position[0] - self.__snake.position[1]
left_direction_vector = numpy.array([front_direction_vector[1], -front_direction_vector[0]])
right_direction_vector = numpy.array([-front_direction_vector[1], front_direction_vector[0]])
back_direction_vector = numpy.array([-front_direction_vector[0], -front_direction_vector[1]])
front_left_direction_vector = front_direction_vector - right_direction_vector
front_right_direction_vector = front_direction_vector - left_direction_vector
back_left_direction_vector = back_direction_vector - right_direction_vector
back_right_direction_vector = back_direction_vector - left_direction_vector
for i in range(1, 5):
for direction in [front_direction_vector, left_direction_vector, right_direction_vector,
front_left_direction_vector, front_right_direction_vector, back_direction_vector, back_right_direction_vector, back_left_direction_vector
]:
pos = head_position + direction * i
pygame.draw.rect(self.__display, config.SNAKE_SENSOR_COLOR,
pygame.Rect(pos[0], pos[1], self.__side[0] - 1, self.__side[1] - 1))