import pygame, pypong from pypong.player import BasicAIPlayer, KeyboardPlayer, MousePlayer, Rem0tePlayer import r0ketrem0te.game import time class Pong: def __init__(self): self.configuration = { 'screen_size': (686,488), 'paddle_image': 'assets/paddle.png', 'paddle_left_position': 84., 'paddle_right_position': 594., 'paddle_velocity': 6., 'paddle_bounds': (0, 488), # This sets the upper and lower paddle boundary.The original game didn't allow the paddle to touch the edge, 'line_image': 'assets/dividing-line.png', 'ball_image': 'assets/ball.png', 'ball_velocity': 4., 'ball_velocity_bounce_multiplier': 1.105, 'ball_velocity_max': 32., 'score_left_position': (141, 30), 'score_right_position': (473, 30), 'digit_image': 'assets/digit_%i.png', 'sound_missed': 'assets/missed-ball.wav', 'sound_paddle': 'assets/bounce-paddle.wav', 'sound_wall': 'assets/bounce-wall.wav', 'sound': True, } pygame.mixer.pre_init(22050, -16, 2, 1024) pygame.init() self.rem0te = r0ketrem0te.game.Game('/dev/ttyACM0', "pong", 83, 87, [ord(x) for x in 'REM0T'], 2, True) self.rem0te.registerPlayerCallback(self.playercallback) self.player_right = Rem0tePlayer(self.rem0te) self.player_left = Rem0tePlayer(self.rem0te) self.stop = True self.start = False self.restart() def playercallback(self, action, player): if action == 'added': if self.player_left.player == None: self.player_left.player = player elif self.player_right.player == None: self.player_right.player = player if self.player_left.player and self.player_right.player: self.start = True elif action == 'removed': print 'got remove for', player.nick if self.player_left.player == player: print 'removing left player' self.player_left.player = None elif self.player_right.player == player: print 'removing right player' self.player_right.player = None if self.player_left.player == None or self.player_right.player == None: print 'halting game' self.stop = True def restart(self): self.display_surface = pygame.display.set_mode(self.configuration['screen_size']) self.output_surface = self.display_surface.copy().convert_alpha() self.output_surface.fill((0,0,0)) #~ debug_surface = output_surface.copy() #~ debug_surface.fill((0,0,0,0)) self.debug_surface = None self.clock = pygame.time.Clock() self.input_state = {'key': None, 'mouse': None} # Prepare game self.game = pypong.Game(self.player_left, self.player_right, self.configuration) def run(self): # Main game loop timestamp = 1 while self.game.running: if self.start: self.restart() self.start = False self.stop = False self.clock.tick(60) now = pygame.time.get_ticks() if timestamp > 0 and timestamp < now: timestamp = now + 5000 print self.clock.get_fps() self.input_state['key'] = pygame.key.get_pressed() self.input_state['mouse'] = pygame.mouse.get_pos() if not self.stop: self.game.update() self.game.draw(self.output_surface) #~ pygame.surfarray.pixels_alpha(output_surface)[:,::2] = 12 self.display_surface.blit(self.output_surface, (0,0)) font = pygame.font.Font(None, 36) if self.player_left.player: text = font.render(self.player_left.player.nick, 1, (0, 255, 0)) textpos = text.get_rect(centerx=self.output_surface.get_width()/4) self.display_surface.blit(text, textpos) if self.player_right.player: text = font.render(self.player_right.player.nick, 1, (0, 255, 0)) textpos = text.get_rect(centerx=self.output_surface.get_width()/4*3) self.display_surface.blit(text, textpos) if self.debug_surface: self.display_surface.blit(self.debug_surface, (0,0)) pygame.display.flip() for event in pygame.event.get(): if event.type == pygame.QUIT: self.game.running = False elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: self.game.running = False if __name__ == '__main__': pong = Pong() pong.run()