def create_level_image(level, level_info, metrics): """Return image of whole level built from tiles.""" LOGGER.debug("Creating level image from description") season = level_info["season"] map_width = len(level[0]) * utils.TILE_SIZE map_height = len(level) * utils.TILE_SIZE image = pygame.Surface((map_width, map_height)) # blit each tile to image background = RES_MANAGER.get(":".join([season, level_info["background"], "default.png"])) for i, row in enumerate(level): for j, tile in enumerate(row): if tile: tile_image = None # select proper image if tile.type == "road": # select proper road part: crossroad, # straight_road tile_image = select_road_block((i, j), level, season) elif tile.type == "water": tile_image = select_water_block((i, j), level, season) elif tile.type == "bridge": tile_image = select_bridge_block((i, j), level, season) else: name = "default.png" image_name = ":".join([season, tile.type, name]) tile_image = RES_MANAGER.get(image_name) # blit land image as background image.blit(background, metrics.tiles_to_pixels(tile.pos)) # blit specific image for tile image.blit(tile_image, metrics.tiles_to_pixels(tile.pos)) return image
def __init__(self, scr_size, w=700, h=70): self.fontsize = 20 self.font = utils.Writer(self.fontsize - 4, (255, 0, 0)) self.background = RES_MANAGER.get('status.png', size=(w, h)) self.image = pygame.Surface((w, h)) self.pos = (scr_size[0] - w) / 2, (scr_size[1] - h) self.size = w, h self.endturn_rect = 0, 0, 0, 0
def __init__(self, state_manager, background): self.is_transparent = False self._state_manager = state_manager self._image = pygame.Surface((utils.SCREEN_SIZE)) self._background = RES_MANAGER.get(background, size=utils.SCREEN_SIZE) self._menus = [] self._init_menu()
def __init__(self, state_manager, level_name, level_info): LOGGER.debug("Creating game") LOGGER.debug("Initializing level '%s'", level_name) self.is_transparent = False self._state_manager = state_manager self._game = game.Game(level_info) self._metrics = MetricTransformer() self._game_renderer = game.GameRenderer(self._game, self._metrics) self._metrics.set_map_size(self._game_renderer.get_size()) self._name = level_name self._background = RES_MANAGER.get('game_background.jpg', size=utils.SCREEN_SIZE) self._statusbar = StatusBar(utils.SCREEN_SIZE)
def select_bridge_block(coords, level, season): name = "default.png" rotate = 0 i, j = coords # 4 relevant cells N = level[i - 1][j].type if i > 0 else "border" S = level[i + 1][j].type if i < len(level) - 1 else "border" W = level[i][j - 1].type if j > 0 else "border" E = level[i][j + 1].type if j < len(level[i]) - 1 else "border" R = ["road", "bridge", "border"] if sides_match([W, E], [N, S], R): name = "default.png" rotate = 0 elif sides_match([N, S], [W, E], R): name = "default.png" rotate = 90 full_name = ":".join([season, "bridge", name]) return RES_MANAGER.get(full_name, rotate=rotate)
def select_road_block(coords, level, season): """Select proper road part: crossroad, straight road, turn, branch.""" name = "default.png" rotate = 0 i, j = coords # 4 relevant cells N = level[i - 1][j].type if i > 0 else "border" S = level[i + 1][j].type if i < len(level) - 1 else "border" W = level[i][j - 1].type if j > 0 else "border" E = level[i][j + 1].type if j < len(level[i]) - 1 else "border" R = ["road", "bridge", "castle", "house", "border"] if sides_match([N, S, W, E], [], R): name = "crossroad.png" # branch elif sides_match([N, S, W], [E], R): name = "branch.png" elif sides_match([E, S, W], [N], R): name = "branch.png" rotate = 90 elif sides_match([N, S, E], [W], R): name = "branch.png" rotate = 180 elif sides_match([N, E, W], [S], R): name = "branch.png" rotate = 270 # straight elif sides_match([N, S], [W, E], R): name = "vertical.png" elif sides_match([W, E], [N, S], R): name = "horizontal.png" # turn elif sides_match([W, N], [E, S], R): name = "turn.png" elif sides_match([W, S], [E, N], R): name = "turn.png" rotate = 90 elif sides_match([S, E], [N, W], R): name = "turn.png" rotate = 180 elif sides_match([E, N], [W, S], R): name = "turn.png" rotate = 270 full_name = ":".join([season, "road", name]) return RES_MANAGER.get(full_name, rotate=rotate)
def select_water_block(coords, level, season): name = "default.png" rotate = 0 i, j = coords # 4 relevant cells N = level[i - 1][j].type if i > 0 else "border" S = level[i + 1][j].type if i < len(level) - 1 else "border" W = level[i][j - 1].type if j > 0 else "border" E = level[i][j + 1].type if j < len(level[i]) - 1 else "border" R = ["water", "bridge", "border"] if sides_match([N, S, W, E], [], R): name = "open.png" elif sides_match([N, S, W], [E], R): name = "shore.png" elif sides_match([S, W, E], [N], R): name = "shore.png" rotate = 90 elif sides_match([N, S, E], [W], R): name = "shore.png" rotate = 180 elif sides_match([N, W, E], [S], R): name = "shore.png" rotate = 270 elif sides_match([S, W], [N, E], R): name = "bay.png" elif sides_match([S, E], [W, N], R): name = "bay.png" rotate = 90 elif sides_match([N, E], [W, S], R): name = "bay.png" rotate = 180 elif sides_match([N, W], [S, E], R): name = "bay.png" rotate = 270 elif sides_match([N, S], [E, W], R): name = "river.png" elif sides_match([W, E], [N, S], R): name = "river.png" rotate = 90 full_name = ":".join([season, "water", name]) return RES_MANAGER.get(full_name, rotate=rotate)
def __init__(self, state_manager): super(_MainMenuState, self).__init__(state_manager, 'main_menu.jpg') LOGGER.debug("Creating main menu") self._levels = RES_MANAGER.get('levels_info')