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.
126 lines
3.7 KiB
126 lines
3.7 KiB
|
|
import pygame as pg
|
|
from .. import setup
|
|
from .. import constants as c
|
|
|
|
|
|
class Digit(pg.sprite.Sprite):
|
|
"""Individual digit for score"""
|
|
def __init__(self, image):
|
|
super(Digit, self).__init__()
|
|
self.image = image
|
|
self.rect = image.get_rect()
|
|
|
|
|
|
class Score(object):
|
|
"""Scores that appear, float up, and disappear"""
|
|
def __init__(self, x, y, score, flag_pole=False):
|
|
self.x = x
|
|
self.y = y
|
|
if flag_pole:
|
|
self.y_vel = -4
|
|
else:
|
|
self.y_vel = -3
|
|
self.sprite_sheet = setup.GFX['item_objects']
|
|
self.create_image_dict()
|
|
self.score_string = str(score)
|
|
self.create_digit_list()
|
|
self.flag_pole_score = flag_pole
|
|
|
|
|
|
def create_image_dict(self):
|
|
"""Creates the dictionary for all the number images needed"""
|
|
self.image_dict = {}
|
|
|
|
image0 = self.get_image(1, 168, 3, 8)
|
|
image1 = self.get_image(5, 168, 3, 8)
|
|
image2 = self.get_image(8, 168, 4, 8)
|
|
image4 = self.get_image(12, 168, 4, 8)
|
|
image5 = self.get_image(16, 168, 5, 8)
|
|
image8 = self.get_image(20, 168, 4, 8)
|
|
image9 = self.get_image(32, 168, 5, 8)
|
|
image10 = self.get_image(37, 168, 6, 8)
|
|
image11 = self.get_image(43, 168, 5, 8)
|
|
|
|
self.image_dict['0'] = image0
|
|
self.image_dict['1'] = image1
|
|
self.image_dict['2'] = image2
|
|
self.image_dict['4'] = image4
|
|
self.image_dict['5'] = image5
|
|
self.image_dict['8'] = image8
|
|
self.image_dict['3'] = image9
|
|
self.image_dict['7'] = image10
|
|
self.image_dict['9'] = image11
|
|
|
|
|
|
def get_image(self, x, y, width, height):
|
|
"""Extracts image from sprite sheet"""
|
|
image = pg.Surface([width, height]).convert()
|
|
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 create_digit_list(self):
|
|
"""Creates the group of images based on score received"""
|
|
self.digit_list = []
|
|
self.digit_group = pg.sprite.Group()
|
|
|
|
for digit in self.score_string:
|
|
self.digit_list.append(Digit(self.image_dict[digit]))
|
|
|
|
self.set_rects_for_images()
|
|
|
|
|
|
def set_rects_for_images(self):
|
|
"""Set the rect attributes for each image in self.image_list"""
|
|
for i, digit in enumerate(self.digit_list):
|
|
digit.rect = digit.image.get_rect()
|
|
digit.rect.x = self.x + (i * 10)
|
|
digit.rect.y = self.y
|
|
|
|
|
|
def update(self, score_list, level_info):
|
|
"""Updates score movement"""
|
|
for number in self.digit_list:
|
|
number.rect.y += self.y_vel
|
|
|
|
if score_list:
|
|
self.check_to_delete_floating_scores(score_list, level_info)
|
|
|
|
if self.flag_pole_score:
|
|
if self.digit_list[0].rect.y <= 120:
|
|
self.y_vel = 0
|
|
|
|
|
|
def draw(self, screen):
|
|
"""Draws score numbers onto screen"""
|
|
for digit in self.digit_list:
|
|
screen.blit(digit.image, digit.rect)
|
|
|
|
|
|
def check_to_delete_floating_scores(self, score_list, level_info):
|
|
"""Check if scores need to be deleted"""
|
|
for i, score in enumerate(score_list):
|
|
if int(score.score_string) == 1000:
|
|
if (score.y - score.digit_list[0].rect.y) > 130:
|
|
score_list.pop(i)
|
|
|
|
else:
|
|
if (score.y - score.digit_list[0].rect.y) > 75:
|
|
score_list.pop(i)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|