【发布时间】:2021-02-13 16:51:55
【问题描述】:
作为 Python 初学者课程的一部分,我刚刚完成了使用 turtle 模块编写经典 Snake 游戏的代码。我注意到课程的解决方案代码中没有解决的问题,所以我想在这里寻求可能的解决方案。
我创建了一个名为snake 的类,它将蛇的片段(正方形)创建为海龟对象。第一个方块设置方向,其他部分跟随。这是使蛇移动的方法(self.head 设置为段列表中索引为 0 的项):
def move(self):
for segment_num in range(len(self.segments) - 1, 0, -1):
new_x = self.segments[segment_num - 1].xcor()
new_y = self.segments[segment_num - 1].ycor()
self.segments[segment_num].goto(new_x, new_y)
self.head.forward(MOVE_DISTANCE)
箭头键触发以下方法,这些方法会改变方向并防止蛇自行返回:
def up(self):
if self.head.heading() != DOWN:
self.head.setheading(UP)
def down(self):
if self.head.heading() != UP:
self.head.setheading(DOWN)
def left(self):
if self.head.heading() != RIGHT:
self.head.setheading(LEFT)
def right(self):
if self.head.heading() != LEFT:
self.head.setheading(RIGHT)
现在的问题是,如果用户非常快速地按下两个箭头键(例如,当蛇向右移动时,向上和向左键),在程序有机会在两者之间向前移动之前,方向就会改变。这使蛇可以自行返回并导致游戏结束。
我尝试让它在每次改变方向时都向前移动,如下所示:
def left(self):
if self.head.heading() != RIGHT:
self.head.setheading(LEFT)
self.head.forward(20)
这似乎确实解决了问题,但又产生了另一个问题 - 蛇的最后一段现在在改变方向时不再“完美连接”,而是在对角线上偏离了一个位置。
有没有人知道一个好的解决方案?如果相关的话,我很乐意发布更多我为这款游戏编写的代码。
【问题讨论】:
-
如果您将代码上传为minimal reproducible example会容易得多
标签: python turtle-graphics python-turtle