gpt4 book ai didi

python - Pygame 贪吃蛇游戏

转载 作者:行者123 更新时间:2023-11-28 17:41:04 28 4
gpt4 key购买 nike

好的,这是我第一次访问这个网站,所以我希望我做对了。

我正在 Pygame 中制作蛇游戏,用于学校评估任务,但我遇到了问题。我无法让蛇的 body 部位消失。

目前, body 部位是这样生成的:

def more_body(bodyparts, x, y, z):
body = pygame.sprite.Sprite()
body.image = pygame.image.load('body.png')
body.rect = head.image.get_rect()
body.rect.right = x
body.rect.top = y
body.timeleft = z
bodyparts.add(body)

正文删除检查是这样工作的。

for x in bodyparts:
body.timeleft -= 1
if body.timeleft == 0:
body = False

很明显,Bodyparts 是 bodyparts 的分组。这是一个 OrderedUpdates Sprite 组。

问题是代码似乎不喜欢这个解决方案。目前,该错误被列为“NameError:未定义名称‘body’”。如果我尝试将其扩展为引用 bodyparts.body.timeleft 而不是 body.timeleft 的检查,我反而会得到“AttributeError:‘OrderedUpdates’对象没有属性‘body’”。

我想到了第二种解决方案。由于 bodyparts 是一个 OrderedUpdates 组,因此应该可以根据它们在列表中的位置选择和删除特定的片段。因此,计划的步骤如下:

  1. 将 len(bodyparts) 与先前设置的变量进行比较。
  2. 如果长度超过蛇应有的长度,则删除添加到 bodyparts 的第一项 - 我不确定这是第一项还是最后一项。

我的主要问题是:

这是一个可行的解决方案吗?您能提供代码来实现吗?我可以把它当作一个列表,然后拆分它,以便删除 bodyparts 组的前面(或后面,取决于它们的添加方式)吗?您可以提供的任何解决方案都会有很大帮助。

最佳答案

for x in bodyparts:
body.timeleft -= 1
if body.timeleft == 0:
body = False

在这里,您遍历 Sprite 组,将每个 Sprite 存储在变量 x 中。您永远不会定义 body,因此会引发异常。

即使您这样做了,将body 设置为False 也不会神奇地将 Sprite 从 Sprite 组中移除。为此,您需要 remove方法。

因此您应该将循环更改为:

for body in bodyparts:
body.timeleft -= 1
if body.timeleft == 0:
bodyparts.remove(body)

除了使用 sprite 组之外,您还可以使用一个简单的列表,并在元素变得太大时将其删除:

max_len = 4 # current max length of snake
bodyparts = []

def more_body(bodyparts, x, y, z):
body = ...
bodyparts.append(body)
bodyparts=bodyparts[-max_len:]

此外,您应该只加载图像 'body.png' 一次并重复使用它,而不是每次都加载它。

关于python - Pygame 贪吃蛇游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24182043/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com