You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
SuperMario/pythonProject1/data/components/flagpole.py

140 lines
3.9 KiB

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