Как создавть спавн врагов по очереди в Pygame?
У меня есть такая часть кода:
def zombie_wave(zombie):
zombie_wave = []
if not zombie_wave:
zombie.draw()
zombie_wave.append('zombie')
Идея заключалась в том, чтобы был список, в котором существовали мобы:
- Когда врагов нет - появляется один враг и добавляется в список.
- Когда погибается - элемент удаляется и появляется новый.
Но у меня что-то не сходится. Вот код самих врагов:
import pygame, random
class Zombie(pygame.sprite.Sprite):
def __init__(self, screen):
super(Zombie, self).__init__()
self.screen = screen
self.image = pygame.image.load('assets/zombie.png')
self.rect = self.image.get_rect()
self.rect.x = 800
self.rect.y = random.randint(0, 400)
self.x = float(self.rect.x)
self.y = float(self.rect.y)
def draw(self):
self.screen.blit(self.image, self.rect)
Вот код основной программы запуска:
import pygame, controls
from turret import Turret
from pygame.sprite import Group
from zombie import Zombie
def start():
pygame.init()
screen = pygame.display.set_mode((900, 500))
pygame.display.set_caption("Убийца зомбаков")
background = (0, 0, 0)
turret = Turret(screen)
bullets = Group()
zombie = Zombie(screen)
while True:
controls.events(screen, turret, bullets)
turret.update_pos()
controls.zombie_wave(zombie)
controls.update(background, screen, turret, zombie, bullets)
controls.update_bullets(bullets)
start()
Ответы (1 шт):
Автор решения: Alexander Chernin
→ Ссылка
Создайте какой-нибудь класс для контроля за зомбаками.
Я так понимаю этот класс надо разместить в модуле controls:
class Zombies:
zombies = {}
screen = None
def __init__(self, screen):
self.screen = screen
# Зомби убит - вычеркиваем
def killed(self, zombie):
# id(zombie) - получение адреса объекта
del self.zombies[id(zombie)]
# создаем нового зомби
def create(self):
z = Zombie(self.screen)
self.zombies[id(z)] = z
z.draw()
# Все зомби в наличии
def all(self):
return self.zombies.values()
...
def start():
pygame.init()
screen = pygame.display.set_mode((900, 500))
# Создаем логово зомбаков раньше главного цикла приложения
# и теперь никто, никуда не денется
zombies = controls.Zombies(screen)
while True:
#...