我正在开发一个蛇游戏,我的尾巴真的很麻烦。我创建的代码应该可以工作,但是列表和我使用的变量有一些问题。在
在节目开始时,我宣布:
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列表都会改变
playerpos=[552,352]
是一个列表。你必须创建一个玩家位置的浅拷贝:注意,在python中,变量名是对对象的引用。数据包含在对象中。进行赋值时,引用被赋值,两个变量引用同一个对象。在
当你这么做的时候
然后在列表中插入对名称
playerpos
后面的对象的引用。最后,列表中的所有元素都指向同一个对象。因此,如果您更改playerpos
的内容,那么所有元素似乎也都神奇地改变了。在[:]
板条箱一个list的浅拷贝。因此插入对列表(playerpos
)副本的引用。在相关问题 更多 >
编程相关推荐