示例#1
0
def main():

    # Determine assets
    sprite_asset, bullet_sound_asset = DetermineAssets()

    # Load sprite assets
    IMAGESDICT, animObjs = LoadSpriteAssets(sprite_asset)

    # Main game surface
    DISPLAYSURF = pygame.display.set_mode((SCREEN_X, SCREEN_Y)) #Make the screen

    # Colors
    BLACK = (0,0,0)

    # Calculate starting position of player
    startX = SCREEN_X - LEN_SPRT_X
    startY = SCREEN_Y - LEN_SPRT_Y

    # Hold info on keys pressed, held, released
    keyinput = Input()

    # Initialize gamemap and Player
    player = Player(IMAGESDICT, animObjs, bullet_sound_asset)
    player.rect.topleft = startX, startY

    # Add tiles
    startx = 0
    starty = SCREEN_Y - LEN_SPRT_Y/2
    tile = Tile(IMAGESDICT['ground'])
    tile.rect.topleft = startx, starty

    # Sprite Groups
    allsprites = pygame.sprite.RenderPlain(player)
    environment = pygame.sprite.RenderPlain(tile)

    # Start game loop
    while True:
        # Clear key info
        keyinput.clearKeys()

        # Draw screen black
        DISPLAYSURF.fill(BLACK)

        # Check for game events
        for event in pygame.event.get():
            # Reset player direction
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == KEYDOWN:
                # Handle key presses
                keyinput.keyDownEvent(event.key)
            elif event.type == KEYUP:
                keyinput.keyUpEvent(event.key)

        # Player horizontal logic
        if keyinput.isKeyHeld(K_LEFT) and keyinput.isKeyHeld(K_RIGHT):
            player.stopMoving()
        elif keyinput.isKeyHeld(K_LEFT):
            player.moveLeft()
        elif keyinput.isKeyHeld(K_RIGHT):
            player.moveRight()
        elif keyinput.wasKeyPressed(K_SPACE):
            # Play player shooting animation
            player.shoot()
        elif keyinput.wasKeyPressed(K_ESCAPE):
            pygame.quit()
            sys.exit()
        elif not player.shooting:
            player.stopMoving()

        # Vertical logic
        if keyinput.wasKeyPressed(K_UP):
            player.jump()

        # Check for collisions between player and environment
        collision_list = pygame.sprite.spritecollide(player, environment, False)

        # Update
        allsprites.update()
        environment.update()

        # Draw
        allsprites.draw(DISPLAYSURF)
        environment.draw(DISPLAYSURF)

        pygame.display.update()
        fpsClock.tick(FPS)
示例#2
0
def main():

    # Determine assets
    sprite_asset, bullet_sound_asset = DetermineAssets()

    # Load sprite assets
    IMAGESDICT, animObjs = LoadSpriteAssets(sprite_asset)

    # Main game surface
    DISPLAYSURF = pygame.display.set_mode((SCREEN_X, SCREEN_Y)) #Make the screen

    # Colors
    BLACK = (0,0,0)

    # Calculate starting position of player
    startX, startY = SCREEN_X/2 - LEN_SPRT_X, SCREEN_Y - LEN_SPRT_Y

    # Hold info on keys pressed, held, released
    keyinput = Input()

    # Initialize gamemap and Player
    player = Player(IMAGESDICT, animObjs, bullet_sound_asset)
    player.rect.topleft = startX, 0

    # Create map sprite group
    environment = pygame.sprite.Group()

    # Open and parse map file
    parseMap(IMAGESDICT, environment)

    # Sprite group
    allsprites = pygame.sprite.RenderPlain(player)

    # Start game loop
    while True:
        # Clear key info
        keyinput.clearKeys()

        # Draw screen black
        DISPLAYSURF.fill(BLACK)

        # Check for game events
        for event in pygame.event.get():
            # Reset player direction
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == KEYDOWN:
                # Handle key presses
                keyinput.keyDownEvent(event.key)
            elif event.type == KEYUP:
                keyinput.keyUpEvent(event.key)

        # Player horizontal logic
        if keyinput.isKeyHeld(K_LEFT) and keyinput.isKeyHeld(K_RIGHT):
            player.stopMoving()
        elif keyinput.isKeyHeld(K_LEFT):
            player.moveLeft()
        elif keyinput.isKeyHeld(K_RIGHT):
            player.moveRight()
        elif keyinput.wasKeyPressed(K_SPACE):
            # Play player shooting animation
            player.shoot()
        elif keyinput.wasKeyPressed(K_ESCAPE):
            pygame.quit()
            sys.exit()
        elif not player.shooting:
            player.stopMoving()

        # Toggle Blue/Red character
        if keyinput.wasKeyPressed(K_c):
            player.toggleColor()

        # Vertical logic
        if keyinput.wasKeyPressed(K_UP):
            player.jump()

        # Remove bullets that leave screen
        for sprite in allsprites:
            if isinstance(sprite, Bullet):
                if sprite.rect[0] > SCREEN_X or sprite.rect[0] < 0:
                    allsprites.remove(sprite)

        # Update
        allsprites.update(environment)
        environment.update(allsprites)

        # Draw
        allsprites.draw(DISPLAYSURF)
        environment.draw(DISPLAYSURF)

        pygame.display.update()
        fpsClock.tick(FPS)
class GameWindow:
    def __init__(self):
        self._window = None
        self._graphics = None
        self._sprite = None 
        self._running = True
        self._renderer = SDL_Renderer()
        self._player = None
        self._input = Input() 

    def gameLoop(self):
        sdl2.ext.init()
        self._window = sdl2.ext.Window("Game Window", size=(800, 600))
        self._graphics = Graphics(self._window)
        self._player = Player(self._graphics, 100, 100)
        self._window.show()

        LAST_UPDATE_TIME = 0

        while self._running:

            self._input.beginNewFrame()
            events = sdl2.ext.get_events()
            for event in events:
                if event.type == SDL_KEYDOWN:
                    if event.key.repeat == 0:
                        self._input.keyDownEvent(event)
                elif event.type == SDL_KEYUP:
                    self._input.keyUpEvent(event)
                
                elif event.type == sdl2.SDL_QUIT:
                    self._running = False
                    break

            if self._input.wasKeyPressed(SDL_SCANCODE_LEFT):
                self._player.moveLeft()
            elif self._input.wasKeyPressed(SDL_SCANCODE_RIGHT):
                self._player.moveRight()
            if not self._input.isKeyHeld(SDL_SCANCODE_LEFT) and not self._input.isKeyHeld(SDL_SCANCODE_RIGHT):
                self._player.stopMoving()

            CURRENT_TIME_MS = sdl2.SDL_GetTicks()
            ELAPSED_TIME_MS = CURRENT_TIME_MS - LAST_UPDATE_TIME
            self.update(min([ELAPSED_TIME_MS, MAX_FRAME_TIME]))
            LAST_UPDATE_TIME = CURRENT_TIME_MS

            self.draw()
            

        return 0
    
    def draw(self):
        self._graphics.clear()

        self._player.draw()
        self._graphics.flip()
    
    def update(self, elapsed_time):
        self._player.update(elapsed_time)
    
    def start(self):
        sys.exit(self.gameLoop())