コード例 #1
0
ファイル: events.py プロジェクト: matheusriios/SpaceCowboy
    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)
コード例 #2
0
    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)
コード例 #3
0
    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'
コード例 #4
0
ファイル: server.py プロジェクト: sam0000-cmd/laser-snake
                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))
コード例 #5
0
ファイル: client.py プロジェクト: hjpotter92/laser-snake
	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()
コード例 #6
0
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."
コード例 #7
0
ファイル: game.py プロジェクト: gatopeich/knatank
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