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)
Ejemplo n.º 2
0
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}')