def game_loop(): """ Game loop. """ input(text.start) while True: dmap, discovered_map, pos_x, pos_y, treasure_number = init_game() is_player_alive = True is_treasure_collected = False total_treasure = treasure_number input(random.choice(text.go_to_dungeon)) input(random.choice(text.enter_dungeon)) dmap, discovered_map, pos_x, pos_y, treasure_number,\ is_player_alive, is_treasure_collected = \ enter_room(dmap, discovered_map, pos_x, pos_y, text.entrance, treasure_number, is_player_alive, is_treasure_collected) while is_player_alive and not is_treasure_collected: dmap, discovered_map, pos_x, pos_y, treasure_number,\ is_player_alive, is_treasure_collected = \ process_player_commands(dmap, discovered_map, pos_x, pos_y, treasure_number, is_player_alive, is_treasure_collected) if is_player_alive: input(random.choice(text.won)) else: input(random.choice(text.lost)) print(text.game_statistics.format(*[total_treasure - treasure_number, total_treasure])) map_generator.print_dungeon_map(dmap) print(text.end_map_description) user_input = input(text.play_again_prompt).lower() if user_input == 'y' or user_input == 'yes': continue elif user_input == 'n' or user_input == 'no': break user_input = input(text.play_again_hint).lower() if user_input != 'y' and user_input != 'yes': break
def process_player_commands(dmap, discovered_map, pos_x, pos_y, treasure_number, is_player_alive, is_treasure_collected): """ Process player commands. """ user_input = input(text.action_prompt).lower() while not user_input in actions.keys() and not user_input in actions.values(): user_input = input(text.action_wrong).lower() if user_input == 'view map' or user_input == actions['view map']: printed_map = copy.deepcopy(discovered_map) printed_map[pos_x][pos_y] = map_generator.tiles['player'] map_generator.print_dungeon_map(printed_map) user_input = input(text.legend_prompt).lower() if user_input == 'l': input(text.legend) else: for direction in directions.keys(): if (" ".join(['go', direction]) == user_input or actions["".join(['go ', direction])] == user_input): if map_generator.is_position_in_map(dmap, pos_x + directions[direction][0], pos_y + directions[direction][1]): pos_x += directions[direction][0] pos_y += directions[direction][1] dmap, discovered_map, pos_x, pos_y, treasure_number,\ is_player_alive, is_treasure_collected = \ enter_room(dmap, discovered_map, pos_x, pos_y, direction_opposites[direction], treasure_number, is_player_alive, is_treasure_collected) else: print(random.choice(text.no_passage)) break return dmap, discovered_map, pos_x, pos_y, treasure_number, is_player_alive, is_treasure_collected
def game_loop(): """ Game loop. """ while True: is_game_started = False is_player_alive = True treasure_collected = 0 if os.path.isfile("./{}".format(SAVE_FILE_NAME)): logger.info(text.load_or_new_game_prompt) user_input = input().lower() if (user_input == "load"): dmap, discovered_map, pos_x, pos_y,\ treasure_collected = load_game() treasure_number = map_generator.count_tiles_of_type( dmap, 'treasure') is_game_started = True logger.info(random.choice(text.load_game_start)) input() dmap, discovered_map, pos_x, pos_y, treasure_number,\ treasure_collected, is_player_alive= \ enter_room(dmap, discovered_map, pos_x, pos_y, random.choice(text.enter_room_wake_up), treasure_number, treasure_collected, is_player_alive) if not is_game_started: logger.info(text.start) input() dmap, discovered_map, pos_x, pos_y, treasure_number = init_game() logger.debug("new game initialized") total_treasure = treasure_number logger.info(random.choice(text.go_to_dungeon)) input() logger.info(random.choice(text.enter_dungeon)) input() dmap, discovered_map, pos_x, pos_y, treasure_number,\ treasure_collected, is_player_alive= \ enter_room(dmap, discovered_map, pos_x, pos_y, text.entrance, treasure_number, treasure_collected, is_player_alive) while is_player_alive and treasure_number != 0: dmap, discovered_map, pos_x, pos_y, treasure_number,\ treasure_collected, is_player_alive = \ process_player_commands(dmap, discovered_map, pos_x, pos_y, treasure_number, treasure_collected, is_player_alive) input() if is_player_alive: logger.info(random.choice(text.won)) logger.debug("player won") else: logger.info(random.choice(text.lost)) logger.debug("player lost") logger.info( text.game_statistics.format( * [treasure_collected, treasure_collected + treasure_number])) input() map_generator.print_dungeon_map(dmap) logger.info(text.end_map_description) input() logger.info(text.play_again_prompt) logger.debug("expecting play again confirmation input from user") user_input = input().lower() if user_input == 'y' or user_input == 'yes': logger.debug("user decides to play again") continue elif user_input == 'n' or user_input == 'no': logger.debug("user decides not to play again") break logger.info(text.play_again_hint) logger.debug("incorrect input from user") logger.debug("expecting play again confirmation input from user") user_input = input().lower() if user_input != 'y' and user_input != 'yes': logger.debug("user decides not to play again") break logger.debug("user decides to play again")
def process_player_commands(dmap, discovered_map, pos_x, pos_y, treasure_number, treasure_collected, is_player_alive): """ Process player commands. """ logger.info(text.action_prompt) user_input = input().lower() while not user_input in actions.keys( ) and not user_input in actions.values(): logger.info(text.action_wrong) logger.debug("user enters incorrect input") user_input = input().lower() if user_input == 'view map' or user_input == actions['view map']: logger.debug("player views map") printed_map = copy.deepcopy(discovered_map) printed_map[pos_x][pos_y] = map_generator.tiles['player'] map_generator.print_dungeon_map(printed_map) logger.info(text.legend_prompt) user_input = input().lower() if user_input == 'l': logger.debug("player views legend") input(text.legend) elif user_input == 'save' or user_input == actions['save']: logger.debug("user attempts save game") save_game(dmap, discovered_map, pos_x, pos_y, treasure_collected) logger.info(random.choice(text.fall_asleep_1)) logger.info(random.choice(text.fall_asleep_2)) elif user_input == 'load' or user_input == actions['load']: logger.debug("user attempts load game") if os.path.isfile("./{}".format(SAVE_FILE_NAME)): dmap, discovered_map, pos_x, pos_y,\ treasure_collected = load_game() logger.info(random.choice(text.load_game_ingame)) dmap, discovered_map, pos_x, pos_y, treasure_number,\ treasure_collected, is_player_alive = \ enter_room(dmap, discovered_map, pos_x, pos_y, random.choice(text.enter_room_wake_up), treasure_number, treasure_collected, is_player_alive) else: logger.debug("no save file exist to load") logger.info(random.choice(text.no_save_file_ingame)) else: for direction in directions.keys(): if (" ".join(['go', direction]) == user_input or actions["".join(['go ', direction])] == user_input): logger.debug("player attemots to go {} to".format( direction, pos_x + directions[direction][0], pos_y + directions[direction][1])) if map_generator.is_position_in_map( dmap, pos_x + directions[direction][0], pos_y + directions[direction][1]): pos_x += directions[direction][0] pos_y += directions[direction][1] dmap, discovered_map, pos_x, pos_y, treasure_number,\ treasure_collected, is_player_alive = \ enter_room(dmap, discovered_map, pos_x, pos_y, direction_opposites[direction], treasure_number, treasure_collected, is_player_alive) else: logger.info(random.choice(text.no_passage)) logger.debug("player can't go {} to".format( direction, pos_x + directions[direction][0], pos_y + directions[direction][1])) break return dmap, discovered_map, pos_x, pos_y, treasure_number, treasure_collected, is_player_alive