def play_game(): """ Starts Dungeon game :return: nothing :rtype: None """ empty_space = '~' trap = 'x' treasure = '$' player = '*' result = '' game_over = False game_world = MapGenerator.generate(10, empty=empty_space, trap=trap, treasure=treasure) new_player_coordinates = setup_player_position(game_world, empty_space, player) player_coordinates = new_player_coordinates hidden = [trap, treasure] while not game_over: game_world[player_coordinates[0]][player_coordinates[1]] = empty_space game_world[new_player_coordinates[0]][new_player_coordinates[1]] = player player_coordinates = new_player_coordinates View.print_map_hide_secrets(game_world, hidden, empty_space) generate_warnings_if_required(game_world, player_coordinates, trap, treasure) new_player_coordinates = handle_user_input(game_world, player_coordinates) game_over, result = check_game_over(new_player_coordinates, game_world, trap, treasure) print(result) View.print_map(game_world)
def play_game(game_save={}): """ Starts Dungeon game :param game_save: saved game state(if any) :return: nothing :rtype: None """ main_logger.debug(f'started') empty_space = '~' explored_space = '.' trap = 'x' treasure = '$' player = '*' move_command = 'Move' save_command = 'Save' end_game_session = 'End' user_options = [move_command, save_command, end_game_session] user_prompt = '\n'.join(user_options) result = '' game_over = False if game_save == {}: game_world = MapGenerator.generate(10, empty=empty_space, trap=trap, treasure=treasure) player_coordinates = setup_player_position(game_world, empty_space, player) else: game_world = game_save['map'] player_coordinates = game_save['player'] old_player_coordinates = player_coordinates hidden = [trap, treasure] while not game_over: game_world[old_player_coordinates[0]][ old_player_coordinates[1]] = explored_space game_world[player_coordinates[0]][player_coordinates[1]] = player old_player_coordinates = player_coordinates.copy() View.print_map_hide_secrets(game_world, hidden, empty_space) generate_warnings_if_required(game_world, player_coordinates, trap, treasure) main_logger.info(user_prompt) choice = input() if choice == move_command: handle_player_move(game_world, player_coordinates) elif choice == save_command: objects = {'map': game_world, 'player': player_coordinates} DungeonSaver.save_game(objects) elif choice == end_game_session: result = 'Game over' break else: main_logger.info('Invalid input') game_over, result = check_game_over(player_coordinates, game_world, trap, treasure) main_logger.info(result) View.print_map(game_world) main_logger.debug(f'ended {result}')