花了一天的时间学习了我对C语言的了解并将其翻译成python之后,我才从头开始编写第一个Python程序,一个蛇游戏。
我有一堂课,上面有两个列表,一个位置和一个正文。假设我的程序在碰到水果时正在做的事情是将更新的位置值插入列表的最前面。但是,当它达到目标时,它只会添加另一个值,该值始终与前一个值相同。
class Snake(object):
def __init__(self):
self.pos = [width//2, height//2]
self.mov = "UP"
self.body = [[width//2, height//2]]
def move(self, eat):
if self.mov == "UP": self.pos[1] = self.pos[1] - SPEED
if self.mov == "DOWN": self.pos[1] = self.pos[1] + SPEED
if self.mov == "LEFT": self.pos[0] = self.pos[0] - SPEED
if self.mov == "RIGHT": self.pos[0] = self.pos[0] + SPEED
self.body.insert(0, self.pos)
if not eat:
self.body.pop()
在我的循环中,
eat = vars.check_food(snake, food)
snake.move(eat)
饮食检查按预期工作。
想象一下,在大多数情况下吃东西是错误的,第一条蛇的身体为[[100,100]]。当它碰到水果并且进食的时间变为True时,它开始是[[100,100],[100,100]],而不是[[101,101],[100,100]]。
我几乎可以确定这是我思考过程中的一个错误,但是我一生中都找不到。保留旧职位->添加新职位->如果需要,请删除旧职位。
答案 0 :(得分:0)
每次致电insert
时,您插入的是self.pos
,而不是副本。因此,当您在下一次迭代中更改self.pos
时,所有实例都将同时更改。
您需要明确地说明如何在Python中复制对象:
self.body.insert(0, self.pos[:])