我正在编写一个蛇游戏人工智能,有以下问题。我将从我的AI类获得下一个move
1(右转)或-1(左转)。我得照他们说的做。我的snake的direction
编码如下:
(1, 0) => going right
(-1, 0) => going left
(0, -1) => going up
(0, 1) => going down
有没有办法简化下面的if-elif
块,这样我就不需要手动检查每个组合了?你知道吗
if move == 1:
if snake.direction == (1, 0):
snake.direction = (0, 1)
elif snake.direction == (-1, 0):
snake.direction = (0, -1)
elif snake.direction == (0, 1):
snake.direction = (-1, 0)
elif snake.direction == (0, -1):
snake.direction = (1, 0)
elif move == -1:
if snake.direction == (1, 0):
snake.direction = (0, -1)
elif snake.direction == (-1, 0):
snake.direction = (0, 1)
elif snake.direction == (0, 1):
snake.direction = (1, 0)
elif snake.direction == (0, -1):
snake.direction = (-1, 0)
解决方案
但是,您是否想过使用更简化的方向表示法?你知道吗
例如,只有一个变量
direction
可能的范围是0到3(0 == North, 1 == East, 2 == South, 3 == West)
。这样,当您想要打开时,只需添加1或-1的turn
值。你知道吗然后,您可以将此逻辑转换为蛇最有效的方法。你知道吗
你可以用线性代数来帮助你解决这个问题。使用numpy可以将方向向量乘以相应的旋转矩阵:
这些是数学矩阵,当你的速度(方向)向量的点积将给你一个新的旅行方向向量。你知道吗
或者,如果您想进一步压缩它,您可以在一行代码中完成整个过程
相关问题 更多 >
编程相关推荐