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