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)
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())