Python Создаю текстовую игру, питон всё равно ругается ошибка происходит если выбираю сначала 1 ответ затем 2 или 3, дальше диалог ломается
print("Хотите начать игру? (Да/Нет)")
play = input("")
if(play == 'Да'):
print()
print("Я видел какой-то сон, кто-то тянулся к синему кристалу")
print("Потом стало темно")
print("Мне кажется я здесь не один...")
print()
print("S.T.A.L.K.E.R")
while True:
print()
print("Диалог")
print("{")
print(" Вадим: Мда, интересно как тебя сюда занесло")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.Где я? ///")
VadikDialogStarted1 = input("")
print()
while True:
if (VadikDialogStarted1 == "1"):
print(" Вы: Где я?")
print(" Вадим: Ты в Зоне. Как тебя звать?")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.В какой зоне? ///")
print("/// 2.А как тебя? ///")
print("/// 3.Я не помню своего имени.")
VadikDialogStarted2 = input("")
print()
else:
break
while True:
if (VadikDialogStarted2 == "1"):
print(" Вы: В какой зоне?")
print(" Вадим: Всмысле в какой? В Зоне Очуждения.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.В ЗОНЕ ОЧУЖДЕНИЯ?! ///")
VadikDialogStarted3 = input("")
print()
elif (VadikDialogStarted2 == "2"):
print(" Вы: А как тебя?")
print(" Вадим: Вадим.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.Приятно позакомится. ///")
Vadik_Dialog_Nice_to_meet_you = input("")
print()
elif (VadikDialogStarted2 == "3"):
print(" Вы: Я не помню своего имени.")
print(
" Вадим: Мда, плохи дела. Ну нечего, следуй за мной. Я покажу тебе дорогу в уромное местечко. Отсюда недалеко.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.Ну пойдём. ///")
Vadik_dialog_Idem_to_the_village = input("")
print()
else:
break
while True:
if (VadikDialogStarted3 == "1"):
print(" Вы: В ЗОНЕ ОЧУЖДЕНИЯ?!")
print(" Вадим: Ну да.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.Во попал! ///")
VadikDialogStarted4 = input("")
print()
elif (Vadik_Dialog_Nice_to_meet_you == "1"):
print(" Вы: Приятно познакомится")
print(" Вадим: Так как тебя зовут?")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.Не помню! ///")
print("/// 1.Я помню только 3 первых буквы 'Бро...'")
Vadik_Dialog_I_dont_remember = input("")
print()
elif (Vadik_dialog_Idem_to_the_village == "1"):
print(" Вы: Ну пойдём")
print(" Вадим: Следуй за мной")
print("}")
print()
print("A.Следовать за Вадиком")
print("B.Поговорить")
QuestStarted1 = input("Действие:")
else:
break
while True:
if (VadikDialogStarted4 == "1"):
print(" Вы: Во попал!")
print(" Вадим: Пошли за мной. Покажу укромное местечко.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.Ну пойдём ///")
VadikDialogStarted5 = input("")
print()
elif (Vadik_Dialog_I_dont_remember == "1"):
print(" Вы: Не помню!")
print(" Вадим: Какой-то ты раздражительный.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.А ты как думал? Голова пухнет, нечего не помню. ///")
print("/// 2.... ///")
Vadik_Dialog_is_Irritable = input("")
else:
break
while True:
if (VadikDialogStarted5 == "1"):
print(" Вы: Ну пойдём")
print("}")
print()
print("A.Следовать за Вадиком")
print("B.Поговорить")
QuestStarted1 = input("Действие:")
elif (Vadik_Dialog_is_Irritable == "1"):
print(" Вы: А ты как думал? Голова пухнет, нечего не помню.")
print(" Вадим: Ну ладно. Пойдём за мной, я знаю место где можно отдохнуть.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.Пойдём. ///")
elif (Vadik_Dialog_is_Irritable == "2"):
print(" Вы: ...")
print(" Вадим: Пойдём за мной, я знаю место где можно отдохнуть.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1. Пошли. ///")
Vadik_Dialog_Idem_to_the_village2 = input("")
else:
break
while True:
if (Vadik_Dialog_Idem_to_the_village2 == "1"):
print(" Вы: Пошли")
print("}")
print()
print("A.Следовать за Вадиком")
QuestStarted1 = input("Действие:")
else:
break
elif(play == 'да'):
print()
print("Я видел какой-то сон, кто-то тянулся к синему кристалу")
print("Потом стало темно")
print("Мне кажется я здесь не один...")
print()
print("S.T.A.L.K.E.R")
while True:
print()
print("Диалог")
print("{")
print(" Вадим: Мда, интересно как тебя сюда занесло")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.Где я? ///")
VadikDialogStarted1 = input("")
print()
while True:
if(VadikDialogStarted1 == "1"):
print(" Вы: Где я?")
print(" Вадим: Ты в Зоне. Как тебя звать?")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.В какой зоне? ///")
print("/// 2.А как тебя? ///")
print("/// 3.Я не помню своего имени.")
VadikDialogStarted2 = input("")
print()
else:
break
while True:
if (VadikDialogStarted2 == "1"):
print(" Вы: В какой зоне?")
print(" Вадим: Всмысле в какой? В Зоне Очуждения.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.В ЗОНЕ ОЧУЖДЕНИЯ?! ///")
VadikDialogStarted3 = input("")
print()
elif (VadikDialogStarted2 == "2"):
print(" Вы: А как тебя?")
print(" Вадим: Вадим.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.Приятно позакомится. ///")
Vadik_Dialog_Nice_to_meet_you = input("")
print()
elif (VadikDialogStarted2 == "3"):
print(" Вы: Я не помню своего имени.")
print(" Вадим: Мда, плохи дела. Ну нечего, следуй за мной. Я покажу тебе дорогу в уромное местечко. Отсюда недалеко.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.Ну пойдём. ///")
Vadik_dialog_Idem_to_the_village = input("")
print()
else:
break
while True:
if (VadikDialogStarted3 == "1"):
print(" Вы: В ЗОНЕ ОЧУЖДЕНИЯ?!")
print(" Вадим: Ну да.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.Во попал! ///")
VadikDialogStarted4 = input("")
print()
elif (Vadik_Dialog_Nice_to_meet_you == "1"):
print(" Вы: Приятно познакомится")
print(" Вадим: Так как тебя зовут?")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.Не помню! ///")
print("/// 1.Я помню только 3 первых буквы 'Бро...'")
Vadik_Dialog_I_dont_remember = input("")
print()
elif (Vadik_dialog_Idem_to_the_village == "1"):
print(" Вы: Ну пойдём")
print(" Вадим: Следуй за мной")
print("}")
print()
print("A.Следовать за Вадиком")
print("B.Поговорить")
QuestStarted1 = input("Действие:")
else:
break
while True:
if (VadikDialogStarted4 == "1"):
print(" Вы: Во попал!")
print(" Вадим: Пошли за мной. Покажу укромное местечко.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.Ну пойдём ///")
VadikDialogStarted5 = input("")
print()
elif (Vadik_Dialog_I_dont_remember == 1):
print(" Вы: Не помню!")
print(" Вадим: Какой-то ты раздражительный.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.А ты как думал? Голова пухнет, нечего не помню. ///")
print("/// 2.... ///")
Vadik_Dialog_is_Irritable = input("")
else:
break
while True:
if (VadikDialogStarted5 == "1"):
print(" Вы: Ну пойдём")
print("}")
print()
print("A.Следовать за Вадиком")
print("B.Поговорить")
QuestStarted1 = input("Действие:")
elif (Vadik_Dialog_is_Irritable == "1"):
print(" Вы: А ты как думал? Голова пухнет, нечего не помню.")
print(" Вадим: Ну ладно. Пойдём за мной, я знаю место где можно отдохнуть.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1.Пойдём. ///")
elif (Vadik_Dialog_is_Irritable == "2"):
print(" Вы: ...")
print(" Вадим: Пойдём за мной, я знаю место где можно отдохнуть.")
print()
print("/// Выберете ответ(1/2/3...) ///")
print("/// 1. Пошли. ///")
Vadik_Dialog_Idem_to_the_village2 = input("")
else:
break
while True:
if (Vadik_Dialog_Idem_to_the_village2 == "1"):
print(" Вы: Пошли")
print("}")
print()
print("A.Следовать за Вадиком")
QuestStarted1 = input("Действие:")
else:
break
elif(play == 'Нет'):
print()
print("Конец игры")
elif (play == 'нет'):
print()
print("Конец игры")
else:
print()
print("Конец Игры")
Ответы (1 шт):
Автор решения: GrAnd
→ Ссылка
Ну вот примерно так это может выглядеть.
В словаре описываются стадии квеста: какой текст выводить, тип действия, варианты ответов и метки перехода (ключи словаря) куда надо перейти в случае выбора конкретного ответа.
Ну а в функции происходит централизованная обработка текущей стадии квеста: анимированный вывод, нумерация списка ответов, проверка на корректность ввода номера ответа, повтор вашего ответа, переход к следующей стадии квеста.
import time
QUEST = {
"intro" : ("""
Я видел какой-то сон, кто-то тянулся к синему кристалу
Потом стало темно
Мне кажется я здесь не один...
S.T.A.L.K.E.R
""", "goto", "meet_vadim"
),
"meet_vadim" : ("""
\tВадим: Мда, интересно как тебя сюда занесло
""", "question", {"Где я?" : "vadik1"}
),
"vadik1" : ("""
\tВадим: Ты в Зоне. Как тебя звать?
""", "question", {"В какой зоне?" : "vadik2",
"А как тебя?" : "vadik3",
"Я не помню своего имени.": "vadik4"}
),
"vadik2" : ("""
\tВадим: Всмысле в какой? В Зоне Очуждения.
""", "question", {"В ЗОНЕ ОЧУЖДЕНИЯ?!" : "vadik5"}
),
"vadik3" : ("""
\tВадим: Вадим.
""", "question", {"Приятно позакомится." : "vadik6"}
),
"vadik4" : ("""
\tВадим: Мда, плохи дела. Ну нечего, следуй за мной.
\t Я покажу тебе дорогу в уромное местечко. Отсюда недалеко.
""", "question", {"Ну пойдём." : "vadik7"}
),
"vadik5" : ("""
\tВадим: Ну да.
""", "question", {"Во попал!" : "vadik8"}
),
"vadik6" : ("""
\tВадим: Так как тебя зовут?
""", "question", {"Не помню!" : "vadik9",
"Я помню только 3 первых буквы 'Бро...'" : "vadik11"}
),
"vadik7" : ("""
\tВадим: Следуй за мной.
""", "action", {"Следовать за Вадиком" : "go_vadik",
"Поговорить" : "speak_vadik"}
),
"vadik8" : ("""
\tВадим: Пошли за мной. Покажу укромное местечко.
""", "question", {"Ну пойдём" : "vadik_go_act"}
),
"vadik9" : ("""
\tВадим: Какой-то ты раздражительный.
""", "question", {"А ты как думал? Голова пухнет, нечего не помню." : "vadik12",
"...." : "vadik13"}
),
"vadik_go_act" : ("""
""", "action", {"Следовать за Вадиком" : "go_vadik",
"Поговорить" : "speak_vadik"}
),
"vadik11" : ("""
\tВадим: Сочувствую. Ну ладно. Пойдём за мной, я знаю место где можно отдохнуть.
\t Может и имя своё вспомнишь.
""", "question", {"Ну пойдём" : "vadik_go_act"}
),
"vadik12" : ("""
\tВадим: Ну ладно. Пойдём за мной, я знаю место где можно отдохнуть.
""", "question", {"Пойдём" : "vadik_go_act"}
),
"vadik13" : ("""
\tВадим: Пойдём за мной, я знаю место где можно отдохнуть.
""", "question", {"Пошли" : "vadik_go_act"}
),
"go_vadik" : ("""
Все ушли в закат.
""", "goto", "outro"
),
"speak_vadik" : ("""
Вы попытались заговорить с Вадимом, но тут яркая вспышка озарила небо.
""", "goto", "outro"
),
"outro" : ("""
КОНЕЦ.
""", "exit", ""
)
}
def slow_print(text):
for letter in text:
print(letter, end="", flush=True)
time.sleep(0.025)
print()
def go(quest, stage="intro"):
while True:
text, type, action = quest[stage]
slow_print(text.lstrip("\n"))
if type == "goto":
stage = action
time.sleep(1)
elif type in ("question", "action"):
while True:
time.sleep(0.5)
print(f"/// Выберете {'ответ' if type == 'question' else 'действие'} ({'/'.join(map(str, range(1, len(action)+1)))}) ///")
variants = list(action.items())
for i, question in enumerate(variants, 1):
print(f"/// {i}. {question[0]}")
answer = input()
if answer.isdigit():
answer = int(answer)
if 0 < answer <= len(action):
if type == "question":
slow_print(f"\tВы: {variants[answer-1][0]}")
stage = variants[answer-1][1]
break
print("Ваш ответ не ясен. Повторите.")
elif type == "exit":
return
go(QUEST)