蟒蛇根据头部位置生成7个方向的信息。

问题描述 投票:0回答:1

让我来解释一下,我实际上是想为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张显示问题的截图。

Working fineNot working

python
1个回答
0
投票

碰了一阵子壁之后,我居然找到了解决方案,这是工作代码。

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))
© www.soinside.com 2019 - 2024. All rights reserved.