将变量值插入列表python

2024-05-29 03:03:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个蛇游戏,我的尾巴真的很麻烦。我创建的代码应该可以工作,但是列表和我使用的变量有一些问题。在

在节目开始时,我宣布:

playerpos=[552,352]
snake=[]

当我移动蛇的时候,玩家的点数会增加或减少50。 然后在列表“snake”的0位置插入列表“playerpos”

^{pr2}$

我印蛇头

screen.blit(serpente,snake[0])
pygame.display.flip #upgrade the screen

所以剩下的课程:

    if prevscore==score:
        del snake[0]
    elif prevscore<score:
        prevscore+=1
    for i in range(0,score):
        screen.blit(tail,snake[i])
    pygame.display.flip()

现在我用这个代码来看看蛇是否吃了一个苹果。 如果他做了,我什么也不会做。如果他没有,我就删除列表中的第一个元素(保持蛇的长度不变)

然后我开始一个“for cycle”来打印蛇尾。在

我希望它看起来像尾巴,但是它没有。我调试了我的程序,发现当我改变“playerpos”的值时,所有的“snake”列表都会改变。 看起来好像不是

snake=[[value took from playerpos] , [value took from playerpos] , [value took from playerpos]]

但更像是

snake=[playerpos, playerpos, playerpos]

所以当我改变playerpos值来移动我的蛇时,整个snake列表都会改变


Tags: 代码from列表valuedisplayscreenpygame尾巴
1条回答
网友
1楼 · 发布于 2024-05-29 03:03:18

playerpos=[552,352]是一个列表。你必须创建一个玩家位置的浅拷贝:

snake.insert(0, playerpos[:])

注意,在python中,变量名是对对象的引用。数据包含在对象中。进行赋值时,引用被赋值,两个变量引用同一个对象。在

当你这么做的时候

snake.insert(0, playerpos)

然后在列表中插入对名称playerpos后面的对象的引用。最后,列表中的所有元素都指向同一个对象。因此,如果您更改playerpos的内容,那么所有元素似乎也都神奇地改变了。在

[:]板条箱一个list的浅拷贝。因此插入对列表(playerpos)副本的引用。在

相关问题 更多 >

    热门问题