1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
#player ship class
import pygame
from pygame.locals import *
import game, gfx
upimage = None
shieldbg = None
bulletbg = None
shipimages = []
def load_game_resources():
#load ship graphics
global upimage, shipimages, shieldbg, bulletbg
upimage = gfx.load('ship-up.png')
anim = []
for img in gfx.animstrip(gfx.load('ship-up-boost1.png')):
imgs = [img]
for i in range(90, 359, 90):
imgs.append(pygame.transform.rotate(img, i))
anim.append(imgs)
shipimages.extend(zip(*anim))
anim = []
for img in gfx.animstrip(gfx.load('ship-up-boost2.png')):
imgs = [img]
for i in range(90, 359, 90):
imgs.append(pygame.transform.rotate(img, i))
anim.append(imgs)
shipimages.extend(zip(*anim))
shieldbg = gfx.animstrip(gfx.load('bonus-shield.png'))
bulletbg = gfx.animstrip(gfx.load('bonus-bullet.png').convert_alpha())
class Ship:
def __init__(self):
self.move = [0, 0]
self.unmoved = 1
self.turbo = game.thruster
self.image = 0
self.frame = 0.0
self.rect = shipimages[0][0].get_rect()
self.lastrect = None
self.dead = 0
self.active = 0
self.speeds = game.ship_slowspeed, game.ship_fastspeed
self.pos = list(self.rect.topleft)
self.shield = 0
self.bullet = 0
def start(self, pos):
self.rect.topleft = pos
self.pos = list(self.rect.topleft)
self.unmoved = 1
self.active = 1
self.dead = 0
self.move = [0, 0]
self.turbo = game.thruster
self.image = 0
self.shield = 0
def erase(self, background):
if self.lastrect:
background(self.lastrect)
if self.dead:
gfx.dirty(self.lastrect)
def draw(self, gfx):
frame = int(self.frame) % 4
if self.shield:
gfx.surface.blit(shieldbg[self.shield-1], self.rect)
elif self.bullet:
gfx.surface.blit(bulletbg[self.bullet-1], self.rect)
if self.unmoved:
img = upimage
else:
img = shipimages[self.image + (self.turbo*4)][frame]
gfx.surface.blit(img, self.rect)
gfx.dirty2(self.rect, self.lastrect)
self.lastrect = Rect(self.rect)
def tick(self, speedadjust = 1.0):
self.frame += speedadjust
speed = self.speeds[self.turbo]
if self.shield == 1:
speed = int(speed * speedadjust * 1.3)
else:
speed = int(speed * speedadjust)
self.pos[0] += self.move[0] * speed
self.pos[1] += self.move[1] * speed
self.rect.topleft = self.pos
if self.rect.top < game.arena.top:
self.rect.top = game.arena.top
self.pos[1] = float(self.rect.top)
self.move[1] = 0
elif self.rect.bottom > game.arena.bottom:
self.rect.bottom = game.arena.bottom
self.pos[1] = float(self.rect.top)
self.move[1] = 0
if self.rect.left < game.arena.left:
self.rect.left = game.arena.left
self.pos[0] = float(self.rect.left)
self.move[0] = 0
elif self.rect.right > game.arena.right:
self.rect.right = game.arena.right
self.pos[0] = float(self.rect.left)
self.move[0] = 0
def cmd_left(self):
self.move = [-1, 0]
self.image = 1
self.unmoved = 0
def cmd_up(self):
self.move = [0, -1]
self.image = 0
self.unmoved = 0
def cmd_right(self):
self.move = [1, 0]
self.image = 3
self.unmoved = 0
def cmd_down(self):
self.move = [0, 1]
self.image = 2
self.unmoved = 0
def cmd_turbo(self, onoff):
if game.thruster:
onoff = not onoff
self.turbo = onoff
|