File: objship.py

package info (click to toggle)
solarwolf 1.5%2Bdfsg1-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,656 kB
  • sloc: python: 5,353; ansic: 159; makefile: 102; pascal: 50; sh: 27
file content (136 lines) | stat: -rw-r--r-- 3,885 bytes parent folder | download | duplicates (2)
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