def spawn_ship_explosion(self, ms_per_frame): explosion_images = [par_dir() + '/images/explosion%i.png' % i for i in range(1, 11)] self.explosion = Animation( self.screen, self.ship.pos, explosion_images, ms_per_frame, ms_per_frame * 10)
import pygame from pygame.sprite import Sprite from vec2d import Vec2d from utils import par_dir IMAGE_DIR = par_dir() + '/images/bullet.png' BULLET_SPEED = 0.5 RADIUS = 4 WHITE = pygame.Color('white') class Bullet(Sprite): def __init__( self, screen, init_position, init_direction): Sprite.__init__(self) self.screen = screen self.screen_width, self.screen_height = self.screen.get_size() self.pos = Vec2d(init_position) self.dir = Vec2d(init_direction) self.image = self.base_image = pygame.image.load(IMAGE_DIR) # Prevent certain bug self.update_rect()
import pygame from pygame.sprite import Sprite import random from vec2d import Vec2d from utils import par_dir ASTEROID_SPEED = 0.15 IMAGE_DIR = par_dir() + "/images/asteroid.png" class Asteroid(Sprite): def __init__(self, screen): Sprite.__init__(self) self.screen = screen self.screen_width, self.screen_height = self.screen.get_size() self.image = self.base_image = pygame.image.load(IMAGE_DIR) self.time_alive = 0.0 self.gen_position() self.gen_direction() # Prevent certain bug self.update_rect() def gen_position(self): DELTA = 10
import pygame from asteroid import Asteroid from vec2d import Vec2d from utils import par_dir ASTEROID_SPEED = 0.1 IMAGE_DIR = par_dir() + '/images/red_asteroid.png' ROTATE_DELTA = 4 class HomingAsteroid(Asteroid): def __init__(self, screen): super(HomingAsteroid, self).__init__(screen) self.image = self.base_image = pygame.image.load(IMAGE_DIR) self.update_rect() def update(self, time_passed, ship_pos): displacement = Vec2d( time_passed * ASTEROID_SPEED * self.dir.x, time_passed * ASTEROID_SPEED * self.dir.y) self.pos += displacement angle_needed = (ship_pos - self.pos).get_angle() asteroid_angle = (self.dir.get_angle()) difference = angle_needed - asteroid_angle
import pygame from pygame.sprite import Sprite from utils import Timer, par_dir from vec2d import Vec2d SHIP_SPEED = 0.1 MAX_HEALTH = 3 IMAGE_DIR = par_dir() + "/images/ship.png" TRANS_IMAGE_DIR = par_dir() + "/images/transparent_ship.png" POS_DELTA = 2 ANGLE_DELTA = 5 key_to_function = { pygame.K_j: (lambda x: x.translate((-POS_DELTA, 0))), pygame.K_l: (lambda x: x.translate((POS_DELTA, 0))), pygame.K_i: (lambda x: x.translate((0, -POS_DELTA))), pygame.K_k: (lambda x: x.translate((0, POS_DELTA))), pygame.K_a: (lambda x: x.rotate(-ANGLE_DELTA)), pygame.K_d: (lambda x: x.rotate(ANGLE_DELTA)), } class Ship(Sprite): def __init__(self, screen, init_position): Sprite.__init__(self) self.screen = screen
import pygame from vec2d import Vec2d from utils import par_dir IMAGE_DIR = par_dir() + "/images/gameover.png" class GameOverText(object): def __init__(self, screen): self.screen = screen self.screen_width, self.screen_height = self.screen.get_size() self.pos = Vec2d(self.screen_width/2, self.screen_height/2) self.original_image = pygame.image.load(IMAGE_DIR).convert_alpha() self.image = self.original_image.copy() self.alpha = 0 self.alpha_delta = 5 # Make sure starting image has desired alpha value self.reset_image() def reduce_alpha(self): self.alpha = min(self.alpha + self.alpha_delta, 255) self.reset_image() def reset_image(self): self.image = self.original_image.copy() self.image.fill((255, 255, 255, self.alpha), None, pygame.BLEND_RGBA_MULT)