Esempio n. 1
0
    def runLevel(self, levelObj, theme_no=0, playerSprite_no=0):

        #set font and theme
        DisplayFont = Theme.getInfoFont()
        selectedTheme, selectedPlayer = Theme.Themes[theme_no], list(
            Player.CharacterSprites.values())[playerSprite_no]

        #get level no and total levels in level_no tuple
        level_no = self.level.levelInfo()
        MapRefresh = True
        LevelCompleted = False

        #initialize all current level ghosts with speeds
        cur_ghosts = []

        for i in levelObj['Ghosts']:
            if i['type'] == 'V':
                tmpGhost = Ghost(i, 1.0, len(levelObj['map']))
            else:
                tmpGhost = Ghost(i, 1.0, len(levelObj['map'][0]))
            cur_ghosts.append(tmpGhost)
            tmpGhost.getinfo()

        self.DISPLAYSURF.fill(Theme.Colors['LIGHTBLUE'])

        levelSurf = DisplayFont.render('Level %s of %s' % level_no, 1,
                                       Theme.Colors['BLACK'])
        levelRect = levelSurf.get_rect()
        levelRect.bottomleft = (20, self.WINHEIGHT - 35)
        self.DISPLAYSURF.blit(levelSurf, levelRect)

        mapSurf = self.drawMap(levelObj, selectedTheme)
        mapSurf = self.drawCharacter(mapSurf, selectedPlayer,
                                     levelObj['Start'])
        mapSurfRect = mapSurf.get_rect()
        mapSurfRect.center = (self.WINWIDTH / 2, self.WINHEIGHT / 2)
        self.DISPLAYSURF.blit(mapSurf, mapSurfRect)
        pygame.display.update()
        self.Clock.tick()
        time_passed = 0.0
        levelPass = True
        #main game loop for level
        while not LevelCompleted:
            Move = None
            KeyPressed = True

            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    sys.exit()
                elif event.type == KEYDOWN:
                    KeyPressed = True
                    if event.key == K_LEFT:
                        Move = 'left'
                    elif event.key == K_RIGHT:
                        Move = 'right'
                    elif event.key == K_UP:
                        Move = 'up'
                    elif event.key == K_DOWN:
                        Move = 'down'
                    elif event.key == K_ESCAPE:
                        pygame.quit()
                        sys.exit()
            self.DISPLAYSURF.fill(Theme.Colors['LIGHTBLUE'])
            timeSec = time_passed / 1000.0
            if Move != None and not LevelCompleted:
                moved, levelObj, LevelCompleted = self.level.makeMove(Move)
            #print(moved,levelObj,LevelCompleted)
            mapSurf = self.drawMap(levelObj, selectedTheme)
            mapSurf = self.drawCharacter(mapSurf, selectedPlayer,
                                         levelObj['Start'])

            #check each ghost if moved and get new position
            for ghst in cur_ghosts:
                mvd, pos = ghst.Haunt(timeSec)
                ghstSprite = ghst.getSprite()
                mapSurf = self.drawCharacter(mapSurf, ghstSprite, pos)
                if pos == list(levelObj['Start']):
                    LevelCompleted = True
                    levelPass = False
                    self.GameOver.play()

            levelSurf = DisplayFont.render('Level %s of %s' % level_no, 1,
                                           Theme.Colors['BLACK'])
            levelRect = levelSurf.get_rect()
            levelRect.bottomleft = (20, self.WINHEIGHT - 35)
            self.DISPLAYSURF.blit(levelSurf, levelRect)

            timeText = DisplayFont.render('Time %s' % int(timeSec), 1,
                                          Theme.Colors['BLACK'])
            timeRect = timeText.get_rect()
            timeRect.topright = (self.WINWIDTH - 20, 35)
            self.DISPLAYSURF.blit(timeText, timeRect)

            #mapSurf = pygame.transform.scale(mapSurf,(400,500))
            mapSurfRect = mapSurf.get_rect()
            mapSurfRect.center = (self.WINWIDTH / 2, self.WINHEIGHT / 2)
            self.DISPLAYSURF.blit(mapSurf, mapSurfRect)
            pygame.display.update()

            time_passed += self.Clock.tick()
        return levelPass
Esempio n. 2
0
    def Selection(self, theme_no=0, playerSprite_no=0, themeSelect=True):
        themelevel = Level("level/themeLevel.txt")
        BGCOLOR = (0, 170, 255)
        self.DISPLAYSURF.fill(BGCOLOR)
        mapSurf = self.drawMap(themelevel.getCurLevelObj(),
                               Theme.Themes[theme_no])
        mapSurf = self.drawCharacter(
            mapSurf,
            list(Player.CharacterSprites.values())[playerSprite_no],
            themelevel.getCurLevelObj()['Start'])
        Font = Theme.getTitleFont()

        if themeSelect:
            themeText = Font.render('Select Theme', 1, (25, 25, 25))
        else:
            themeText = Font.render('Select Character', 1, (25, 25, 25))
        themeTextRect = themeText.get_rect()
        themeTextRect.center = (self.WINWIDTH / 2, 90)
        self.DISPLAYSURF.blit(themeText, themeTextRect)

        Font2 = Theme.getInfoFont()
        #text below selection
        belowText = Font2.render('<<- use Arrow keys to change ->>', 1,
                                 (0, 0, 0))
        belowTextRect = belowText.get_rect()
        belowTextRect.center = (self.WINWIDTH / 2, self.WINHEIGHT - 150)
        self.DISPLAYSURF.blit(belowText, belowTextRect)

        belowText2 = Font2.render('[Press Enter to select]', 1, (0, 0, 0))
        belowTextRect2 = belowText2.get_rect()
        belowTextRect2.center = (self.WINWIDTH / 2, self.WINHEIGHT - 120)
        self.DISPLAYSURF.blit(belowText2, belowTextRect2)

        mapSurfRect = mapSurf.get_rect()
        mapSurfRect.center = (self.WINWIDTH / 2, self.WINHEIGHT / 2)
        self.DISPLAYSURF.blit(mapSurf, mapSurfRect)

        pygame.display.update()

        while True:
            Move = None
            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    sys.exit()
                elif event.type == KEYDOWN:
                    KeyPressed = True
                    if event.key == K_LEFT or event.key == K_DOWN:
                        if themeSelect:
                            theme_no = (theme_no + 1) % len(Theme.Themes)
                        playerSprite_no = (playerSprite_no + 1) % len(
                            Player.CharacterSprites)
                    elif event.key == K_RIGHT or event.key == K_UP:
                        if themeSelect:
                            theme_no = (theme_no + 1) % len(Theme.Themes)
                        playerSprite_no = (playerSprite_no + 1) % len(
                            Player.CharacterSprites)
                    elif event.key == K_ESCAPE:
                        pygame.quit()
                        sys.exit()
                    elif event.key == K_RETURN:
                        return theme_no, playerSprite_no

                    mapSurf = self.drawMap(themelevel.getCurLevelObj(),
                                           Theme.Themes[theme_no])
                    mapSurf = self.drawCharacter(
                        mapSurf,
                        list(
                            Player.CharacterSprites.values())[playerSprite_no],
                        themelevel.getCurLevelObj()['Start'])

                    mapSurfRect = mapSurf.get_rect()
                    mapSurfRect.center = (self.WINWIDTH / 2,
                                          self.WINHEIGHT / 2)
                    self.DISPLAYSURF.blit(mapSurf, mapSurfRect)
                    pygame.display.update()