def handle_event_focused(self, event, data): if event.type == pygame.KEYDOWN: if event.key == pygame.K_TAB and self.focus_group: self.focus_group.next_focus(self) elif event.key == pygame.K_RETURN and self.on_enter: self.on_enter() else: ItemText.handle_event_focused(self, event, data) else: ItemText.handle_event_focused(self, event, data)
def __init__(self, stage, left, top, src, value): self.stage = stage image = assets.load_image(src) self.item = ItemImage(left, top, image) self.item.add_event_handler(ItemEvent.CLICK, self.handle_click) self.text = ItemText(left, top, stage.font, 0, str(value), width=self.item.get_width(), height=self.item.get_height(), h_align=2, v_align=2) self.value = value
class Asteroid(): def __init__(self, stage, left, top, src, value): self.stage = stage image = assets.load_image(src) self.item = ItemImage(left, top, image) self.item.add_event_handler(ItemEvent.CLICK, self.handle_click) self.text = ItemText(left, top, stage.font, 0, str(value), width=self.item.get_width(), height=self.item.get_height(), h_align=2, v_align=2) self.value = value def set_left(self, left): self.item.set_left(left) self.text.set_left(left) def set_top(self, top): self.item.set_top(top) self.text.set_top(top) def handle_click(self, item, args): self.stage.select(self) def exit(self): self.item.exit() self.item = None self.text.exit() self.text = None
def move_invaders(self, key, data): for item in self.text_indicators: item.set_top(item.get_top() - 2) for invader in self.invaders: invader.move(self.MOVE_INTERVAL, self.velocity) if (invader.item.get_top() > SCREEN_HEIGHT): self.remove_invader(invader) else: left = self.character.get_left() + self.data.collision.left top = self.character.get_top() + self.data.collision.top width = self.character.get_width( ) - self.data.collision.left - self.data.collision.right height = self.character.get_height( ) - self.data.collision.top - self.data.collision.bottom character = Rect(left, top, width, height) item = Rect(invader.get_left(), invader.get_top(), invader.get_width(), invader.get_height()) k = character.collidelist([item]) if k != -1: if invader.good: self.character_animation.footsteps_concrete_sound.stop( ) self.item_found_sound.play() self.character_animation.first_walking = True self.score += invader.points self.score_board.value.set_text(str(self.score)) self.top_layer.add(self.good_indicator) item = ItemText(invader.get_left(), invader.get_top(), self.font, 0, "+" + str(invader.points), h_align=2, v_align=2) self.text_indicators.append(item) self.top_layer.add(item) fade_out_item(item, True, self.GOOD_INDICATOR_INTERVAL) self.start_timer(3, self.GOOD_INDICATOR_INTERVAL, self.remove_good_indicator) else: self.stop_timer(1) self.stop_timer(2) self.game_over() return self.remove_invader(invader)
def __init__(self, *args, **kwargs): ItemText.__init__(self, *args, **kwargs) self.focus_group = None self.on_enter = None
def initialize(self): GameStage.initialize(self) stream = file('data/fonts.yaml', 'r') fonts = load(stream) for font in fonts: setattr( self, font, assets.load_font(fonts[font]['file_name'], fonts[font]['size'])) self.data = DictClass(load(file('data/memory.yaml'))) self.game_over_layer = Layer() image = assets.load_image( self.data.game_over[self.game.datastore.datamodel.character].src) item = ItemImage(self.data.game_over.left, self.data.game_over.top, image) self.game_over_layer.add(item) self.main_layer = Layer() self.top_layer = Layer() self.time = self.data.time.max self.timer = DictClass({}) image = assets.load_image(self.data.time.src) self.timer['skin'] = ItemImage(self.data.time.left, self.data.time.top, image) self.timer['value'] = ItemText(self.data.time.left, self.data.time.top, self.font, 0, format_time(self.time), width=image.get_width(), height=image.get_height(), h_align=2, v_align=2) self.top_layer.add(self.timer.skin) self.top_layer.add(self.timer.value) self.score = 0 self.score_board = DictClass({}) image = assets.load_image(self.data.score.src) self.score_board['skin'] = ItemImage(self.data.score.left, self.data.score.top, image) self.score_board['value'] = ItemText(self.data.score.left, self.data.score.top, self.font, 0, str(self.score), width=image.get_width(), height=image.get_height(), h_align=2, v_align=2) self.top_layer.add(self.score_board.skin) self.top_layer.add(self.score_board.value) self.deck = [] image_back = assets.load_image(self.data.board.card_back) for k in range(0, len(self.data.board.cards)): image = assets.load_image(self.data.board.cards[k]) self.deck.append([ Card(self, k, image, image_back), Card(self, k, image, image_back) ]) self.range = self.data.start self.cards = [] self.deal() # Load the sound self.card_flip_sound = assets.load_sound('DGI_card_flip.ogg') self.item_found_sound = assets.load_sound('DGI_item_found.ogg') self.wrong_sound = assets.load_sound('DGI_wrong.ogg') self.lose_bell_sound = assets.load_sound('DGI_lose_bell.ogg') self.lose_music_sound = assets.load_sound('DGI_lose_music.ogg')
def __init__(self, color, rollover_color, *args, **kwargs): ItemText.__init__(self, *args, **kwargs) self.color = color self.rollover_color = rollover_color self.add_event_handler(ItemEvent.MOUSE_ENTER, self.handle_mouse_enter) self.add_event_handler(ItemEvent.MOUSE_LEAVE, self.handle_mouse_leave)
def create_text(self, data): args, kwargs = self.text_arguments(data) item = ItemText(*args, **kwargs) if "max_chars" in data: item.set_max_chars(data["max_chars"]) return [item]
def initialize(self): GameStage.initialize(self) stream = file('data/fonts.yaml', 'r') fonts = load(stream) for font in fonts: setattr( self, font, assets.load_font(fonts[font]['file_name'], fonts[font]['size'])) self.data = DictClass(load(file('data/asteroids.yaml'))) self.game_over_layer = Layer() image = assets.load_image( self.data.game_over[self.game.datastore.datamodel.character].src) item = ItemImage(self.data.game_over.left, self.data.game_over.top, image) self.game_over_layer.add(item) self.main_layer = Layer() self.top_layer = Layer() self.time = self.data.time.max self.timer = DictClass({}) image = assets.load_image(self.data.time.src) self.timer['skin'] = ItemImage(self.data.time.left, self.data.time.top, image) self.timer['value'] = ItemText(self.data.time.left, self.data.time.top, self.font, 0, format_time(self.time), width=image.get_width(), height=image.get_height(), h_align=2, v_align=2) self.top_layer.add(self.timer.skin) self.top_layer.add(self.timer.value) self.score = 0 self.score_board = DictClass({}) image = assets.load_image(self.data.score.src) self.score_board['skin'] = ItemImage(self.data.score.left, self.data.score.top, image) self.score_board['value'] = ItemText(self.data.score.left, self.data.score.top, self.font, 0, str(self.score), width=image.get_width(), height=image.get_height(), h_align=2, v_align=2) self.top_layer.add(self.score_board.skin) self.top_layer.add(self.score_board.value) self.level = self.data.start self.asteroids = [] self.max_width = 0 self.max_height = 0 for a in self.data.asteroids: item = assets.load_image(a) if self.max_width < item.get_width(): self.max_width = item.get_width() if self.max_height < item.get_height(): self.max_height = item.get_height() self.max_col = int(SCREEN_WIDTH / self.max_width) self.max_row = int(SCREEN_HEIGHT / self.max_height) self.margin_left = (SCREEN_WIDTH % self.max_width) / 2 self.margin_top = (SCREEN_HEIGHT % self.max_height) / 2 # Load the sound self.click_sound = assets.load_sound('DGI_Click.ogg') self.item_found_sound = assets.load_sound('DGI_item_found.ogg') self.wrong_sound = assets.load_sound('DGI_wrong.ogg') self.lose_bell_sound = assets.load_sound('DGI_lose_bell.ogg') self.lose_music_sound = assets.load_sound('DGI_lose_music.ogg')
def initialize(self): GameStage.initialize(self) stream = file('data/fonts.yaml', 'r') fonts = load(stream) for font in fonts: setattr( self, font, assets.load_font(fonts[font]['file_name'], fonts[font]['size'])) self.data = DictClass(load(file('data/invaders.yaml'))) self.good = self.data.start.good self.velocity = self.data.start.velocity self.interval = self.data.start.interval self.game_over_layer = Layer() image = assets.load_image( self.data.bad[self.game.datastore.datamodel.character].src) item = ItemImage(self.data.bad.left, self.data.bad.top, image) self.game_over_layer.add(item) image = assets.load_image( self.data.game_over[self.game.datastore.datamodel.character].src) item = ItemImage(self.data.game_over.left, self.data.game_over.top, image) self.game_over_layer.add(item) image = assets.load_image( self.data.good[self.game.datastore.datamodel.character].src) self.good_indicator = ItemImage(self.data.good.left, self.data.good.top, image) self.text_indicators = [] self.main_layer = Layer() self.top_layer = Layer() self.score = 0 self.score_board = DictClass({}) image = assets.load_image(self.data.score.src) self.score_board['skin'] = ItemImage(self.data.score.left, self.data.score.top, image) self.score_board['value'] = ItemText(self.data.score.left, self.data.score.top, self.font, 0, str(self.score), width=image.get_width(), height=image.get_height(), h_align=2, v_align=2) self.top_layer.add(self.score_board.skin) self.top_layer.add(self.score_board.value) data = DictClass(load(file('data/map/common.yaml'))) params = data.character[self.game.datastore.datamodel.character] params['base'] = data.character.base[ self.game.datastore.datamodel.character].big self.character_animation = Character(**params) self.character = self.character_animation.item self.character.set_left( (SCREEN_WIDTH - self.character.get_width()) / 2) self.character.set_top(SCREEN_HEIGHT - self.character.get_height()) left = self.character.get_left() + self.data.collision.left top = self.character.get_top() + self.data.collision.top width = self.character.get_width( ) - self.data.collision.left - self.data.collision.right height = self.character.get_height( ) - self.data.collision.top - self.data.collision.bottom if DEBUG: self.debug_character = ItemRect(left, top, width, height, border=(255, 255, 255)) self.invaders = [] # Load the sound self.item_found_sound = assets.load_sound('DGI_item_found.ogg') self.lose_hit_sound = assets.load_sound('DGI_lose_hit.ogg') self.lose_music_sound = assets.load_sound('DGI_lose_music.ogg')