程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了带有海龟模块的蛇游戏:如何阻止它改变方向太快大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决带有海龟模块的蛇游戏:如何阻止它改变方向太快?

开发过程中遇到带有海龟模块的蛇游戏:如何阻止它改变方向太快的问题如何解决?下面主要结合日常开发的经验,给出你关于带有海龟模块的蛇游戏:如何阻止它改变方向太快的解决方法建议,希望对你解决带有海龟模块的蛇游戏:如何阻止它改变方向太快有所启发或帮助;

作为 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,请注明来意。
标签: