Пример #1
0
    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)
Пример #2
0
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()
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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)