def generate_map(): traps = generate_traps() treasures = generate_treasures() traps_replacement = [-1 for i in traps] treasures_replacement = [1 for i in treasures] m_logger.debug(f'map_generating: start map generating') global game_map game_map = [0 for i in range(mapsize) for j in range(mapsize)] m_logger.debug(f'map_generating: empty map as list generated') for (trap, replacement) in zip(traps, traps_replacement): game_map[trap] = replacement m_logger.debug(f'map_generating: traps spawned on map') for (treasure, replacement) in zip(treasures, treasures_replacement): game_map[treasure] = replacement m_logger.debug(f'map_generating: start treasure generation') game_map = [ game_map[i * mapsize:(i + 1) * mapsize] for i in range(mapsize) ] m_logger.debug(f'map_generating: map splited in rows')
def input_player_choice(): m_logger.info('Where do you want to move: ') player_choice = input() m_logger.debug(f'dungeon_game : player inputed {player_choice}') player_choice.casefold() if player_choice == 'save': m_logger.debug('dungeon_game : player want to save game') save_game() else: DIRECTIONS = ['up', 'down', 'left', 'right'] while not player_choice in DIRECTIONS: m_logger.debug('dungeon_game : player typed something wrong') m_logger.info( "I'm sorry, I don't understand where do you want to go.\nTry once more: " ) player_choice = input() m_logger.debug( f'dungeon_game : player inputed {player_choice} as new direction' ) player_choice.casefold() m_logger.debug( f'dungeon_game : success! player inputed right direction') return player_choice
def set_loaded_data(data): m_logger.debug(f'game_step : starting data loading') mg.mapsize = data[0] mg.game_map = data[1] m_logger.debug(f'game_step : data loaded') global is_player_lost is_player_lost = False global is_player_won is_player_won = False
def notify_player_about_treasures(): neighbour_values = get_neighbour_values() m_logger.debug(f'game_step : got list of neighbour cells') neighbour_values.sort(reverse = True) m_logger.debug(f'game_step : sorted (reverse = True) list of neighbour cells') has_treasures = neighbour_values[0] == 1 if has_treasures: m_logger.info('You are close to win! Treasure is somewhere near you')
def notify_player_about_traps(): neighbour_values = get_neighbour_values() m_logger.debug(f'game_step : got list of neighbour cells') neighbour_values.sort() m_logger.debug(f'game_step : sorted list of neighbour cells') has_traps = neighbour_values[0] == -1 if has_traps: m_logger.info('Be careful! Trap is somewhere near you!')
def save_game(): m_logger.debug(f'dungeon_game : starting game saving') file = open('savefile.txt', 'wb') m_logger.debug(f'dungeon_game : opened savefile.txt in write mode') to_save = (gs.get_to_save_data(), gs.player_position) m_logger.debug(f'dungeon_game : formed data to save') pickle.dump(to_save, file) m_logger.debug(f'dungeon_game : serialized data to file') file.close() m_logger.debug(f'dungeon_game : closed file')
def load_game(): m_logger.debug(f'dungeon_game : starting game loading') file = open('savefile.txt', 'rb') m_logger.debug(f'dungeon_game : opened file in read mode') loaded = pickle.load(file) m_logger.debug(f'dungeon_game : loaded data') gs.set_loaded_data(loaded[0]) gs.player_position = loaded[1] m_logger.debug(f'dungeon_game : set data to game_step module') file.close() m_logger.debug(f'dungeon_game : closed file')
def spawn_player(): player_position = choice(range(mapsize * mapsize)) m_logger.debug( f'map_generating: player_position randomly generated {player_position}' ) row, col = player_position // mapsize, player_position % mapsize while game_map[row][col] == -1 or game_map[row][col] == 1: player_position = choice(range(mapsize * mapsize)) row, col = player_position // mapsize, player_position % mapsize m_logger.debug( f'map_generating: player_position generated once more {player_position}' ) return row, col
def get_neighbour_values(): m_logger.debug(f'game_step : starting list of neighbour cells forming') neighbour_cells = [[player_position[0] + direction[0], player_position[1] + direction[1]] for direction in list(DIRECTION_TO_MOVE.values())] neighbour_cells = list(filter(lambda cell: cell[0] >= 0 and cell[1] >= 0 and cell[0] < mg.mapsize and cell[1] < mg.mapsize, neighbour_cells)) m_logger.debug(f'game_step : list of neighbour cells formed') neighbour_cells_values = [mg.game_map[cell[0]][cell[1]] for cell in neighbour_cells] m_logger.debug(f'game_step : list of neighbour cells values calculated') return neighbour_cells_values
def generate_traps(): traps_amount = mapsize * mapsize // 10 m_logger.debug(f'map_generating: traps amount will be {traps_amount}') m_logger.debug(f'map_generating: start trap generating') traps = [choice(range(mapsize * mapsize)) for i in range(traps_amount)] m_logger.debug(f'map_generating: traps generated') return traps
def init_game(): m_logger.debug(f'game_step : starting game map initialization') mg.init() m_logger.debug(f'game_step : game map initialized') global player_position player_position = list(mg.spawn_player()) m_logger.debug(f'game_step : player spawned') global is_player_lost is_player_lost = False global is_player_won is_player_won = False
def new_game(): m_logger.debug(f'dungeon_game : starting game initialization') gs.init_game() m_logger.debug(f'dungeon_game : game initialized')
m_logger.debug(f'dungeon_game : closed file') def new_game(): m_logger.debug(f'dungeon_game : starting game initialization') gs.init_game() m_logger.debug(f'dungeon_game : game initialized') m_logger.info( "Do you want to play a new game or load old one?\nEnter your choice [N/L]:" ) new_or_load = input() m_logger.debug(f'dungeon_game : player inputed {new_or_load}') new_or_load.casefold() while not new_or_load in ['n', 'l']: m_logger.debug(f'dungeon_game : player inputed something wrong') m_logger.info("Try again\nEnter your choice [N/L]: ") new_or_load = input() m_logger.debug(f'dungeon_game : player inputed {new_or_load}') new_or_load.casefold() m_logger.debug(f'dungeon_game : player inputed successfully') if new_or_load == 'n': m_logger.debug(f'dungeon_game : player want to start new game') new_game()
def print_game_map(): TRAP = '#' TREASURE = '*' PLAYER = '!' EMPTY_CELL = '.' m_logger.debug(f'game_step : game map formatting to print started') game_map = mg.game_map game_map = [[TRAP if cell == -1 else cell for cell in row] for row in game_map ] m_logger.debug(f'game_step : game map traps formatted') game_map = [[TREASURE if cell == 1 else cell for cell in row] for row in game_map ] m_logger.debug(f'game_step : game map treasures formatted') game_map = [[EMPTY_CELL if cell == 0 else cell for cell in row] for row in game_map ] m_logger.debug(f'game_step : game map empty cells formatted') game_map[player_position[0]][player_position[1]] = PLAYER m_logger.debug(f'game_step : game map player position formatted') m_logger.debug(f'game_step : game map formatted') for r in game_map: print(*r) m_logger.debug(f'game_step : game map printed') m_logger.info(f'Player last position: {player_position}')
def get_to_save_data(): m_logger.debug(f'game_step : data to save ready to return') return mg.mapsize, mg.game_map
def perform_next_step(direction): global player_position old_position = list(player_position) m_logger.debug(f'game_step : saved previous position') direction_to_move = DIRECTION_TO_MOVE[direction] m_logger.debug(f'game_step : got direction to move by text value of direction') player_position[0] += direction_to_move[0] player_position[1] += direction_to_move[1] m_logger.debug(f'game_step : updated player position') if player_position[0] < 0 or player_position[1] < 0 or player_position[0] >= mg.mapsize or player_position[1] >= mg.mapsize: m_logger.info("You can't move there! You reached border!\n") m_logger.debug(f'game_step : player tried to move out from map') player_position[0] -= direction_to_move[0] player_position[1] -= direction_to_move[1] m_logger.debug(f'game_step : player position reverted') else: m_logger.info(f'Player position changed from ({old_position[1]},{old_position[0]}) to ({player_position[1]},{player_position[0]})') row, col = player_position global is_player_lost if mg.game_map[row][col] == -1: m_logger.debug(f'game_step : player lost') is_player_lost = True global is_player_won if mg.game_map[row][col] == 1: m_logger.debug(f'game_step : player won') is_player_won = True