Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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))
Exemplo n.º 4
0
    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))