import pygame
import os
import random

ELEFAN = (0, 0, 0)
begib = (230, 218, 166)
karii = (139, 69, 19)
mehogon = (76, 47, 39)
W, H = (1000, 500)
fps = 60

pygame.init()
pygame.mixer.init()
skrin = pygame.display.set_mode((W, H))
pygame.display.set_caption("зв демо")
cloc = pygame.time.Clock()

my = os.path.dirname(__file__)
image_folder = os.path.join(my, "img")
pl_im = pygame.image.load(os.path.join(image_folder, "m.png"))
pl_im = pygame.transform.scale(pl_im, (350, 150))

class Luw(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pl_im
        self.rect = self.image.get_rect()
        self.rect.centerx = W / 2
        self.rect.centery = H - 100
        self.spidx = 0

    def update(self):
        self.spidx = 0
        kd = pygame.key.get_pressed()
        if kd[pygame.K_a]:
            self.spidx -= 8
        if kd[pygame.K_d]:
            self.spidx += 8
        self.rect.x += self.spidx
        if self.rect.right > W + 100:
            self.rect.right = W + 100
        if self.rect.left < -100:
            self.rect.left = -100

    def shoot(self):
        bullet = puli(self.rect.centerx, self.rect.top)
        all_sprite.add(bullet)
        bullets.add(bullet)

class Mob(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 50))
        self.image.fill(karii)
        self.rect = self.image.get_rect()
        self.reset_position()  # Вызываем метод установки позиции
        self.spidx = 3

    def reset_position(self):
        """Метод для установки/сброса позиции моба"""
        self.rect.x = random.randint(0, W)
        self.rect.y = 20

    def update(self):
        self.rect.x += self.spidx
        if self.rect.right > W + 20:
            self.rect.x = 0

class puli(pygame.sprite.Sprite):
    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((10, 20))
        self.image.fill(mehogon)
        self.rect = self.image.get_rect()
        self.rect.bottom = y
        self.rect.centerx = x
        self.spidy = -10

    def update(self):
        self.rect.y += self.spidy
        if self.rect.bottom < 0:
            self.kill()

# Создаём группы спрайтов
all_sprite = pygame.sprite.Group()
mobs = pygame.sprite.Group()
bullets = pygame.sprite.Group()

# Создаём объекты
luw = Luw()
all_sprite.add(luw)

# Добавляем несколько мобов
for i in range(8):
    mob = Mob()
    all_sprite.add(mob)
    mobs.add(mob)

r = True
while r:
    cloc.tick(fps)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            r = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                luw.shoot()

    # Обновляем все спрайты
    all_sprite.update()

    # Проверяем столкновения пуль с мобами
    hits = pygame.sprite.groupcollide(mobs, bullets, True, True)

    # Возрождение уничтоженных мобов
    for mob in hits:
        new_mob = Mob()  # Создаём нового моба
        all_sprite.add(new_mob)  # Добавляем в общую группу
        mobs.add(new_mob)   # Добавляем в группу мобов

    # Отрисовка
    skrin.fill(ELEFAN)
    all_sprite.draw(skrin)
    pygame.display.flip()

pygame.quit()
