import os.path

import pygame
import random
import time
WIDTH,HEIGHT = 800,800
FPS = 60
ram = (WIDTH / 2,HEIGHT / 2)
potroni = 5
count = 0
b = 5
helph = False
hizni = 1
count2 = 40
sec = 40
dep = 30
spe = -3
ver = 180
game_folder = os.path.dirname(__file__)
img_folder = os.path.join(game_folder,'img')
player_img = pygame.image.load(os.path.join(img_folder, 'gugigaga.png'))
playere_img = pygame.image.load(os.path.join(img_folder, 'ng.png'))
plaerer_img = pygame.image.load(os.path.join(img_folder, 'dnd.png'))
pygame.transform.scale(player_img, (3, 3))

class Crevplr(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = player_img
        self.rect = self.image.get_rect()
        self.rect.center = (WIDTH / 2,HEIGHT / 2)
        self.dir = 0
        self.sp = 5
        self.spx = 0
        self.spy = 0
    def update(self):
        self.spx = 0
        self.spy = 5
        keystate = pygame.key.get_pressed()
        if keystate[pygame.K_w]:
            self.spy = -2
        if keystate[pygame.K_s]:
            self.spy = 2
        if keystate[pygame.K_d]:
            self.spx = 2
        if keystate[pygame.K_a]:
            self.spx = -2
        self.rect.x += self.spx
        self.rect.y += self.spy
        if self.rect.right > WIDTH:
            self.rect.right = HEIGHT
        if self.rect.left < 0:
            self.rect.left = 0
        if self.rect.bottom > HEIGHT:
            self.rect.bottom = HEIGHT
    def shoot(self):
        bull = Bul(self.rect.centerx, self.rect.top)
        all_sprites.add(bull)
        bulls.add(bull)
        self.rect.move_ip(0,dep)
class Bul(pygame.sprite.Sprite):
    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((10, 20))
        self.image.fill((100, 100, 0))
        self.rect = self.image.get_rect()
        self.rect.bottom = y
        self.rect.centerx = x
        self.speedy = spe
    def update(self):
        self.rect.y += self.speedy
        if self.rect.bottom < 0:
            self.rect.move_ip(1,800)


class Boost(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = plaerer_img
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(0,800)
        self.rect.y = random.randrange(0,800)

class Ship(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = playere_img
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(0, WIDTH - self.rect.width)
        self.rect.y = random.randrange(-50,-30)
        self.speedx = random.randint(-8,8)
        self.speedy = random.randint(2,8)
    def update(self):
        self.rect.x += self.speedx
        self.rect.y += self.speedy
        if self.rect.top > HEIGHT + 10 or self.rect.left > WIDTH + 30 or self.rect.right < -30:
            self.rect.x = random.randrange(0, WIDTH - self.rect.width)
            self.rect.y = random.randrange(-50, -30)
            self.speedx = random.randint(0, 1)
            self.speedy = random.randint(1, 3)



pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()

all_sprites = pygame.sprite.Group()
ships = pygame.sprite.Group()
bulls = pygame.sprite.Group()
boosts = pygame.sprite.Group()
cr = Crevplr()
bosts = Boost()
boosts.add(bosts)
all_sprites.add(cr)
all_sprites.add(bosts)
for i in range(30):
    shp = Ship()
    all_sprites.add(shp)
    ships.add(shp)

run = True
while run:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                if potroni != 0:
                    if count2 == 0:
                        potroni -= 1
                        count2 = sec
                        cr.shoot()
    if count2 != 0:
        count2 -= 1
    if potroni == 0:
        count +=1
    if potroni == 0 and count >= ver:
        count = 0
        potroni += b


    all_sprites.update()

    hits = pygame.sprite.spritecollide(cr, ships, True,)
    if hits:
        run = False

    hits = pygame.sprite.groupcollide(ships, bulls, helph, True)
    for hit in hits:
        helph = False
        hizni -= 1
        if hizni == 0:
            helph = True
            # for i in range(0,2):
            #     cr.shoot()
            for i in range (0,2):
                m = Ship()
                all_sprites.add(m)
                ships.add(m)
                hizni = 3
    hits = pygame.sprite.spritecollide(cr, boosts, True)
    for hit in hits:
        randoms = random.randint(1,6)
        if randoms == 1:
            b += 2
        if randoms == 2:
            sec -= 4
        if randoms == 3:
            dep -= 5
        if randoms == 4:
            spe -= 1
        if randoms == 5:
            potroni += 10
        if randoms == 6:
            ver -=5

        d = Boost()
        all_sprites.add(d)
        boosts.add(d)


    screen.fill((255, 0, 0))
    all_sprites.draw(screen)
    pygame.display.flip()

pygame.quit()


#wwaw a  a           aw a aa aaaaadddddddddd          dddww wwwwwwwwwwwwwa