python - Key mapping problems for 2 player game -


i'm making 2-player maze runner game, , have come trouble keyboard events. if both players hit key @ same time, player 1 moves, because code tests player1's events first. there way in python , pygame check both events simultaneously? here's part of player1 class:

class player( pygame.sprite.sprite ):     def __init__( self ):         super( player, self ).__init__()         self.size = self.w,self.h = 75,75         self.image = pygame.surface( ( self.size ) )         self.image.fill( white )         self.rect = self.image.get_rect()          self.move_y = 0         self.move_x = 0          self.speed = 5          self.player = true         self.alive = true          self.level = none        def update( self, collidable = pygame.sprite.group(), event = none ):          self.rect.x += self.move_x         self.rect.y += self.move_y          if not ( event == none ):             if ( event.type == pygame.keydown ):                 if ( event.key == pygame.k_left ):                     self.move_y = 0                     self.move_x = -self.speed                 if ( event.key == pygame.k_right ):                     self.move_y = 0                     self.move_x = self.speed                 if ( event.key == pygame.k_up ):                     self.move_x = 0                     self.move_y = -self.speed                 if ( event.key == pygame.k_down ):                     self.move_x = 0                     self.move_y = self.speed 

sorry block of code, necessary understand how works. have identical class player 2, different keyboard controls(wasd instead of arrow keys).

i define player1 , player2 classes:

player_object_list = pygame.sprite.group()  p1 = player() p1.set_position( 40, 725 ) p1.set_image(deadpool_icon)  p2 = player2() p2.set_position( 525, 725 ) p2.set_image(girl_bow) 

then update , draw them:

 p1.update( current_level.object_list, event )  p2.update( current_level.object_list, event )  event = none   player_object_list.draw( window ) 

to conclude: code, keyboard controlled movement works fine, doesn't check both players' keyboard events @ same time, if both press key @ same time, player1 detects event because updates before player2:

 p1.update( current_level.object_list, event )  p2.update( current_level.object_list, event ) 

thanks in advance,

derek

keeping comments above in mind, let's take shot @ solution. first of all, want make code little more general, , perhaps easier on eyes: use look-up table move translation.

move_translate = {     pygame.k_left: (-1, 0),     pygame.k_right: (1, 0),     pygame.k_up: (0, -1),     pygame.k_down: (0, 1) }  if event not none:     if event.type == pygame.keydown:         if event.key in move_translate:             # dictionary.get() improve this,              #    if want advance far in python syntax             self.move_x, self.move_y = move_translate[event.key]             self.move_x *= self.speed             self.move_y *= self.speed      # here, have retire event processed.     # pass out of first check no event.     # check in event queue, player 2.     # after check, can update display. 

does move toward solution? depending on queue , interactions you're using, may able put event checks loop handles events time tick.