我知道如何使用索引从简单列表中提取元素,但我不知道如何从另一个列表中提取一个列表。
这是我需要的地方:我在玩游戏中的蛇游戏。我大部分时间都在玩游戏,但我很难让游戏画出蛇的尾巴。
下面是我的代码的工作原理:我一直在为图形使用pygame.draw。“蛇”从一个带有x和y坐标的盒子开始。食物还有另一对x和y坐标(用posx和posy变量表示,以区别于蛇头部使用的x和y变量)。我有游戏保存所有以前的坐标蛇到一个列表,它做得很好(我通过让游戏打印出来它所保存的)。我这部分的代码是:
path.insert(0,(x,y))“路径”是我用来跟踪蛇路径的列表的名称。
我可以四处走动,吃没有问题的食物(除了我的游戏有点反应迟钝这一事实之外),问题是如果我试图实现代码来描绘蛇的故事。
蛇的长度(它吃了多少“食物”)被保存在一个简单的变量‘长度’。我写了这个代码来画蛇的故事:
if length>0:
for i in range(length-1):
pygame.draw.rect(mainWindow, (255,255,255),(path[i], snakeSize,snakeSize))请原谅最后一行的包袱。
我以为这会把个人的x,y列表从“路径”列表中拉出来。但是如果我吃了一片食物,除了出现在一个新的、随机的地点之外,什么也不会发生。如果我吃了第二个,游戏就会冻结,我会收到一条错误信息,上面写着:
TypeError: Rect argument is invalid我想我不喜欢把x和y坐标从“路径”中拉出来。我不知道如何从另一个列表中提取单个元素。
而且,我不明白为什么当我第一次吃东西的时候什么都没有发生。我所知道的是,如果我把配方从长度-1改为长度,那么我就会在吃东西的时候立即冻僵。它似乎不喜欢长度等于1,我也不知道为什么。
发布于 2019-07-30 07:04:55
length-1面临的问题是,当您执行for i in range(length-1)时,当游戏开始时,我猜想length等于1,所以length-1等于0,循环根本不执行,因此不会产生错误。
因此,由于我们将很快修复该错误,首先将循环更改为for i in range(length)。
至于您的错误,根据您的信息,path是这样的:
[(1, 2), (4, 1), (6, 4)]现在让我们假设i=1。通过做path[i],你可以得到(4, 1)。所以这意味着你要传递到's last argument
((4, 1), snakeSize, snakeSize)但它预计将有4元组的独立测试。所以你有两种方法可以这样做:
https://stackoverflow.com/questions/57265743
复制相似问题