import pygame
import os
import random

gamefolder = os.path.dirname(__file__)
imgfolder = os.path.join(gamefolder, "img")

oldgreen = (92, 128, 85)
oldorange = (173, 121, 36)
orange = (237, 161, 9)
oldpurple = (80, 46, 99)
green = (74, 227, 14)
red = (227, 14, 14)
blue = (16, 16, 227)
black = (0, 0, 0)
white = (255, 255, 255)

width = 480
height = 480
fps = 30

colorR = 255
colorG = 255
colorB = 255
score = 255

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        #self.image = pygame.Surface((30, 30))
        #self.image.fill((colorR, colorG, colorB))
        self.image = player_img
        self.rect = self.image.get_rect()
        self.rect.centerx = width/2
        self.rect.bottom = height - 10
        self.speedx = 0
        self.speedy = 0
    def update(self):
        self.speedx = 0
        keystate = pygame.key.get_pressed()
        if keystate[pygame.K_LEFT]:
            self.speedx -= 8
            # self.image = playerimglv
        if keystate[pygame.K_RIGHT]:
            self.speedx += 8
            # self.image = playerimgpr
        # if self.speedx == 0:
        #     self.image = player_img
        self.rect.x += self.speedx
        if self.rect.right > width:
            self.rect.right = width
        if self.rect.left < 0:
            self.rect.left = 0
    def shoot(self):
        bullet = Bullet(self.rect.centerx, self.rect.top)
        allsprites.add(bullet)
        bullets.add(bullet)
class Bullet(pygame.sprite.Sprite):
    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((10, 20))
        self.image.fill((179, 250, 12))
        self.rect = self.image.get_rect()
        self.rect.bottom = y
        self.rect.centerx = x
        self.speedy = -10
    def update(self):
        self.rect.y += self.speedy
        if self.rect.bottom < 0:
            self.kill()
class Mobs(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((20, 20))
        self.image.fill((random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255)))
        self.rect = self.image.get_rect()

        self.rect.x = random.randrange(width)
        self.rect.y = random.randrange(-100, -40)
        self.speedy = random.randrange(4, 8)
        self.speedx = random.randrange(-4, 4)

    def update(self):
        self.rect.y += self.speedy
        self.rect.x += self.speedx
        if self.rect.top > height + 10:
            self.rect.x = random.randrange(width)
            self.rect.y = random.randrange(-100, -40)
            self.speedy = random.randrange(4, 8)
            self.speedx = random.randrange(0, 4)
        if self.rect.right > width + 20 or self.rect.left > width + 50:
            self.rect.x = random.randrange(width)
            self.rect.y = random.randrange(-100, -40)
            self.speedy = random.randrange(4, 8)
            self.speedx = random.randrange(-4, 4)
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("my game")
clock = pygame.time.Clock()

player_img = pygame.image.load(os.path.join(imgfolder, "rguyszadi.png"))
player_img = pygame.transform.scale(player_img, (100, 100))
# playerimgpr = pygame.image.load(os.path.join(imgfolder, "rguypravo.png"))
# playerimgpr = pygame.transform.scale(player_img, (100, 100))
# playerimglv = pygame.image.load(os.path.join(imgfolder, "rguylevo.png"))
# playerimglv = pygame.transform.scale(player_img, (100, 100))
allsprites = pygame.sprite.Group()
bullets = pygame.sprite.Group()
mobgroup = pygame.sprite.Group()
player = Player()
playergroup = pygame.sprite.Group()
playergroup.add(player)
allsprites.add(player)

for i in range(1000):
    m = Mobs()
    allsprites.add(m)
    mobgroup.add(m)

running = True
colortext = (255, 255, 255)
while running:
    clock.tick(fps)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                player.shoot()

    allsprites.update()



    fontname = pygame.font.match_font('arial')
    def drawtext(surf,text,size,x,y):
        font = pygame.font.Font(fontname, size)
        textsurface = font.render(text, False, colortext)
        textrect = textsurface.get_rect()
        textrect.midtop = (x,y)
        surf.blit(textsurface, textrect)


    hits = pygame.sprite.groupcollide(mobgroup, bullets, True, False)
    for hit in hits:
        m = Mobs()
        allsprites.add(m)
        mobgroup.add(m)

    hits2 = pygame.sprite.groupcollide(mobgroup, playergroup, True, False)
    for hit in hits2:
        colorB -= 1
        colorG -= 1
        score -= 1
        m = Mobs()
        allsprites.add(m)
        mobgroup.add(m)
        if colorB < 1 or colorG < 1:
            running = False
        else:
            colortext = (colorR, colorG, colorB)
    screen.fill(black)
    drawtext(screen, str(score), 40, 240, 15)

    allsprites.draw(screen)
    pygame.display.flip()
    clock.tick(fps)

pygame.quit()
