class SpriteManager(object):
    """ A basic manager for adding sprites to the game."""
    def __init__(self, sheet_json_file):
        self.sheet = SpriteSheet(sheet_json_file)
        self.groups = {}
        for g in ['background', 'friendly', 'enemy', 'particle', 'ui']:
            self.groups[g] = pygame.sprite.RenderUpdates()
        self.screen = pygame.display.get_surface()
        
    def add_star(self):
        star_speed = uniform(0.1, 0.5)
        star_x_location = randint(0,self.screen.get_width())
        star_surface = self.sheet.new_surface('star_y_1')
        new_star = StarSprite(star_surface, star_x_location, star_speed)
        self.groups['background'].add(new_star)
        return new_star
                
    def add_ship(self):
        ship_surface = self.sheet.new_surface('ship')
        new_ship = ShipSprite(ship_surface, 
            self.screen.get_width()/2, 
            self.screen.get_height()-40)
        self.groups['friendly'].add(new_ship)
        return new_ship
    
    def add_bullet(self, bullet_x, bullet_y):
        bullet_surface = self.sheet.new_surface('bullet')
        new_bullet = BulletSprite(bullet_surface, 
                                          bullet_x, bullet_y, -0.8)
        self.groups['friendly'].add(new_bullet)
        return new_bullet
                
    def add_random_enemy(self):
        enemy_speed = uniform(0.2, 0.5)
        enemy_x_location = randint(0, self.screen.get_width())
        if randint(1,2) == 1:
            enemy_surface = self.sheet.new_surface('enemy_1')
            new_enemy = EnemySprite(enemy_surface, enemy_x_location, enemy_speed)
        else:
            enemy_surface = self.sheet.new_surface('enemy_2')
            new_enemy = PingPongEnemySprite(enemy_surface, enemy_x_location, 
                                            enemy_speed, self.screen.get_width())
        self.groups['enemy'].add(new_enemy)
        return new_enemy
            
    def add_explosion(self, start_x, start_y):
        explode_image = 'explode_{}'.format(randint(1,2))
        explode_surface = self.sheet.new_surface(explode_image)
        new_explode = ExplodeSprite(explode_surface, start_x, start_y)
        self.groups['particle'].add(new_explode)
        return new_explode

from random import randint

import pygame
from pygame.locals import *

from spritesheet import SpriteSheet


pygame.init()
screen = pygame.display.set_mode((500, 600))

sprite_sheet = SpriteSheet('assets/shooter_sheet.sheet')
star_surface = sprite_sheet.new_surface('star_y_1')
ship_surface = sprite_sheet.new_surface('ship')
bullet_surface = sprite_sheet.new_surface('bullet')
enemy_surface = sprite_sheet.new_surface('enemy_1')

class Star(pygame.sprite.Sprite):
    def __init__(self, surface, speed, start_x):
        pygame.sprite.Sprite.__init__(self)
        self.image = surface
        self.rect = self.image.get_rect()
        self.last_time = pygame.time.get_ticks()
        self.y = 0
        self.rect.x = start_x
        self.speed = speed
        
    def update(self):
        if self.rect.y >= 600:

from random import randint

import pygame
from pygame.locals import *

from spritesheet import SpriteSheet


pygame.init()
screen = pygame.display.set_mode((500, 600))

sprite_sheet = SpriteSheet('assets/shooter_sheet.sheet')
star_surface = sprite_sheet.new_surface('star_y_1')

class Star(pygame.sprite.Sprite):
    def __init__(self, surface, speed, start_x):
        pygame.sprite.Sprite.__init__(self)
        self.image = surface
        self.rect = self.image.get_rect()
        self.last_time = pygame.time.get_ticks()
        self.y = 0
        self.rect.x = start_x
        self.speed = speed
        
    def update(self):
        if self.rect.y >= 600:
            self.kill()
            return
        current_time = pygame.time.get_ticks()