def set_allowed(event_types: Union[int, Iterable[int], None]): """ Controls which events types are allowed in the queue. :param event_types: event type or list of event types to allow in the queue. If None, block any event. """ set_allowed(event_types)
def __init__(self): if hasattr(EventManager, "_singleton"): return key.set_repeat(DELAY, RATE) event.set_allowed(None) event.set_allowed([KEYDOWN, JOYBUTTONDOWN, JOYAXISMOTION, JOYBUTTONUP, PLAYER]) for i in range(joystick.get_count()): joystick.Joystick(i).init() # Information for joystick repeat. self._last_press = [None, None] self._last_press_start = [0, 0] self._last_press_times = [0, 0] # Maps key values to player numbers. self.players = { K_w: 0, K_a: 0, K_s: 0, K_d: 0, K_q: 0, K_e: 0, K_i: 1, K_j: 1, K_k: 1, K_l: 1, K_u: 1, K_o: 1, K_LEFT: 0, K_RIGHT: 0, K_UP: 0, K_DOWN: 0, K_SPACE: 0, K_KP_ENTER: 0, K_RETURN: 0, K_2: 1, K_1: 0, K_BACKSPACE: 1 } # Maps key values to internal event keys. self.events = { K_w: UP, K_a: LEFT, K_s: DOWN, K_d: RIGHT, K_q: ROT_CC, K_e: ROT_CW, K_i: UP, K_j: LEFT, K_k: DOWN, K_l: RIGHT, K_u: ROT_CC, K_o: ROT_CW, K_LEFT: LEFT, K_RIGHT: RIGHT, K_UP: UP, K_DOWN: DOWN, K_SPACE: ROT_CC, K_KP_ENTER: CONFIRM, K_RETURN: CONFIRM, K_2: CONFIRM, K_BACKSPACE: CONFIRM, K_1: CONFIRM } Singleton.__init__(self)
def __init__(self, interval, fps, num_enemies): self.interval = interval self.fps = fps self.num_enemies=num_enemies PG.init() self.screen = PD.set_mode((800, 600)) self.screen_rect = self.screen.get_rect() self.screen.fill((255,255,255)) PD.set_caption("Master Chef's wicked adventure with his ice cream buddies") #camera handling total_level_width = 1600 total_level_height = 1200 #camera is the class, cam is our object self.cam = Camera(camera.complex_camera, total_level_width, total_level_height) #camera handling end self.fps = fps self.speed = 4*self.fps #sprite group containing all sprites self.all_sprites = PS.Group() #Initialize objects on screen---------------- self.character = Player(self.speed) self.all_sprites.add(self.character) # bad = Enemy() #self.charrect = self.character.image_rect # badrect = bad.image.get_rect() #create enemy group self.enemy_list = PS.Group() #add all the enemies to the list of enemies for e in range(num_enemies): enemy = Enemy(self.screen, self.speed) self.enemy_list.add(enemy) # self.all_sprites.add(enemy) #get block sprite group from the map file self.block_group = Draw.get_block_group('mapfile.txt') #add the blocks to the sprite group containing all sprites for block in self.block_group: self.all_sprites.add(block) #I don't actually know what this does PE.set_allowed([QUIT, KEYDOWN]) self.clock = PT.Clock() self.current_time = PT.get_ticks() self.updates = 0 self.interval = interval Locals.CHANGESTATE = 'Game'
request, address = receive(self.listener) if request['cmd'] in self.handler: print '{} comamnd received from {}'.format( request['cmd'], address[0]) self.handler[request['cmd']](self, request, address) else: print request['cmd'] except socket.error: pass if __name__ == '__main__': screen = pydisplay.set_mode((1024, 576)) pydisplay.set_caption("Laser-Snake server: " + server_configuration['version']) pyevent.set_allowed(None) pyevent.set_allowed([QUIT, KEYDOWN]) port_keys = range(K_0, K_9 + 1) + range(K_KP0, K_KP9 + 1) ip_keys = port_keys + [K_PERIOD, K_KP_PERIOD] ip_box = Box(screen, "Please enter the server IP address: ", (10, 100), ip_keys) port_box = Box( screen, "Please enter the port to start server (leave blank for default): ", (10, 100), port_keys) ip = ip_box.run() port = port_box.run() if len(ip) == 0 or len(port) == 0: ip, port = ip or server_configuration['ip'], int( port or server_configuration['port']) serve = Server(ip, int(port))
def receiveCountDownRequest( self ): data_receive = receive( self.connection, self.packet_size ) def sendName( self ): send( self.connection, self.player.getNick(), self.server ) def receiveData( self ): while True: data_receive = receive( self.connection, self.packet_size ) print data_receive if __name__ == "__main__": screen_size = ( game_configuration['screenW'], game_configuration['screenH'] ) screen = pydisplay.set_mode( screen_size ) pydisplay.set_caption( "Laser-Snake: " + game_configuration['version'] ) pyevent.set_allowed( None ) pyevent.set_allowed( [QUIT, KEYDOWN] ) nick_keys, port_keys = range( K_LEFTPAREN, K_z + 1 ) + range( K_KP0, K_KP_PLUS + 1 ) + [ K_KP_EQUALS ], range( K_0, K_9 + 1 ) + range( K_KP0, K_KP9 + 1 ) ip_keys = port_keys + [ K_PERIOD, K_KP_PERIOD ] nick_box = Box( screen, "Enter your nickname: ", (150, 100), nick_keys ) ip_box = Box( screen, "Enter server IP: ", (150, 100), ip_keys ) port_box = Box( screen, "Enter server port: ", (150, 100), port_keys ) name = nick_box.run() ip = ip_box.run() port = port_box.run() if len( ip ) == 0 or len( port ) == 0: ip, port = ip or game_configuration['ip'], port or game_configuration['port'] client = Client( name, ip, int(port) ) client.sendJoinRequest() choice_box = Box( screen, "Are you ready? (yes/no) ", (150, 100), nick_keys ) choice = choice_box.run()
def Lobby(): title = FONT_TITLE.render('KnatanK', True, RED, YELLOW) start_button = FONT_TITLE.render(' Start! ', True, WHITE, RED) start_button = ( start_button , Rect(60, SCREEN_HEIGHT-60-FONT_TITLE.get_height() , *start_button.get_size())) info = "Waiting for players..." event.set_allowed((pygame.MOUSEBUTTONDOWN, pygame.KEYDOWN, pygame.QUIT)) event.clear() players = {} import uuid my_id = uuid.uuid4().get_hex() I_am_ready = False all_ready = False while not all_ready: for e in event.get(): if((e.type == pygame.MOUSEBUTTONDOWN and start_button[1].collidepoint(e.pos)) or (e.type == pygame.KEYDOWN and e.key == pygame.K_SPACE) ): I_am_ready = True elif( e.type == pygame.QUIT or (e.type == pygame.KEYDOWN and e.key == pygame.K_ESCAPE) ): print "User quit." pygame.quit() exit() from cPickle import dumps, loads SEND(b'KL' + dumps((my_id, I_am_ready))) for msg, address in RECVFROM(): if msg.startswith(b'KL'): player = loads(msg[2:]) players[player[0]] = player info = str(len(players)) + ' players connected.' if player[0] not in players: print "New player from", address, ":", player, ".", info print players FILL(YELLOW, Rect(40, 40, SCREEN_WIDTH-80, SCREEN_HEIGHT-80)) xy = XY(50, 50) BLIT(title, xy) xy = xy + XY(0, FONT_TITLE.get_linesize()) BLIT(FONT_MENU.render(info, True, BLACK, YELLOW), xy) xy = xy + XY(0, FONT_MENU.get_height()*2) # Brief up all players: playerlist = sorted(players.itervalues()) for p, tank, player in zip(xrange(1,99), TANKS, playerlist): tank.render(xy) BLIT(FONT_MENU.render("Player " + str(p) + (" (you!)" if player[0] == my_id else "") + (" READY!" if player[1] else "") , True, BLACK, YELLOW) , xy + XY(tank.sx+10, (tank.sy-FONT_MENU.get_height())/2)) xy += XY(0, tank.sy) BLIT(*start_button) all_ready = players and all(p[1] for p in playerlist) pygame.display.flip() time.sleep(1) nplayers = len(playerlist) for tn, tank in enumerate(TANKS,1): if tn > nplayers: game.AIControl(tn, tank) elif playerlist[tn-1][0] == my_id: game.LocalControl(tn, tank) else: game.RemoteControl(tn, tank) Game(nplayers) print "Game Over."
def Game(nplayers): print "Starting game..." DrawLevel() clock = pygame.time.Clock() infoline = '' infoxy = (10, SCREEN_HEIGHT - FONT.get_linesize()) totalnetdelay = 0.0 totalupdatedelay = 0.0 lastpacket = '!' event.set_allowed(None) event.set_allowed((pygame.QUIT, pygame.KEYDOWN, pygame.MOUSEBUTTONDOWN)) while True: global TURN TURN += 1 mypacket = LocalControl.Instance.update() netdelay = -TicksMs() SEND(mypacket) SEND(mypacket) # 2X redundancy for ai in AIControl.All: ai.update() missing_data = True while missing_data: # Parse events while packets fly for e in event.get((pygame.QUIT, pygame.KEYDOWN)): if( e.type == pygame.QUIT or (e.type == pygame.KEYDOWN and e.key == pygame.K_ESCAPE) ): print "User quit." exit() for remote_msg in RECEIVE(): if RemoteControl.parse(remote_msg): missing_data = False break if missing_data: SEND(lastpacket) SEND(mypacket) netdelay += TicksMs() lastpacket = mypacket SEND(lastpacket) totalnetdelay += netdelay updatedelay = -TicksMs() Sprite.updateall() BLIT(BACKGROUND, (0, 0)) Sprite.drawall() BLIT(FONT.render(infoline, False, YELLOW), infoxy) pygame.display.flip() updatedelay += TicksMs() totalupdatedelay += updatedelay infoline = ( 'FPS: %0.1f' % (clock.get_fps()) + ', network delays %0.1f' % netdelay + ' ms (avg=%0.1f' % (totalnetdelay/TURN) + '), update takes %0.1f' % updatedelay + ' ms (avg=%0.1f' % (totalnetdelay/TURN) + ').') clock.tick(MAXFPS) # Throttle: max ticks per second