def handleTeleport(self): oldLevel = self.levelNumber #TODO animate character if constants.TELEDIR == constants.DOWN: for i in range(self.currLevel.player.rect.height): time.sleep(0.005) #get level number self.levelNumber = constants.TELELEVEL #get chosen player choice = self.currLevel.charsel.char #set level self.currLevel = self.getCurrentLevel() #set chosen player """ if choice == 1: self.currLevel.player = player.Hulk(0,0,self.currLevel) elif choice == 2: self.currLevel.player = player.Thor(0,0,self.currLevel) elif choice == 3: self.currLevel.player = player.CaptainAmerica(0,0,self.currLevel) elif choice == 4: self.currLevel.player = player.IronMan(0,0,self.currLevel) elif choice == 5: self.currLevel.player = player.Hawkeye(0,0,self.currLevel) elif choice == 6: self.currLevel.player = player.BlackWidow(0,0,self.currLevel) """ self.currLevel.charsel.setChar(choice) #set player coords TODO doesn't work.. self.currLevel.setPlayer(choice, constants.TELEX, constants.TELEY) self.currLevel.player.rect.x = constants.TELEX self.currLevel.player.rect.y = constants.TELEY #begin playing level self.startMenu.loadLevel = False self.startMenu.playing = True #allow level to continue normally on player death sound.play_bgm(self.currLevel.bgm) self.levelNumber = oldLevel self.didTeleport = True
def update(self): #Game loop wasplaying = True #Hack to figure out when we need to change sounds self.timer = 0 self.frameCount = 0 #Timer logic: after 30 frames, increment hud timer self.didTeleport = False while True: #Start timer and handle events milliStart = pygame.time.get_ticks() events = pygame.event.get() logEvents = eventmanager.get().handleEvents(events) #if event = r or pause --> don't log if logEvents: logger.get().add(logger.LogNode(events)) if (time.clock() - self.timer > 2) and self.invincible: self.stopInvincibility() elif eventmanager.get().REPLAYPRESSED == True: #save game before hand self.saveState() logger.get().replay() self.saveCharSelection( ) # for some reason, replay resets the save file's char to 0 self.loadLevel(0) #give temporary invincibility -> for 2 seconds self.tempInvincibility() #player is playing the game if self.startMenu.isPlaying(): if not wasplaying: sound.play_bgm(self.currLevel.bgm) #player died if not self.currLevel.player_alive: self.player_lives -= 1 #reset logger logger.get().setStart(self.currLevel.player.rect.x, self.currLevel.player.rect.y) logger.get().clear() #reload level self.loadLevel() #check if died due to teleportation if self.didTeleport: sound.play_bgm(self.currLevel.bgm) self.didTeleport = False #game over if self.player_lives < 1: self.currLevel.charSelected = False self.currLevel.charsel.char = 0 self.screen.fill(0) gameover = StaticImage("images/gameover.jpg", 0, 0) gameover.rect.topleft = self.camera.window.centerx - gameover.rect.width/2,\ self.camera.window.centery - gameover.rect.width/2 gameover.draw(self.camera) pygame.display.flip() time.sleep(3) self.player_lives = constants.PLAYER_LIVES logger.get().setStart(0, 500) #select bg color depending on level #hopefully to cut down on image size if self.currLevel.levelNumber == -1: self.screen.fill(constants.LEVELNEG1_BGCOLOR) elif self.currLevel.levelNumber == 0: self.screen.fill(constants.LEVEL0_BGCOLOR) elif self.currLevel.levelNumber == 1: self.screen.fill(constants.LEVEL1_BGCOLOR) elif self.currLevel.levelNumber == 3: self.screen.fill(constants.LEVEL3_BGCOLOR) else: self.screen.fill(constants.DEFAULT_BGCOLOR) self.currLevel.draw(self.camera) if self.currLevel.charSelected and self.currLevel.plotOver: #Hud timer logic self.frameCount = self.frameCount + 1 if self.frameCount > 30: self.hud.incTime() self.frameCount = 0 self.hud.draw(self.camera, self) #Update player and enemies positions/current actions if not eventmanager.get().isPaused(): self.currLevel.update() if self.currLevel.charSelected: self.hud.update() #check for telportation if constants.TELEPORT == True: wasplaying = False self.handleTeleport() constants.TELEPORT = False #check for level completion if self.currLevel.levelCompleted: wasplaying = False self.levelNumber += 1 self.hud.resetTime() self.currLevel = self.getCurrentLevel() logger.get().clear() else: wasplaying = True else: #show pause menu self.pauseMenu.draw(self.camera) self.pauseMenu.update() #'quit to main' clicked if self.pauseMenu.showMainMenu: self.startMenu.playing = False self.startMenu.show_level = False self.currLevel = self.getCurrentLevel() self.pauseMenu.showMainMenu = False eventmanager.get().PAUSED = False elif self.pauseMenu.restartLevel: #'restart level' clicked self.hud.resetTime() self.currLevel = self.getCurrentLevel() self.pauseMenu.restartLevel = False eventmanager.get().PAUSED = False #Update camera position using player's player_rect = self.currLevel.get_player_rect() self.camera.updatePosition(player_rect) else: #update inputs from startMenu if wasplaying: sound.play_bgm(self.startMenu.bgm) self.startMenu.update() self.camera.zeroPosition() self.startMenu.draw(self.camera) wasplaying = False if self.startMenu.isPlaying(): self.levelNumber = self.startMenu.getLevel() self.hud.resetTime() self.currLevel = self.getCurrentLevel() logger.get().clear() #'Load Game' clicked if self.startMenu.loadLevel: self.loadLevel() #Fill the screen, draw level, flip the buffer pygame.display.flip() #Stop timer and sleep for remainder of time milliEnd = pygame.time.get_ticks() leftover = constants.mSPF - (milliEnd - milliStart) #sys.stdout.write('Time left in frame: %s\n' % leftover) if leftover > 0: pygame.time.wait(int(leftover))
def update(self): #Game loop wasplaying = True #Hack to figure out when we need to change sounds self.timer = 0 self.frameCount = 0 #Timer logic: after 30 frames, increment hud timer self.didTeleport = False while True: #Start timer and handle events milliStart = pygame.time.get_ticks() events = pygame.event.get() logEvents = eventmanager.get().handleEvents(events) #if event = r or pause --> don't log if logEvents : logger.get().add(logger.LogNode(events)) if (time.clock() - self.timer > 2) and self.invincible : self.stopInvincibility() elif eventmanager.get().REPLAYPRESSED == True : #save game before hand self.saveState() logger.get().replay() self.saveCharSelection() # for some reason, replay resets the save file's char to 0 self.loadLevel(0) #give temporary invincibility -> for 2 seconds self.tempInvincibility() #player is playing the game if self.startMenu.isPlaying(): if not wasplaying: sound.play_bgm(self.currLevel.bgm) #player died if not self.currLevel.player_alive: self.player_lives -= 1 #reset logger logger.get().setStart(self.currLevel.player.rect.x, self.currLevel.player.rect.y) logger.get().clear() #reload level self.loadLevel() #check if died due to teleportation if self.didTeleport: sound.play_bgm(self.currLevel.bgm) self.didTeleport = False #game over if self.player_lives < 1: self.currLevel.charSelected = False self.currLevel.charsel.char = 0 self.screen.fill(0) gameover = StaticImage( "images/gameover.jpg", 0, 0 ) gameover.rect.topleft = self.camera.window.centerx - gameover.rect.width/2,\ self.camera.window.centery - gameover.rect.width/2 gameover.draw(self.camera) pygame.display.flip() time.sleep(3) self.player_lives = constants.PLAYER_LIVES logger.get().setStart(0, 500) #select bg color depending on level #hopefully to cut down on image size if self.currLevel.levelNumber == -1: self.screen.fill(constants.LEVELNEG1_BGCOLOR) elif self.currLevel.levelNumber == 0: self.screen.fill(constants.LEVEL0_BGCOLOR) elif self.currLevel.levelNumber == 1: self.screen.fill(constants.LEVEL1_BGCOLOR) elif self.currLevel.levelNumber == 3: self.screen.fill(constants.LEVEL3_BGCOLOR) else: self.screen.fill(constants.DEFAULT_BGCOLOR) self.currLevel.draw(self.camera) if self.currLevel.charSelected and self.currLevel.plotOver: #Hud timer logic self.frameCount = self.frameCount + 1 if self.frameCount > 30: self.hud.incTime() self.frameCount = 0 self.hud.draw(self.camera, self) #Update player and enemies positions/current actions if not eventmanager.get().isPaused(): self.currLevel.update() if self.currLevel.charSelected: self.hud.update() #check for telportation if constants.TELEPORT == True: wasplaying = False self.handleTeleport() constants.TELEPORT = False #check for level completion if self.currLevel.levelCompleted: wasplaying = False self.levelNumber += 1 self.hud.resetTime() self.currLevel = self.getCurrentLevel() logger.get().clear() else: wasplaying = True else: #show pause menu self.pauseMenu.draw(self.camera) self.pauseMenu.update() #'quit to main' clicked if self.pauseMenu.showMainMenu: self.startMenu.playing = False self.startMenu.show_level = False self.currLevel = self.getCurrentLevel() self.pauseMenu.showMainMenu = False eventmanager.get().PAUSED = False elif self.pauseMenu.restartLevel: #'restart level' clicked self.hud.resetTime() self.currLevel = self.getCurrentLevel() self.pauseMenu.restartLevel = False eventmanager.get().PAUSED = False #Update camera position using player's player_rect = self.currLevel.get_player_rect() self.camera.updatePosition(player_rect) else: #update inputs from startMenu if wasplaying: sound.play_bgm(self.startMenu.bgm) self.startMenu.update() self.camera.zeroPosition() self.startMenu.draw(self.camera) wasplaying = False if self.startMenu.isPlaying(): self.levelNumber = self.startMenu.getLevel() self.hud.resetTime() self.currLevel = self.getCurrentLevel() logger.get().clear() #'Load Game' clicked if self.startMenu.loadLevel: self.loadLevel() #Fill the screen, draw level, flip the buffer pygame.display.flip() #Stop timer and sleep for remainder of time milliEnd = pygame.time.get_ticks() leftover = constants.mSPF - (milliEnd - milliStart) #sys.stdout.write('Time left in frame: %s\n' % leftover) if leftover > 0: pygame.time.wait(int(leftover))