def __init__(self, level_num, game): self.level_num = level_num self.game = game self.tilemap = tmx.load('resources/maps/map_%03d.tmx' % self.level_num, self.game.screen.get_size()) self.enemycollide = pygame.sprite.collide_rect_ratio(0.8) self.sprites = None self.enemies = None self.blockers = None
def __init__(self, level_num, game): self.level_num = level_num self.game = game self.tilemap = tmx.load( 'resources/maps/map_%03d.tmx' % self.level_num, self.game.screen.get_size()) self.enemycollide = pygame.sprite.collide_rect_ratio(0.8) self.sprites = None self.enemies = None self.blockers = None
def __init__(self, screen): # Load the background and get its properties self.background = pygame.image.load('resources/backgrounds/mountains.png') self.background_size = self.background.get_size() self.screen = screen self.tile_map = tmx.load("resources/maps/map.tmx", self.screen.get_size()) self.sprites = tmx.SpriteLayer() self.enemies = tmx.SpriteLayer() # Load the player start_cell = self.tile_map.layers['triggers'].find('player')[0] self.player = Player((start_cell.px, start_cell.py), self.sprites) # Load the enemies for enemy in self.tile_map.layers['triggers'].find('enemy'): Enemy((enemy.px, enemy.py), self.enemies) self.tile_map.layers.append(self.enemies)
def main(self, screen): ''' The main loop ''' clock = pygame.time.Clock() self.tilemap = tmx.load('resources/maps/test1.tmx', screen.get_size()) self.sprites = tmx.layers.SpriteLayer() self.items = tmx.layers.SpriteLayer() self.projectiles = tmx.layers.SpriteLayer() self.player = Player(self.items, self.sprites) self.tilemap.layers.append(self.sprites) self.tilemap.layers.append(self.projectiles) while self.running: time_delta = clock.tick(45) self.handle_keys() self.tilemap.set_focus(self.player.vehicle.rect.x, self.player.vehicle.rect.y) self.tilemap.update([arrow[1] for arrow in self.arrows], time_delta / 100, self.tilemap) screen.fill((239, 237, 236)) self.tilemap.draw(screen) self.items.draw(screen) if self.wireframe_mode: self.draw_wireframe(screen, self.player.vehicle.near_obstacles, self.player.vehicle.collision_points) pygame.display.flip()
def main(self, screen): import random random.seed() clock = pygame.time.Clock() self.tilemap = tmx.load('maps/map1.tmx', screen.get_size()) self.players = tmx.SpriteLayer('players') self.player = SmallTank((800, 400),'First Player', True, self.players) self.secondPlayer = SmallTank((400, 400),'Second Player', False, self.players) self.shells = tmx.SpriteLayer('shell') self.bonusItems = tmx.SpriteLayer('bonusItems') self.tilemap.layers.append(self.players) self.tilemap.layers.append(self.shells) self.tilemap.layers.append(self.bonusItems) firstPlayerHUD = HUD((1175,0), self.player) secondPlayerHUD = HUD((0,0), self.secondPlayer) textForMainMenu = ("Start Game","Quit") mainMenu = Menu(textForMainMenu, screen) mainMenu.drawMenu(screen) textForLastMenu = ("Game Over" ," ") lastMenu = GameOverMenu(textForLastMenu, screen) gameIsRunning = True interval = 0 while gameIsRunning: dt = clock.tick(30) interval += dt if interval > 10000 and not mainMenu.isActive(): # interval in milliseconds interval = 0 item_type = random.choice(['healthBox','rocketShellBox', 'genericShellBox']) item_x_coord = random.randint(0, self.tilemap.px_width-20) item_y_coord = random.randint(0, 200) item = GenericBonusItem((item_x_coord,item_y_coord), item_type, self.bonusItems) for e in pygame.event.get(): if e.type == pygame.MOUSEBUTTONDOWN: text = mainMenu.handleEvent(e) if text == "Quit": gameIsRunning = False else: mainMenu.deactivate() if self.player.alive() and e.type == pygame.KEYDOWN and e.key == pygame.K_SPACE: self.player.shoot(self.shells) if self.secondPlayer.alive() and e.type == pygame.KEYDOWN and e.key == pygame.K_TAB: self.secondPlayer.shoot(self.shells) if e.type == pygame.QUIT: gameIsRunning = False if e.type == pygame.KEYDOWN and e.key == pygame.K_ESCAPE: mainMenu.activate() if not self.player.alive() or not self.secondPlayer.alive(): lastMenu.drawMenu(screen) elif mainMenu.isActive(): mainMenu.drawMenu(screen) else: self.tilemap.update(dt / 1000., self) screen.fill(GRAY_COLOR) firstPlayerHUD.draw(screen) secondPlayerHUD.draw(screen) self.tilemap.draw(screen) pygame.display.flip()
def RealLoadLevel(self, path, mode, screen): """ Loads a level structure, given path, mode and screen Keyword Arguments: - path: Full path to the level - mode: Mode to open the level in - screen: The screen instance """ self.mod_logger.info("LoadLevel Routine is loading %(path)s" % locals()) # Erases level and if we're doing a campaign, checks for intermissions # v--------------------------------------------------v self.eraseCurrentLevel() self.showLoadingScreen() if mode not in ["singlemap"]: self.checkIntermission() # ^--------------------------------------------------^ self.showLoadingScreen() # Loads the level configuration and its chaos parameters # v--------------------------------------------------v with open(path+".json") as f: levelconfig = json.loads(f.read()) self.mod_logger.debug("Level configuration loaded") self.loadChaosParameters(levelconfig) # ^--------------------------------------------------^ # If we're in the single timer Critical Failure, load the level time # And reset the time to 0. # v--------------------------------------------------v if mode == "cfsingle": self.gameStatus["cftime"] = levelconfig["Level Info"]["CFTime"] self.gameStatus["time"] = 0. # ^--------------------------------------------------^ # Loads the level glitches # v--------------------------------------------------v self.glitches = levelconfig["Glitches"]["Standard"] self.mod_logger.debug("Glitches Active: {0}".format(self.glitches)) # ^--------------------------------------------------------------^ # Loads the level map # v--------------------------------------------------------------v self.mod_logger.debug("Loading Tilemap") self.tilemap = tmx.load(path+".tmx", self.screensize) self.mod_logger.debug("Tilemap Loaded, building map") # ^--------------------------------------------------------------^ # Loads backgrounds and overlays, optimised in case # the same ones are used # v--------------------------------------------------------------v self.mod_logger.debug("Loading Backgrounds") self.oldComponentPaths = self.componentPaths.copy() for key in self.componentPaths.keys(): self.componentPaths[key] = pjoin("resources", "backgrounds", levelconfig["Level Components"] [key]) if self.componentPaths[key] != self.oldComponentPaths[key]: self.components[key] = pygame.image.load( self.componentPaths[key]).convert_alpha() self.hasOverlay = levelconfig["Level Components"]["overlay"]\ is not None if self.hasOverlay: self.overpath = pjoin("resources", "overlays", levelconfig["Level Components"] ["overlay"]) if self.overpath != self.oldoverpath: self.overlay = pygame.image.load(self.overpath).convert_alpha() # ^--------------------------------------------------------------^ # Creates all the mobile obstacles # v--------------------------------------------------------------v self.obstacles = tmx.SpriteLayer() for obstacle in self.tilemap.layers['Triggers'].find('Obstacle'): Obstacle((obstacle.px, obstacle.py), ("v" in obstacle['Obstacle']), obstacle['ObsSpeed'], None, self.obstacles, preloaded_ani=self.preloaded_sprites["glitches"]) self.tilemap.layers.append(self.obstacles) # ^--------------------------------------------------------------^ # Creates all the triggerable platforms # v--------------------------------------------------------------v for platform in self.tilemap.layers['Triggers'].find('Platform'): bouncy = "bouncyplat" in platform bouncepwr = int(platform['bouncyplat']) if bouncy else 0 TriggerablePlatform( platform.px, platform.py, ("v" in platform['Platform']), bouncepwr, int(platform['PlatSpeed']), int(platform['PlatSize']), False, platform['id'], self.plats, game=self, bouncy=bouncy, image=self.preloaded_sprites["platforms"]) self.tilemap.layers.append(self.plats) # Creates all the lasers # v--------------------------------------------------------------v self.lasers = tmx.SpriteLayer() for laser in self.tilemap.layers['Triggers'].find('Laser'): time = laser['Laser'] number = 0 if 'id' in laser: number = laser['id'] size = (laser.width, laser.height) vertical = size[1] > size[0] definingsize = size[1] if vertical else size[0] Laser(definingsize, vertical, time, number, (laser.px, laser.py), self.lasers) self.tilemap.layers.append(self.lasers) # ^--------------------------------------------------------------^ # Creates all the buttons # v--------------------------------------------------------------v self.btns = tmx.SpriteLayer() for btn in self.tilemap.layers['Triggers'].find('button'): ident = btn['button'] password = None msg="" if "password" in btn: password = btn["password"] if "message" in btn: msg = btn["message"] button((btn.px, btn.py), ident, password, self.btns, message=msg) self.tilemap.layers.append(self.btns) # ^--------------------------------------------------------------^ # Creates all the checkpoints # v--------------------------------------------------------------v self.checkpoints = tmx.SpriteLayer() for chk in self.tilemap.layers["Triggers"].find('CheckPoint'): checkPoint((chk.px, chk.py), self.checkpoints) self.tilemap.layers.append(self.checkpoints) # ^--------------------------------------------------------------^ # Creates all the glitch toggles # v--------------------------------------------------------------v for trig in self.tilemap.layers['Triggers'].find('ToggleGlitch'): if "message" in trig: msg = trig["message"] else: msg = "" self.GlitchTriggers.add(CollectibleTrigger( trig.px, trig.py, self, trig['ToggleGlitch'], preloaded_animation=self.preloaded_sprites[ "collectibleitem" ], message=msg)) self.tilemap.layers.append(self.GlitchTriggers) # ^--------------------------------------------------------------^ # In case of critical failure modes, further garbles # level title texts, then renders the title # v--------------------------------------------------------------v if self.gameStatus["mode"] in ["criticalfailure", "cfsingle"]: self.titletxt = makeMoreGlitched( str(levelconfig['Level Info']['Name']), 50) else: self.titletxt = str(levelconfig['Level Info']['Name']) self.title = makeGlitched(self.titletxt, self.font) # ^--------------------------------------------------------------^ # Finds the center position of the title # v--------------------------------------------------------------v center = (self.screensize[0] - int(self.title.get_rect().width))/2 self.titleposition = (center, self.gsize[1] + 2) # ^--------------------------------------------------------------^ self.mod_logger.info("Map Loaded and built Successfully") # ^--------------------------------------------------------------^ if self.config["General"]["autosaving"] and self.SaveFile: self.mod_logger.debug("Saved with data: {0}" % self.gameStatus) with open(self.SaveFile, "w") as savefile: savefile.write(json.dumps(self.gameStatus)) """self.mod_logger.info("Game autosaved on the file: {0}" % (self.SaveFile))""" message = levelconfig["Message"] if message != "": self.showMessage = True self.messageSurf = animatedText(message)