2015-10-26 4 views
-2

У меня есть Таже проблему, как этот джентльмен здесь: Health for each enemy, и кажется, что он нашел ответ, который работал на него. Тем не менее, этот ответ для Java-кода, и я использую Pygame, поэтому я не понимаю, как применять то, что они сделали с моим кодом Pygame.Как сделать HP переменную экземпляра в Pygame

Кто-нибудь знает, как сделать так, чтобы каждый враг в моей игре не имел одну и ту же сумму в hp? Он узнал, что ему нужно сделать свою переменную класса мгновенной, но я не знаю, как это сделать.

Это код зомби. Обратите внимание, как установлено значение л.с для всего класса:

class Enemy(pygame.sprite.Sprite): 
    def __init__(self, color): 
     super().__init__() 
     self.image = pygame.Surface([20, 20]) 
     self.image.fill(color) 
     self.rect = self.image.get_rect() 
     self.pos_x = self.rect.x = random.randrange(35, screen_width - 35) 
     self.pos_y = self.rect.y = random.randrange(35, screen_height - 135) 

     self.hp = 3 

Вот код столкновения пули удара-а-зомби:

for bullet in bullet_list: 
      block_hit_list = pygame.sprite.spritecollide(bullet, zombie_list, False) 
      for i in block_hit_list: 
       zombie.hp -= 1 
       bullet.kill() 
       if self.hp <= 0: 
        pygame.sprite.spritecollide(bullet, zombie_list, True) 
        bullet.kill() 
        score += 100 
+0

В коде, который вы указываете, 'hp' * является атрибутом экземпляра *. Так в чем ваш вопрос ?! – jonrsharpe

ответ

1

Enemy Вашего класса хорошо. Поскольку вы используете self.hp = 3, hp уже является атрибутом экземпляра, как вы хотите.

Но ваш код столкновения кажется неправильным. Я думаю, это должно быть что-то вроде

for bullet in bullet_list: 
    # get a list of zombies that are hit 
    zombies = pygame.sprite.spritecollide(bullet, zombie_list, False) 

    # for each of those zombies 
    for z in zombies: 
     z.hp -= 1   # reduce the health of that very zombie 
     bullet.kill() 
     if z.hp <= 0:  # and if the health is <= 0 
      z.kill()  # remove it 
      score += 100 # and get some points 
+1

Лень мой человек, вы сделали это снова. Спасибо чувак! Теперь я понимаю, что когда у меня было «для z в зомби: zombie.hp - = 1», я менял весь класс зомби hp, но когда я помещал 'z.hp - = 1', то он меняет этот конкретный объект в списке зомби , Спасибо огромное! Я чувствую себя настолько глупо, что это было явно очевидно, ха-ха, мой плохой! – Tanman1276