def __init__(self, screen): print("Initializing Lumidify Isometric Engine (LIE) Version 1.0 ...") self.screen = screen self.screen.blit(FONT.render("Loading...", True, (255, 255, 255)), (0, 0)) self.screen.blit( FONT.render("Remember - patience is a virtue.", True, (255, 255, 255)), (0, 40)) pygame.display.update() self.tiles, self.obstacles, self.characters, self.items, self.bullets = load_tiles( ) self.floor = Floor(self.screen, self.tiles) self.obstacles = Obstacles(self.screen, self.obstacles, self.characters, self.items, self.bullets, self) temp = self.obstacles.characters["GUB"].copy() temp["weapon"] = None self.player = Montag(self.screen, x=0, y=0, obstaclemap=self.obstacles, **temp) self.obstacles.player = self.player self.game_variables = {} self.active_layer = 0 self.screen_offset = [0, 0] self.loaded_maps = {} self.saved_maps = [] self.current_map = "" self.wongame = False self.lostgame = False self.show_fps = True
def __init__(self, screen): print("Initializing Lumidify Isometric Engine (LIE) Version 1.0 ...") self.screen = screen self.screen.blit(FONT.render("Loading...", True, (255, 255, 255)), (0, 0)) self.screen.blit(FONT.render("Patience is a virtue.", True, (255, 255, 255)), (0, 40)) pygame.display.update() self.tiles, self.obstacles, self.characters, self.items, self.bullets = load_tiles() self.floor = Floor(self.screen, self.tiles) self.obstacles = Obstacles(self.screen, self.obstacles, self.characters, self.items, self.bullets, self) temp = self.obstacles.characters["GUB"].copy() temp["weapon"] = None self.player = Montag(self.screen, x=0, y=0, obstaclemap=self.obstacles, **temp) self.obstacles.player = self.player self.game_variables = {} self.active_layer = 0 self.screen_offset = [0, 0] self.loaded_maps = {} self.saved_maps = [] self.current_map = "" self.wongame = False self.lostgame = False
class Engine(): def __init__(self, screen): print("Initializing Lumidify Isometric Engine (LIE) Version 1.0 ...") self.screen = screen self.screen.blit(FONT.render("Loading...", True, (255, 255, 255)), (0, 0)) self.screen.blit(FONT.render("Patience is a virtue.", True, (255, 255, 255)), (0, 40)) pygame.display.update() self.tiles, self.obstacles, self.characters, self.items, self.bullets = load_tiles() self.floor = Floor(self.screen, self.tiles) self.obstacles = Obstacles(self.screen, self.obstacles, self.characters, self.items, self.bullets, self) temp = self.obstacles.characters["GUB"].copy() temp["weapon"] = None self.player = Montag(self.screen, x=0, y=0, obstaclemap=self.obstacles, **temp) self.obstacles.player = self.player self.game_variables = {} self.active_layer = 0 self.screen_offset = [0, 0] self.loaded_maps = {} self.saved_maps = [] self.current_map = "" self.wongame = False self.lostgame = False def savegame(self): if not os.path.isdir("save"): os.mkdir("save") for path, item in self.loaded_maps.items(): final_path = os.path.join("save", path) if not os.path.exists(final_path): os.makedirs(final_path) self.obstacles.save(final_path, item["characters"] + item["dead_characters"], item["item_map"], item["triggers"], item["obstacles"]) self.floor.save(os.path.join(final_path, "floor.py"), item["floor"]) with open(os.path.join(final_path, "config.py"), "w") as f: f.write("config = " + repr(item["config"])) if not os.path.exists(os.path.join("save", self.current_map)): os.makedirs(os.path.join("save", self.current_map)) self.obstacles.save(os.path.join("save", self.current_map), self.obstacles.charactermap + self.obstacles.dead_characters, self.obstacles.item_map, self.obstacles.triggers, self.obstacles.layers) self.floor.save(os.path.join("save", self.current_map, "floor.py"), self.floor.layers) with open(os.path.join("save", self.current_map, "config.py"), "w") as f: f.write("config = " + repr(self.config)) player_config = {"dead": self.player.dead, "grid_pos": self.player.grid_pos.copy(), "current_map": self.current_map, "won": self.wongame, "lost": self.lostgame, "inventory": self.player.get_inventory(), "health": self.player.health} with open(os.path.join("save", "config.py"), "w") as f: f.write("player_config = " + repr(player_config)) def load_game(self): if os.path.isdir("save"): player_config = load_module(os.path.join("save", "config.py")).player_config.copy() self.player.reset() self.player.dead = player_config["dead"] self.player.load_inventory(player_config["inventory"]) self.saved_maps = os.listdir("save") self.current_map = player_config["current_map"] self.player.health = player_config["health"] self.saved_maps = os.listdir("save") self.load_map(self.current_map, spawn_pos=player_config["grid_pos"]) if player_config["won"]: self.wingame() elif player_config["lost"]: self.losegame() def load_map(self, path, **kwargs): if path in self.saved_maps: self.saved_maps.remove(path) path = os.path.join("save", path) if self.current_map: self.loaded_maps[self.current_map] = {} self.loaded_maps[self.current_map]["floor"] = self.floor.layers.copy() self.loaded_maps[self.current_map]["obstacles"] = self.obstacles.layers.copy() self.loaded_maps[self.current_map]["characters"] = self.obstacles.charactermap.copy() self.loaded_maps[self.current_map]["dead_characters"] = self.obstacles.dead_characters.copy() self.loaded_maps[self.current_map]["item_map"] = self.obstacles.item_map.copy() self.loaded_maps[self.current_map]["bullets"] = self.obstacles.bullets.copy() self.loaded_maps[self.current_map]["triggers"] = self.obstacles.triggers.copy() self.loaded_maps[self.current_map]["config"] = self.config.copy() if path.startswith("save"): self.current_map = path[5:] else: self.current_map = path if path in self.loaded_maps: self.floor.layers = self.loaded_maps[path]["floor"].copy() self.obstacles.layers = self.loaded_maps[path]["obstacles"].copy() self.obstacles.charactermap = self.loaded_maps[path]["characters"].copy() self.obstacles.dead_characters = self.loaded_maps[path]["dead_characters"].copy() self.obstacles.item_map = self.loaded_maps[path]["item_map"].copy() self.obstacles.bullets = self.loaded_maps[path]["bullets"].copy() self.obstacles.triggers = self.loaded_maps[path]["triggers"].copy() self.config = self.loaded_maps[path]["config"].copy() else: self.floor.load_tilemap(os.path.join(path, "floor.py")) self.obstacles.load_obstaclemap(os.path.join(path, "obstacles.py")) self.obstacles.load_charactermap(os.path.join(path, "characters.py")) self.obstacles.load_item_map(os.path.join(path, "items.py")) self.obstacles.load_triggermap(os.path.join(path, "triggers.py")) self.obstacles.dead_characters = [] self.obstacles.bullets = [] self.config = load_module(os.path.join(path, "config.py")).config.copy() try: pygame.mixer.music.load(self.config.get("music", "Search_Art_S31_Undercover_Operative_0.ogg")) pygame.mixer.music.play(-1) except: pass if kwargs.get("spawn_pos", None): self.player.grid_pos = kwargs["spawn_pos"].copy() else: self.player.grid_pos = self.config.get("spawn_pos", [0, 0]).copy() self.player.reset() mapsize = self.config.get("level_dimensions", [50, 50]) self.obstacles.change_size(mapsize) self.obstacles.refresh_trigger_quadtree() self.obstacles.refresh_grid() def update(self, event=None): if not self.wongame: screen_size = self.screen.get_size() isox = (self.player.grid_pos[0] - self.player.grid_pos[1]) * (ISOWIDTH // 2) isoy = (self.player.grid_pos[0] + self.player.grid_pos[1]) * (ISOHEIGHT // 2) self.screen_offset = [screen_size[0] // 2 - isox, screen_size[1] // 2 - isoy] current_time = pygame.time.get_ticks() self.floor.update(current_time) self.obstacles.update(current_time=current_time, event=event) if event and event.type == KEYDOWN: if event.key == K_F3: self.savegame() elif event.key == K_F4: self.load_game() def wingame(self): self.wongame = True pygame.mixer.music.load("wingame.ogg") pygame.mixer.music.play(-1) def losegame(self): self.lostgame = True pygame.mixer.music.load("Sad_Piano_3.ogg") pygame.mixer.music.play(-1) def draw(self): self.floor.draw(self.screen_offset) self.obstacles.draw(self.screen_offset) if self.wongame: screen.blit(FONT.render("Congratulations, you won!", True, (255, 255, 255)), (0, 0)) elif self.lostgame: screen.blit(FONT.render("Shame be upon you! You lost!", True, (255, 255, 255)), (0, 0)) self.screen.blit(FONT.render("Health: " + str(self.player.health), True, (255, 255, 255)), (self.screen.get_size()[0] - 200, 0))
class Engine(): def __init__(self, screen): print("Initializing Lumidify Isometric Engine (LIE) Version 1.0 ...") self.screen = screen self.screen.blit(FONT.render("Loading...", True, (255, 255, 255)), (0, 0)) self.screen.blit( FONT.render("Remember - patience is a virtue.", True, (255, 255, 255)), (0, 40)) pygame.display.update() self.tiles, self.obstacles, self.characters, self.items, self.bullets = load_tiles( ) self.floor = Floor(self.screen, self.tiles) self.obstacles = Obstacles(self.screen, self.obstacles, self.characters, self.items, self.bullets, self) temp = self.obstacles.characters["GUB"].copy() temp["weapon"] = None self.player = Montag(self.screen, x=0, y=0, obstaclemap=self.obstacles, **temp) self.obstacles.player = self.player self.game_variables = {} self.active_layer = 0 self.screen_offset = [0, 0] self.loaded_maps = {} self.saved_maps = [] self.current_map = "" self.wongame = False self.lostgame = False self.show_fps = True def savegame(self): if not os.path.isdir("save"): os.mkdir("save") for path, item in self.loaded_maps.items(): final_path = os.path.join("save", path) if not os.path.exists(final_path): os.makedirs(final_path) self.obstacles.save(final_path, item["characters"] + item["dead_characters"], item["item_map"], item["triggers"], item["obstacles"]) self.floor.save(os.path.join(final_path, "floor.py"), item["floor"]) with open(os.path.join(final_path, "config.py"), "w") as f: f.write("config = " + repr(item["config"])) if not os.path.exists(os.path.join("save", self.current_map)): os.makedirs(os.path.join("save", self.current_map)) self.obstacles.save( os.path.join("save", self.current_map), self.obstacles.charactermap + self.obstacles.dead_characters, self.obstacles.item_map, self.obstacles.triggers, self.obstacles.layers) self.floor.save(os.path.join("save", self.current_map, "floor.py"), self.floor.layers) with open(os.path.join("save", self.current_map, "config.py"), "w") as f: f.write("config = " + repr(self.config)) player_config = { "dead": self.player.dead, "grid_pos": self.player.grid_pos.copy(), "current_map": self.current_map, "won": self.wongame, "lost": self.lostgame, "inventory": self.player.get_inventory(), "health": self.player.health } with open(os.path.join("save", "config.py"), "w") as f: f.write("player_config = " + repr(player_config)) def load_game(self): if os.path.isdir("save"): self.wongame = False self.lostgame = False player_config = load_module(os.path.join( "save", "config.py")).player_config.copy() self.player.reset() self.player.dead = player_config["dead"] self.player.load_inventory(player_config["inventory"]) self.saved_maps = os.listdir("save") self.current_map = player_config["current_map"] self.player.health = player_config["health"] self.saved_maps = [ os.path.join("maps", x) for x in os.listdir("save/maps") ] self.loaded_maps = {} self.load_map(self.current_map, spawn_pos=player_config["grid_pos"]) if player_config["won"]: self.wingame() elif player_config["lost"]: self.losegame() def load_map(self, path, **kwargs): if path in self.saved_maps: self.saved_maps.remove(path) path = os.path.join("save", path) self.current_map = None if self.current_map: self.loaded_maps[self.current_map] = {} self.loaded_maps[ self.current_map]["floor"] = self.floor.layers.copy() self.loaded_maps[ self.current_map]["obstacles"] = self.obstacles.layers.copy() self.loaded_maps[self.current_map][ "characters"] = self.obstacles.charactermap.copy() self.loaded_maps[self.current_map][ "dead_characters"] = self.obstacles.dead_characters.copy() self.loaded_maps[ self.current_map]["item_map"] = self.obstacles.item_map.copy() self.loaded_maps[ self.current_map]["bullets"] = self.obstacles.bullets.copy() self.loaded_maps[ self.current_map]["triggers"] = self.obstacles.triggers.copy() self.loaded_maps[self.current_map]["config"] = self.config.copy() if path.startswith("save"): self.current_map = path[5:] else: self.current_map = path if path in self.loaded_maps: self.floor.layers = self.loaded_maps[path]["floor"].copy() self.obstacles.layers = self.loaded_maps[path]["obstacles"].copy() self.obstacles.charactermap = self.loaded_maps[path][ "characters"].copy() self.obstacles.dead_characters = self.loaded_maps[path][ "dead_characters"].copy() self.obstacles.item_map = self.loaded_maps[path]["item_map"].copy() self.obstacles.bullets = self.loaded_maps[path]["bullets"].copy() self.obstacles.triggers = self.loaded_maps[path]["triggers"].copy() self.config = self.loaded_maps[path]["config"].copy() else: self.floor.load_tilemap(os.path.join(path, "floor.py")) self.obstacles.load_obstaclemap(os.path.join(path, "obstacles.py")) self.obstacles.load_charactermap( os.path.join(path, "characters.py")) self.obstacles.load_item_map(os.path.join(path, "items.py")) self.obstacles.load_triggermap(os.path.join(path, "triggers.py")) self.obstacles.dead_characters = [] self.obstacles.bullets = [] self.config = load_module(os.path.join(path, "config.py")).config.copy() try: pygame.mixer.music.load(self.config.get("music", "Betrayed.ogg")) pygame.mixer.music.play(-1) except: pass if kwargs.get("spawn_pos", None): self.player.grid_pos = kwargs["spawn_pos"].copy() else: self.player.grid_pos = self.config.get("spawn_pos", [0, 0]).copy() self.player.reset() mapsize = self.config.get("level_dimensions", [50, 50]) self.obstacles.change_size(mapsize) self.obstacles.refresh_trigger_quadtree() self.obstacles.refresh_grid() def update(self, event=None): if not self.wongame: screen_size = self.screen.get_size() isox = (self.player.grid_pos[0] - self.player.grid_pos[1]) * (ISOWIDTH // 2) isoy = (self.player.grid_pos[0] + self.player.grid_pos[1]) * (ISOHEIGHT // 2) self.screen_offset = [ screen_size[0] // 2 - isox, screen_size[1] // 2 - isoy ] current_time = pygame.time.get_ticks() self.floor.update(current_time) self.obstacles.update(current_time=current_time, event=event) if event and event.type == KEYDOWN: if event.key == K_F3: self.savegame() elif event.key == K_F4: self.load_game() elif event.key == K_F11: self.show_fps = not self.show_fps def wingame(self): self.wongame = True pygame.mixer.music.load("wingame.ogg") pygame.mixer.music.play(-1) def losegame(self): self.lostgame = True pygame.mixer.music.load("Sad_Piano_3.ogg") pygame.mixer.music.play(-1) def draw(self): self.floor.draw(self.screen_offset) self.obstacles.draw(self.screen_offset) if self.wongame: screen.blit( FONT.render("Congratulations, you won!", True, (255, 255, 255)), (0, 0)) elif self.lostgame: screen.blit( FONT.render("Shame be upon you! You lost!", True, (255, 255, 255)), (0, 0)) self.screen.blit( FONT.render("Health: " + str(self.player.health), True, (255, 255, 255)), (self.screen.get_size()[0] - 200, 0)) if self.show_fps: self.screen.blit( FONT.render("FPS: " + str(round(clock.get_fps(), 2)), True, (255, 255, 255)), (self.screen.get_size()[0] - 400, 0))