2016-11-11 2 views
1

Я изучаю python в течение последних нескольких месяцев, и сейчас я пытаюсь создать текстовую приключенческую игру. Требования к программе/настройке следующие:Проблемы с приложением текста на Python с хранением данных

Создайте текстовую приключенческую игру с 4 уровнями на основе выбора, сделанного пользователем.

Каждый уровень должен иметь три разных варианта, основанных на выбранных вами вариантах.

Так, например, уровень 1 имеет 3 варианта, каждый из которых доводит вас до уровня 2. Основываясь на выборе, сделанном вами на уровне 1, у вас теперь будет еще 3 варианта, в результате чего уровень 1 будет иметь 3 варианта, уровень 2 будет иметь 9, уровень 3 с 27 и уровень 4 с 81.

В моем коде у меня есть базовая настройка для создания подсказок и вариантов, но я изо всех сил пытаюсь найти способ связать каждое конкретное приглашение с тремя вариантами.

Вот мой код до сих пор:

# every prompt has an associated 3 choices with it, and every 
    choice made has a prompt with three more choices to be made 
    associated with it. 


def print_segment(prompt, choice1, choice2, choice3): 
    print(prompt) 
    print("[A] " + choice1) 
    print("[B] " + choice2) 
    print("[C] " + choice3) 
    answer = input().lower() 
    if answer == "A": # if answer is A, print the next prompt associated with A 
    if answer == "B": # if answer is B, print the next prompt associated with B 
    if answer == "C": # if answer is C, print the next prompt associated with C 


# level 1 choices 
level1_choice1 = "Go to the scene of the most recent murder." 
level1_choice2 = "Go to the scene of the first murder." 
level1_choice3 = "Wait a few hours and see how the situation develops." 

# level 1 prompts 
level1_prompt1 = '''You are a murder investigator and you are tasked on the case of a mysterious string of killings 
that have happened in the past few weeks. How do you start?''' 

# level 2 prompts 
level2_prompt1 = "You arrive at the scene of the most recent murder. What would you like to do first?" 
level2_prompt2 = "You arrive at the scene of the first murder. What would you like to do first?" 
level3_prompt3 = "You receive a letter from an unknown source saying that you should meet them at a specific location. What do you do?" 

print_segment(level1_prompt1, level1_choice1, level1_choice2, level1_choice3) 

Я пытаюсь быть настолько тщательным, насколько это возможно с этим объяснением, так вещи не запутаться, но я ищу помощь в основном в моем print_segment функция. Комментарии описывают проблему, с которой я столкнулся, и мне интересно, как хранить все данные запроса и выбора. Было бы лучше создать словарь подсказок с тремя вариантами? Если я это сделаю, как бы мне связать уровень1_choice1 с level2_prompt1?

Дайте мне знать, если что-то неясно.

Большое спасибо!

+0

Хотя это может быть не лучшее представление, вы можете * использовать словарь здесь. Внешние ключи - это выбор первого уровня со словарем оставшихся возможностей, учитывая этот выбор, как значения. Это будет пример структурной рекурсии. – BlackVegetable

ответ

1

Это - структура, которую вы обслуживаете?

choices = { 
    1 : { 'prompt' : { 
      'prompt' : 'Level 1 prompt', 
      'A' : 'Choice A', 
      'B' : 'Choice B', 
      'C' : 'Choice C' }, 
     }, 
    2 : { 'promptA' : { 
      'prompt' : 'Level 2 prompt A', 
      'A' : 'A Choice A', 
      'B' : 'A Choice B', 
      'C' : 'A Choice C' }, 
      'promptB' : { 
      'prompt' : 'Level 2 prompt B', 
      'A' : 'B Choice A', 
      'B' : 'B Choice B', 
      'C' : 'B Choice C' }, 
      'promptC' : { 
      'prompt' : 'Level 2 prompt C', 
      'A' : 'C Choice A', 
      'B' : 'C Choice B', 
      'C' : 'C Choice C' }, 
     }, 
    3 : { 'promptA' : { 
      'prompt' : 'Level 3 prompt A', 
      'A' : 'A Choice A', 
      'B' : 'A Choice B', 
      'C' : 'A Choice C' }, 
      'promptB' : { 
      'prompt' : 'Level 3 prompt B', 
      'A' : 'B Choice A', 
      'B' : 'B Choice B', 
      'C' : 'B Choice C' }, 
      'promptC' : { 
      'prompt' : 'Level 3 prompt C', 
      'A' : 'C Choice A', 
      'B' : 'C Choice B', 
      'C' : 'C Choice C' }, 
     } 
    } 

def print_segment(level, prev_choice = ''): 
    d = choices.get(level).get('prompt' + prev_choice) 
    print(d.get('prompt')) 
    for c in 'ABC': 
     print("[{}] {}".format(c, d.get(c))) 

# Output 
>>> print_segment(1) 
Level 1 prompt 
[A] Choice A 
[B] Choice B 
[C] Choice C 
>>> print_segment(2, 'A') 
Level 2 prompt A 
[A] A Choice A 
[B] A Choice B 
[C] A Choice C 
>>> print_segment(3, 'B') 
Level 3 prompt B 
[A] B Choice A 
[B] B Choice B 
[C] B Choice C 
+0

Да, это именно то, что я искал, спасибо! –

1

Похоже, что лучший способ справиться с этим - это два двухмерных массива - один для подсказок и один для выбора. Первый индекс будет указывать уровень, а следующий будет указывать, какой запрос/выбор он есть. Это будет выглядеть примерно так:

prompts = [["Go to the scene of the most recent murder.", 
      "Go to the scene of the first murder.", 
      "Wait a few hours and see how the situation develops."], 
      ["You arrive at the scene of the most recent murder. What would you like to do first?", 
      "..."]] 

Затем, доступ сказать второй запрос на первом уровне, вы бы просто получить доступ к prompt[0][1]. Затем вы легко сможете отслеживать индексы, чтобы выбрать, какие приглашения/варианты вы хотите показать пользователю.

+0

Как вы представляете, например, путь «выбор 1, 2, 0, 1'? Предлагаемый двухуровневый массив не позволит использовать последовательность предыдущих решений, определяющих будущие параметры. Если я правильно ее понимаю, это представление будет содержать только подсказки '# Levels * 3 = 12', в то время как автор указал необходимость« 3 + 9 + 27 + 81 = 120 подсказок ». – BlackVegetable

+0

Я предполагал, что у OP уже был какой-то способ отслеживания пути через игру, и он искал способ представить все подсказки, чтобы им не нужно было вручную указывать кучу имен переменных. Если вопрос заключается в том, как отслеживать путь, тогда они должны использовать список int (который будет представлять индексы массива выбора, которые были приняты на каждом уровне). – user3030010

+0

А, я думаю, я следую за тобой. Если вы переместите это предположение в тело вашего ответа, я дам ему +1. – BlackVegetable

Смежные вопросы