@Jeaw

Поможете создать текстовый квест на python?

Здравствуйте.
Я пытался сделать текстовый квест\программу\игру на языке python основываясь на уже готовой программе, сделанной учеником 11 класса.
У меня до сегодняшнего дня не было опыта с python.
Я думал просто посмотреть на код чужой программы и сделать свою с другим сюжетом и структурой программы.
Но когда дело дошло до переделывания структуры программы - > начались проблемы с не знанием символов, операторов, логических уровней python
------
Под спойлером текстовый квест ученика 11кл.
Удалил из-за лимита символов -_-.

Вот начало моего кода, после которого мой прогресс написания программы застопорился:
spoiler
print ("Dungeon raid")
print ("*************************************************")
print ("Вы - матерый воин Гатс, жаждущий славы и богатства")
print ("Недавно вами было взято задание - отправиться в жуткое подземелье ради спасения похищенной злым некромантом дочери графа Паулето")
print ("Вам предстоит подготовить свое снаряжение и собрать рюкзак перед дорогой, взяв то, что поможет вам в борьбе со зловещим некромантом")
print ("Нажмите |1| чтобы начать выбор экипировки")
a =int(input())
while a!=1 :
   a=int(input())
print ("*************************************************")
print ("Варианты действий")
print ("*********************************************************")
print ("Взять с собой тяжелый серебрянный двуручный меч - для действия нажмите |1|")
print ("Надеть на себя волшебный мифриловый доспех - для действия нажмите |2|")
print ("Положить в рюкзак лечебную эссенцию регерации жизни - для действия нажмите |3|")
print ("Взять с собой связку отмычек - для действия нажмите |4|")
print ("Засунуть в рюкзак лом - для действия нажмите |5|")
print ("Положить в голенища своих сапог два легких стальных ножа - для действия нажмите |6|")
print ("*********************************************************")
b=int(input())
if b>6 or b<=0 :
       print ("Сосредоточьтесь на сборе экипировки!")
if b==1 :
       print ("Этот меч мог бы показаться для кого то тяжелым - но только не для вас")
if b==2 :
       print ("Надев доспех вы ощущаете небольшую тяжесть и скованность движений, но решаете, что защита важнее")
if b==3 :
       print ("Ваша уверенность в успех рейда повысилась, ведь есть страховка в виде лечебного зелья")
if b==4 :
       print ("Немалую пользу может принести столь малый груз")
if b==5 :
       print ('Хоть лом и тяжел, но вы видете в нем помощника в будущих препядствиях')
if b==6 :
      print ('Вы не ассасин - но ножи никогда не бывают лишними')
print ("*********************************************************")
print ("Хотите ли вы взять что-то еще?")
print ("Нажмите |1| если хотите продолжить сбор снаряжения")
print ("Нажмите |2| если вы уже полностью готовы к походу")
a =int(input())
if a==1 :  
 c =int(input())
 c!=b
 if с>6 or с<=0 :
       print ("Сосредоточьтесь на сборе экипировки!")
 if с==1 :
       print ("Этот меч мог бы показаться для кого то тяжелым - но только не для вас")
 if с==2 :
       print ("Надев доспех вы ощущаете небольшую тяжесть и скованность движений, но решаете, что защита важнее")
 if с==3 :
       print ("Ваша уверенность в успех рейда повысилась, ведь есть страховка в виде лечебного зелья")
 if с==4 :
       print ("Немалую пользу может принести столь малый груз")
 if с==5 :
       print ('Хоть лом и тяжел, но вы видете в нем помощника в будущих препядствиях')
 if с==6 :
      print ('Вы не ассасин - но ножи никогда не бывают лишними')
if a==2 :
 print ("*************************************************")
 print ("Вы наконец-то собрались в дорогу")

Вот алгоритм написания моей программы:617ed951c9e7f906215663.png
Основные проблемы с написание текстового квеста у меня:
1) Как сделать так, чтобы программа запоминала уже выбранные варианты игрока и не предалагала их к выбору, после того как он выбрал его;
2) Как сделать так, чтобы программа запомнила набор выборов-чисел игрока по типу 3-4-1 в любой последовательности для дальнейшего использования этого набора как условие прохождения\не прохождения игрока дальше по шагам игры;
3) Как обозначить ввод переменной "С", когда нужно сперва ввести переменную "А", которая при условии "А" ==1 должна перебрасывать на ввод переменной "С" и проверку ее условий (у меня не перебрасывает) и при условии "А"==2 должна просто дальше читать строки программы.

Вот код проблемы с переменной "С":
a =int(input())
if a==1 :  
 c =int(input())
 c!=b
 if с>6 or с<=0 :
       print ("Сосредоточьтесь на сборе экипировки!")
 if с==1 :
       print ("Этот меч мог бы показаться для кого то тяжелым - но только не для вас")
 if с==2 :
       print ("Надев доспех вы ощущаете небольшую тяжесть и скованность движений, но решаете, что защита важнее")
 if с==3 :
       print ("Ваша уверенность в успех рейда повысилась, ведь есть страховка в виде лечебного зелья")
 if с==4 :
       print ("Немалую пользу может принести столь малый груз")
 if с==5 :
       print ('Хоть лом и тяжел, но вы видете в нем помощника в будущих препядствиях')
 if с==6 :
      print ('Вы не ассасин - но ножи никогда не бывают лишними')
if a==2 :
 print ("*************************************************")
 print ("Вы наконец-то собрались в дорогу")

Вот ошибка при компиляции с такой трактовкой кода:
617eda9e100e7806418290.png
--------
Помогите, пожалуйста, продолжить написание текстового квеста, игры.
Просто для меня это как чек поинт - если я это не сделаю, то зачем тогда учусь в этой области.
Я точно разобрался с тем, что == - это равно, а != -> не равно.
Знаю немного о операторах If, While и else, но у меня проблемы огромные с восприятием таких операторов как While True, break, continue, elif.
  • Вопрос задан
  • 434 просмотра
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Так.
Но когда дело дошло до переделывания структуры программы - > начались проблемы с не знанием символов, операторов, логических уровней python

Во-первых, нужно освоить азы языка. Порешайте простые упражения, освойте ветвления, циклы, функции, азы классов. Этого хватит.
текстовый квест

Во-вторых, стоит освоить идею конечного автомата (state machine). Это реально очень просто.
Как освоишь, поймешь, что твой квест - это кучка параллельно работающих конечных автоматов. Один описывает локации мира, другие - состояния отдельных квестов (не начат, находится на том или ином этапе, готов к сдаче, сдан, провален).
Важный вывод: тебе потребуется как-то хранить эти автоматы так, чтобы к любому из них можно было удобно обратиться из любого места!
В третьих, осваиваешь State Pattern. Он может пригодиться для реализации мира. По сути, у тебя разные локации будут разными состояниями, и каждая из них может быть представлена как отдельный объект, реагирующий на действия пользователя. Реакция заключается в дергании других автоматов (например, не пускать, пока не пройден квест, или инициировать квест по входу в локацию) и в выводе текста.
Ты можешь описывать разные локации как разные классы или как разные объекты одного класса.
Первый подход проще с точки зрения кода, но гораздо более громоздкий, так как на каждую локацию придётся отдельный класс.
Второй подход сложнее с точки зрения кода, но классов будет меньше, а локации будут представлены данными.
Я бы начал с первого подхода, чтобы освоиться.
В-четвёртых, тебе потребуется хранить состояние игрока (и возможно других мобов). Это простые классы, или даже просто словари (dict). Я бы всё же сделал классы.

Тогда у тебя в программе будет три основных блока.
1. Интерфейс - кусок кода, который показывает пользователю текующее состояние игры и принимает его ввод, а потом отдаёт этот ввод текущему состоянию игры.
2. Хранилище автоматов. В первую очередь это автомат навигации по миру, но также и автоматы квестов. Можешь сделать его просто словарём с ключами-строками - так бдует проще.
3. Данные игрока. Лучше хранить в отдельном классе, но автоматы должны иметь к нему доступ, так или иначе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы