import pygame
import os
import random

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 = 0
colorG = 255
colorB = 0

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.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
        if keystate[pygame.K_RIGHT]:
            self.speedx += 8
        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()
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(10000):
    m = Mobs()
    allsprites.add(m)
    mobgroup.add(m)

running = True
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()

    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:
        colorR += 1
        colorG -= 1
        if colorR > 254 or colorG < 2:
            running = False
        else:
            player.image.fill((colorR, colorG, colorB))
    screen.fill(black)
    allsprites.draw(screen)
    pygame.display.flip()
    clock.tick(fps)

pygame.quit()
