-
Notifications
You must be signed in to change notification settings - Fork 1
/
flagpole.py
128 lines (101 loc) · 3.86 KB
/
flagpole.py
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
import pygame as pg
from .. import setup
from .. import constants as c
class Flag(pg.sprite.Sprite):
"""Flag on top of the flag pole at the end of the level"""
def __init__(self, x, y):
super(Flag, self).__init__()
self.sprite_sheet = setup.GFX['item_objects']
self.setup_images()
self.image = self.frames[0]
self.rect = self.image.get_rect()
self.rect.right = x
self.rect.y = y
self.state = c.TOP_OF_POLE
def setup_images(self):
"""Sets up a list of image frames"""
self.frames = []
self.frames.append(
self.get_image(128, 32, 16, 16))
def get_image(self, x, y, width, height):
"""Extracts image from sprite sheet"""
image = pg.Surface([width, height])
rect = image.get_rect()
image.blit(self.sprite_sheet, (0, 0), (x, y, width, height))
image.set_colorkey(c.BLACK)
image = pg.transform.scale(image,
(int(rect.width * c.BRICK_SIZE_MULTIPLIER),
int(rect.height * c.BRICK_SIZE_MULTIPLIER)))
return image
def update(self, *args):
"""Updates behavior"""
self.handle_state()
def handle_state(self):
"""Determines behavior based on state"""
if self.state == c.TOP_OF_POLE:
self.image = self.frames[0]
elif self.state == c.SLIDE_DOWN:
self.sliding_down()
elif self.state == c.BOTTOM_OF_POLE:
self.image = self.frames[0]
def sliding_down(self):
"""State when Mario reaches flag pole"""
self.y_vel = 5
self.rect.y += self.y_vel
if self.rect.bottom >= 485:
self.state = c.BOTTOM_OF_POLE
class Pole(pg.sprite.Sprite):
"""Pole that the flag is on top of"""
def __init__(self, x, y):
super(Pole, self).__init__()
self.sprite_sheet = setup.GFX['tile_set']
self.setup_frames()
self.image = self.frames[0]
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
def setup_frames(self):
"""Create the frame list"""
self.frames = []
self.frames.append(
self.get_image(263, 144, 2, 16))
def get_image(self, x, y, width, height):
"""Extracts image from sprite sheet"""
image = pg.Surface([width, height])
rect = image.get_rect()
image.blit(self.sprite_sheet, (0, 0), (x, y, width, height))
image.set_colorkey(c.BLACK)
image = pg.transform.scale(image,
(int(rect.width * c.BRICK_SIZE_MULTIPLIER),
int(rect.height * c.BRICK_SIZE_MULTIPLIER)))
return image
def update(self, *args):
"""Placeholder for update, since there is nothing to update"""
pass
class Finial(pg.sprite.Sprite):
"""The top of the flag pole"""
def __init__(self, x, y):
super(Finial, self).__init__()
self.sprite_sheet = setup.GFX['tile_set']
self.setup_frames()
self.image = self.frames[0]
self.rect = self.image.get_rect()
self.rect.centerx = x
self.rect.bottom = y
def setup_frames(self):
"""Creates the self.frames list"""
self.frames = []
self.frames.append(
self.get_image(228, 120, 8, 8))
def get_image(self, x, y, width, height):
"""Extracts image from sprite sheet"""
image = pg.Surface([width, height])
rect = image.get_rect()
image.blit(self.sprite_sheet, (0, 0), (x, y, width, height))
image.set_colorkey(c.BLACK)
image = pg.transform.scale(image,
(int(rect.width * c.SIZE_MULTIPLIER),
int(rect.height * c.SIZE_MULTIPLIER)))
return image
def update(self, *args):
pass