我想要一个 if 语句在满足条件时将矩形添加到列表中,但它会一直添加它们直到条件为假
I want an if statement to add a rectangle to a list, when a condition is met, but it keeps adding them until the condition is false
总的来说,我对 pygame 和 python 很陌生,我正在尝试制作一款简单的游戏。在代码中,我在这里创建了一个 class Enemy 和一个它的实例。
class Enemy:
def __init__(self):
self.list = []
self.size = 20
self.x = random.randint(0 , WIDTH - self.size)
self.y = random.randint(70 , HEIGHT - self.size)
self.new_enemy = pygame.Rect(self.x , self.y , self.size , self.size)
def add_enemy(self):
if score % 5 == 0 and score != 0:
self.list.append(self.new_enemy)
print(enemy.list)
#to see if it works
enemy = Enemy()
但是当我 运行 enemy.add_enemy() 时,当 score == 5(或 10、15 等)时,它不仅会向列表中添加一个项目,还会添加大量项目。有没有解决的办法?帮助将不胜感激。
所以我对此仍有疑问,因为我没有更多的代码。
但基本上这里发生的是 self.newenemy
被删除和创建,然后在 add_enemy
中你 运行 self.list.append(self.newenemy)
本质上是将相同的对象添加到列表。所以这个列表有 n 个对象,但它们都是“相同的”,而不是复制或重复,而是完全相同。所以如果你要“杀死”list[0]
敌人,他们都会死。
编辑:此外,您的 randint
将始终生成相同的值,因此一旦创建了 class,x 和 y 将始终相同。
尝试将您的代码更改为类似这样的内容。注意附加完成后 add_enemy
中的 return。
class Enemy:
def __init__(self):
self.list = []
self.size = 20
def add_enemy(self):
if score % 5 == 0 and score != 0:
self.list.append(pygame.Rect(self.get_rand_x() , self.get_rand_y() , self.size , self.size))
return
def get_rand_x(self):
return random.randint(0 , WIDTH - self.size)
def get_rand_y(self):
return random.randint(70 , HEIGHT - self.size)
enemy = Enemy()
enemy.add_enemy()
print(enemy.list)
总的来说,我对 pygame 和 python 很陌生,我正在尝试制作一款简单的游戏。在代码中,我在这里创建了一个 class Enemy 和一个它的实例。
class Enemy:
def __init__(self):
self.list = []
self.size = 20
self.x = random.randint(0 , WIDTH - self.size)
self.y = random.randint(70 , HEIGHT - self.size)
self.new_enemy = pygame.Rect(self.x , self.y , self.size , self.size)
def add_enemy(self):
if score % 5 == 0 and score != 0:
self.list.append(self.new_enemy)
print(enemy.list)
#to see if it works
enemy = Enemy()
但是当我 运行 enemy.add_enemy() 时,当 score == 5(或 10、15 等)时,它不仅会向列表中添加一个项目,还会添加大量项目。有没有解决的办法?帮助将不胜感激。
所以我对此仍有疑问,因为我没有更多的代码。
但基本上这里发生的是 self.newenemy
被删除和创建,然后在 add_enemy
中你 运行 self.list.append(self.newenemy)
本质上是将相同的对象添加到列表。所以这个列表有 n 个对象,但它们都是“相同的”,而不是复制或重复,而是完全相同。所以如果你要“杀死”list[0]
敌人,他们都会死。
编辑:此外,您的 randint
将始终生成相同的值,因此一旦创建了 class,x 和 y 将始终相同。
尝试将您的代码更改为类似这样的内容。注意附加完成后 add_enemy
中的 return。
class Enemy:
def __init__(self):
self.list = []
self.size = 20
def add_enemy(self):
if score % 5 == 0 and score != 0:
self.list.append(pygame.Rect(self.get_rand_x() , self.get_rand_y() , self.size , self.size))
return
def get_rand_x(self):
return random.randint(0 , WIDTH - self.size)
def get_rand_y(self):
return random.randint(70 , HEIGHT - self.size)
enemy = Enemy()
enemy.add_enemy()
print(enemy.list)