class gameSpace(object): # Initializes all necessary variable def __init__(self): # Initialize window variables and reactor pygame.init() self.size = self.width, self.height = screenWidth, screenHeight self.white = 255, 255, 255 self.screen = pygame.display.set_mode(self.size) # Various screen fonts and labels self.byeFont = pygame.font.SysFont("freeserif", 100) self.winFont = pygame.font.SysFont("freeserif", 50) self.scoreKeeper = pygame.font.SysFont("freeserif", 25) self.wait = self.winFont.render( "Player 2 has not connected, please wait...", 1, (0, 0, 0)) self.bye = self.byeFont.render("Goodbye!", 1, (0, 0, 0)) self.lost = self.winFont.render("Game Server Connection Lost.", 1, (0, 0, 0)) # Setup game mode, difficulty, chosen sprite images self.player_num = 0 self.connected = 0 self.setup = Setup() self.mode, self.diff, self.player_img, self.ball_img = self.setup.run_setup( ) ### Check chosen mode ### # If quit occurred, leave game if self.mode == 0: self.goodbye() # If player want to play computer, set 1 player up elif self.mode == 1: self.player_num = 1 self.connected = 1 self.player = Player(self.player_num, self.player_img) spriteGroup.add(self.player) self.computer = Computer(self.diff, self.player_img) spriteGroup.add(self.computer) self.ball = Ball(self.player, self.diff, self.ball_img, self.computer) # If mode 2 selected, set a variable for other player elif self.mode == 2: # Your player inits self.player = Player(self.player_num, self.player_img) self.ball = Ball(self.player, self.diff, self.ball_img) spriteGroup.add(self.player) # Initialize other player attributes self.other_score = 0 self.barWidth = 30 self.barHeight = 80 self.other_img = pygame.image.load(self.player_img) self.other_img = pygame.transform.scale( self.other_img, (self.barWidth, self.barHeight)) self.other_rect = self.other_img.get_rect() # place off screen for the time being self.other_rect.x = -50 self.other_rect.y = 900 # Runs one game loop def play(self): # If playing online but P2 hasn't connected, wait if self.connected == 0: self.screen.fill(self.white) self.wait_screen() # else, do game loop else: # Set white background for pong math self.screen.fill(self.white) # check for system exit event = pygame.event.poll() if event.type == pygame.QUIT: if self.mode == 1: sys.exit() elif self.mode == 2: os._exit() # Draw everything for mode 1 if self.mode == 1: self.player.keyHandler() self.ball.move() self.ball.collision(spriteGroup) self.ball.draw() self.player.draw() self.player.goal() self.computer.move(self.ball.get_x(), self.ball.get_y()) self.computer.draw() self.computer.goal() # Draw everything for mode 2 else: self.player.keyHandler() self.ball.move() self.ball.collision(spriteGroup) self.ball.draw() self.player.draw() self.player.goal() # Draw other player, blit other score screen.blit(self.other_img, self.other_rect) scoreBlit = self.scoreKeeper.render(self.other_score, 1, (0, 0, 0)) # Blit score in proper place if self.player_num == 2: screen.blit(scoreBlit, (32, 16)) else: screen.blit(scoreBlit, (968, 16)) # Check if other player won if self.game_over(): self.winner() # Display all blits pygame.display.flip() # Wait Screen def wait_screen(self): screen.blit(self.wait, (150, 400)) pygame.display.flip() # Function receives other player position def update(self, data): # If data is P1 message, set to P1 if data == "1": self.set_player(1) # If data is P2 message, set to P2 elif data == "2": self.set_player(2) # Begin game if player 2 has connected elif data == "3": self.connected() # Otherwise, parse other player data else: info = data.split() self.other_rect.x = int(info[0]) self.other_rect.y = int(info[1]) self.other_score = info[2] self.ball.set_pos(int(info[3]), int(info[4]), float(info[5])) # Function sets player number, cannot start mode 2 without this def set_player(self, num): self.player_num = num # If player_num is 2, begin game if self.player_num == 2: self.connected = 1 # Set x position according to player number self.player.set_pos(self.player_num) # Indicates player 2 is connected def connected(self): self.connected = 1 # Function returns current player position to send def player_pos(self): return self.ball.get_full_pos() # Returns game mode for main def get_mode(self): return self.mode # Indicates if game is over def game_over(self): # If playing computer, check those scores if self.mode == 1: if self.player.get_score() == 10 or self.computer.get_score( ) == 10: return 1 else: return 0 # If playing other player, check those scores elif self.mode == 2: if self.player.get_score() == 10 or self.other_score == 10: return 1 else: return 0 # function displays winner screen def winner(self): # Winner variable winner = 0 # If playing computer, check those scores if self.mode == 1: if self.player.get_score() > self.computer.get_score(): winner = 1 else: winner = 2 # If playing other player, check those scores elif self.mode == 2: if self.player.get_score() > self.other_score: winner = 1 else: winner = 2 self.screen.fill(self.white) self.win = self.winFont.render( "Player " + str(winner) + " won the game!", 1, (0, 0, 0)) screen.blit(self.win, (250, 300)) # Display for 3 seconds then leave pygame.display.flip() time.sleep(3) self.goodbye() # function displays lost connection screen def connection_lost(self): # Lost connection and goodbye self.screen.fill(self.white) screen.blit(self.lost, (200, 300)) pygame.display.flip() time.sleep(3) self.goodbye() # Screen say good bye as you exit def goodbye(self): self.screen.fill(self.white) screen.blit(self.bye, (300, 300)) pygame.display.flip() time.sleep(3) os._exit()