大佬教程收集整理的这篇文章主要介绍了带有海龟模块的蛇游戏:如何阻止它改变方向太快,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
作为 Python 初学者课程的一部分,我刚刚完成了使用乌龟模块编写经典 Snake 游戏的代码。我注意到课程的解决方案代码中没有解决的问题,所以我想在这里询问可能的解决方案。
我创建了一个名为 snake 的类,它创建了蛇的片段(正方形)作为海龟对象。第一个方块设置方向,其他线段跟随。这是使蛇移动的方法(self.head 设置为索引为 0 的段列表中的项):
def move(self):
for segment_num in range(len(self.segments) - 1,-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)
这似乎确实解决了问题,但又产生了另一个问题——当改变方向时,蛇的最后一段现在不再“完美附着”了,而是对角线偏离了一个位置。
有没有人知道一个好的解决方案?如果相关,我很乐意发布更多我为此游戏编写的代码。
确保一切保持同步的一种方法是添加一个“移动队列”来存储用户命令。
您将有 2 个任务,一个用于用户输入,另一个用于蛇处理,这将是一个生产者-消费者问题。
上传代码后,我可以用示例更新我的答案
您的主游戏循环中有一个 time.sleep()
调用,对吗?
例如:
delay = 0.1
while True:
time.sleep(delay)
# Your game code
好吧,您可以将其放入转弯功能中:
def up(self):
if self.head.heading() != DOWN:
time.sleep(delay)
self.head.setheading(Up)
def down(self):
if self.head.heading() != UP:
time.sleep(delay)
self.head.setheading(DOWN)
def left(self):
if self.head.heading() != RIGHT:
time.sleep(delay)
self.head.setheading(LEFT)
def right(self):
if self.head.heading() != LEFT:
time.sleep(delay)
self.head.setheading(RIGHT)
以上是大佬教程为你收集整理的带有海龟模块的蛇游戏:如何阻止它改变方向太快全部内容,希望文章能够帮你解决带有海龟模块的蛇游戏:如何阻止它改变方向太快所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。