def __init__(self): # Initialise the clock. self._clock = pygame.time.Clock() # Create the main screen (the window) and default background. self._screen = self._create_screen() self._background = self._create_background() self._display_logo() self._display_score_titles() self._high_score = load_high_score() # The start screen displayed before the game is started. self._start_screen = StartScreen(self._start_game) # Reference to a running game, when one is in play. self._game = None # Whether we're running. self._running = True # Set up the top level event handlers. def quit_handler(event): self._running = False receiver.register_handler(pygame.QUIT, quit_handler) # Initialise the scores. self._display_player_score = functools.partial(self._display_score, y=35) self._display_high_score = functools.partial(self._display_score, y=100) self._display_player_score(0) self._display_high_score(self._high_score)
def test_register_handler(self): def handler(): pass receiver.register_handler('foo', handler) self.assertIn(handler, receiver._handlers['foo'])
def _activate(self): """Add the ability to catch a ball when it collides with the paddle. """ self.game.paddle.ball_collide_callbacks.append(self._catch) # Monitor for spacebar presses to release a caught ball. receiver.register_handler(pygame.KEYUP, self._release_ball)
def _convert_to_laser(self): try: self._convert() except StopIteration: # Conversion finished. self._to_laser = False # Start monitoring for spacebar presses for firing bullets. receiver.register_handler(pygame.KEYUP, self._fire)
def show(self): if not self._registered: receiver.register_handler(pygame.KEYUP, self._on_keyup) self._registered = True if not self._init: self._init = True self._screen.blit(pygame.Surface((600, 650)), (0, TOP_OFFSET)) ptext.draw('POWERUPS', (210, 200), fontname=ALT_FONT, fontsize=32, color=(255, 255, 255)) left, top = 30, 270 for anim, name, desc in self._powerups: if self._display_count % 4 == 0: image, _ = next(anim) self._screen.blit(image, (left, top)) ptext.draw(name.upper(), (left + image.get_width() + 20, top - 3), fontname=ALT_FONT, fontsize=20, color=(255, 255, 255)) ptext.draw(desc.upper(), (left, top + 25), fontname=ALT_FONT, fontsize=14, color=(255, 255, 255)) left += 180 if left > 400: left = 30 top += 100 if self._display_count % 15 == 0: self._text_color_1 = next(self._text_colors_1) self._text_color_2 = next(self._text_colors_2) ptext.draw('SPACEBAR TO START', (50, 500), fontname=ALT_FONT, fontsize=48, color=self._text_color_1, shadow=(1.0, 1.0), scolor="grey") ptext.draw('OR ENTER LEVEL', (160, 575), fontname=ALT_FONT, fontsize=32, color=self._text_color_2) self._user_input_pos = ptext.draw(self._user_input, (280, 625), fontname=ALT_FONT, fontsize=40, color=(255, 255, 255))[1] ptext.draw( 'Based on original Arkanoid game\nby Taito Corporation 1986', (100, 700), align='center', fontname=ALT_FONT, fontsize=24, color=(128, 128, 128)) self._display_count += 1
def test_register_multiple_handlers(self): def handler1(): pass def handler2(): pass receiver.register_handler('foo', handler1, handler2) self.assertIn(handler1, receiver._handlers['foo']) self.assertIn(handler2, receiver._handlers['foo'])
def __init__(self, game): super().__init__(game) # The ball and paddle are kept invisible at the very start. self.game.paddle.visible = False self.game.ball.visible = False # Register the event handlers for paddle control. receiver.register_handler(pygame.KEYDOWN, self.game.handler_move_left, self.game.handler_move_right) receiver.register_handler(pygame.KEYUP, self.game.handler_stop)
def __init__(self, sensor): self._sensor = sensor self._clock = pygame.time.Clock() self._screen = self._create_screen() self._background = self._create_background() self._display_logo() self._display_score_titles() self._high_score = load_high_score() self._start_screen = StartScreen(self._start_game, sensor) self._game = None self._running = True def quit_handler(event): self._running = False receiver.register_handler(pygame.QUIT, quit_handler) self._display_player_score = functools.partial(self._display_score, y=35) self._display_high_score = functools.partial(self._display_score, y=100) self._display_player_score(0) self._display_high_score(self._high_score)
def __init__(self, game): super().__init__(game) self.game.paddle.visible = False self.game.ball.visible = False receiver.register_handler(pygame.KEYDOWN, self.game.handler_move_left, self.game.handler_move_right) receiver.register_handler(pygame.KEYUP, self.game.handler_stop) #---- kong ---- receiver.register_handler(pygame.KEYUP, self.game.handler_quit)
def test_register_handler_raises_exception_when_no_handler(self): with self.assertRaises(AssertionError): receiver.register_handler('foo')
def _convert_to_laser(self): try: self._convert() except StopIteration: self._to_laser = False receiver.register_handler(pygame.KEYUP, self._fire)
def _activate(self): self.game.paddle.ball_collide_callbacks.append(self._catch) receiver.register_handler(pygame.KEYUP, self._release_ball)
def show(self): """Display the start screen and register event listeners for capturing keyboard input. This method is designed to be called repeatedly by the main game loop. """ if not self._registered: receiver.register_handler(pygame.KEYUP, self._on_keyup) self._registered = True if not self._init: self._init = True self._screen.blit(pygame.Surface((600, 650)), (0, TOP_OFFSET)) ptext.draw('POWERUPS', (210, 200), fontname=ALT_FONT, fontsize=32, color=(255, 255, 255)) left, top = 30, 270 for anim, name, desc in self._powerups: if self._display_count % 4 == 0: image, _ = next(anim) self._screen.blit(image, (left, top)) ptext.draw(name.upper(), (left + image.get_width() + 20, top-3), fontname=ALT_FONT, fontsize=20, color=(255, 255, 255)) ptext.draw(desc.upper(), (left, top + 25), fontname=ALT_FONT, fontsize=14, color=(255, 255, 255)) left += 180 if left > 400: left = 30 top += 100 if self._display_count % 15 == 0: self._text_color_1 = next(self._text_colors_1) self._text_color_2 = next(self._text_colors_2) ptext.draw('SPACEBAR TO START', (50, 500), fontname=ALT_FONT, fontsize=48, color=self._text_color_1, shadow=(1.0, 1.0), scolor="grey") ptext.draw('OR ENTER LEVEL', (160, 575), fontname=ALT_FONT, fontsize=32, color=self._text_color_2) self._user_input_pos = ptext.draw(self._user_input, (280, 625), fontname=ALT_FONT, fontsize=40, color=(255, 255, 255))[1] ptext.draw('Based on original Arkanoid game\n' 'by Taito Corporation 1986', (100, 700), align='center', fontname=ALT_FONT, fontsize=24, color=(128, 128, 128)) self._display_count += 1