我正在做一个游戏。现在,游戏将需要生成特定数量的特定类型的敌人。为了优化起见,我决定将它们全部放入一个列表/数组中。虽然我完全知道如何检查特定对象是否在数组中,但是我不确定如何检查其中有多少。游戏以前曾按预期工作,但那是在我尝试将其放入一个列表之前。
我目前正在尝试使用“检查”模块来执行此操作。 香港专业教育学院已经尝试过使用循环。即
for enemy in entities:
if isinstance(enemy,Enemy)#"Enemy" is a class
#do something worthwhile
列表
Entities = []
控制生成的代码。
if len(entities) == 0:
global enemypresent,enemyApresent,alienApresent
enemypresent = 0
enemyApresent = 0
alienApresent = 0
for enemy in entities:
if isinstance(enemy,Enemy):
enemypresent += 1
if isinstance(enemy,EnemyAttack):
enemyApresent += 1
#if enemypresent < 5:
# entities.append(Enemy(random.randint(0,WIDTH-70),-50,70,70))
if enemyApresent == 0:
if random.randint(0,100) >= 75:
entities.append(AlienAttack(random.randint(0,WIDTH-70),-50,70,70))
else:
entities.append(EnemyAttack(random.randint(0,WIDTH-70),-50,70,70))
我希望代码能够检查列表中有多少个特定对象。即“实体列表中有4个常规敌人” “实体列表中有5个攻击敌人”等
也欢迎其他选择。
答案 0 :(得分:0)
在他的评论中,我会接受@furas的建议,以列出单独的列表,或者最好列出单独的pygame.sprite.Group
。
但是,如果要将它们保留在一个列表中,则可以通过这种方式计算不同的类型:
enemypresent = len([i for i in entities if type(i).__name__ == 'Enemy'])
enemyApresent = len([i for i in entities if type(i).__name__ == 'EnemyAttack'])
,依此类推,针对您拥有的每种“类型”敌人。请注意,我避免使用isinstance(i, Enemy)
和isinstance(i, EnemyAttack)
,因为引自文档:
如果对象参数是classinfo参数或其(直接,间接或虚拟)子类的实例,则
isinstance()
返回true。
因此,例如,如果EnemyAttack
是Enemy
的子代,则第一行将两者都计算在内,这不是我想的。
另一句话:在我的解决方案中,您不需要循环,但是通常不编辑要迭代的列表。在解决方案中,应将if enemyApresent == 0:
块保留在循环之外。