Постановка задачи: текстовый квест
Что такое текстовый квест?
В большинстве уроков мы будем создавать небольшой проект, который можно будет использовать на практике. И первое, чем мы займемся - это создание собственного текстового квеста. В процессе такой игры вам рассказывают про события, которые происходят с вашим героем, и вы периодически должны делать выбор, как ваш герой поступит. В зависимости от этого сюжет игры меняется. Игра в текстовый квест похожа на чтение книги, в которой вы сами можете влиять на сюжет.
Также, как и в настольной ролевой игре (а такие тоже бывают), в текстовом квесте вам нужно принимать решения в различных ситуациях, только играете вы в одиночку, а вместо ведущего - компьютер или мобильное устройство.
Текстовый квест может быть как интерактивным рассказом, так и полноценной бродилкой или рпг с подбором предметов, квестами и сражениями, просто вместо 3д графики - текст и картинки, записанные символами. Если чуть позже добавить графику, то получится уже интерактивная новелла (комикс с возможностью выбора, например, бесконечное лето) или интерактивный сериал (как, например, игры от Telltale Games или эпизод Bandersnatch черного зеркала от Netflix).
Вот несколько примеров (и еще примеров) таких игр, в которые вы можете попробовать поиграть на досуге. Очень советую попробовать поиграть перед тем, как придумывать свой.
Как спроектировать квест?
Если мы хотим придумать собственный тестовый квест, нам понадобится какая-то схема, чтобы описать его сценарий.
Если бы мы писали книгу, все было бы просто - ее сюжет был бы линеен и события разворачивались последовательно. А вот в случае с текстовыми квестами все сложнее - сюжет зависит от выбора пользователя, и надо как то фиксировать, какие события случаются при каких условиях.
Если задуматься, то окажется, что в этом плане текстовые квесты очень похожи на обычные настольные бродилки.
Любой текстовый квест состоит из частей информации, которую программа сообщает пользователю между которыми игрок должен сделать выбор, или иными словами, что-то ввести.
В зависимости от выбора, случайности (а в настолках - от кубиков), наличия предметов в инвентаре или предыдущих действий игроку выводится следующая информация.
Если нарисовать рисунок, в котором точками будут части текста, а переходы между ними стрелочками, то у нас получится схема, которую математики называют ориентированным графом. Давайте так и назовем его - граф игры.
Варианты квестов
Если пробовать рисовать графы квестов от совсем простых к более сложным, то у нас получиться три разных варианта.
1. Самый простой: линейный квест (квест-линия).
В линейном квест программа игра просит пользователя что-то ввести, но в конечном итоге это никак не влияет на сюжет. Например, программа может запоминать имя персонажа, название его фермы, кличку любимый собаки, но в игре с любом случае будет ферма и собака, и собака будет жить на ферме, и игрок в любом случае ее покормит, просто имена у героев меняются. С одной стороны ничего особенного, а с другой - приятно.
2. Квест с ветвлением (квест-дерево).
В этом варианте у пользователя появляется возможность сделать выбор, и от этого выбора правда зависит сюжет. Вместо выбора может использоваться генерация случайного числа, но есть один нюанс - мы никогда не возвращаемся обратно, т.е. у нас нет возможности ходить по кругу и что-то собирать - движение только вперед.
Кстати, почему дерево? Деревом в дискретной математике называется граф без циклов, т.е. тот, в котормо нельзя ходить кругами (как раз наш случай). Визуально он правда похож на перевернутое дерево.
3. Произвольный квест с инвентарем (квест-граф).
Самый крутой вариант - у нас нет никаких ограничений на перемещение по нашей "карте", а еще мы можем подбирать предметы, от которых зависит сюжет (возможность перемещения или текст в некоторых точках).
План действий
План действий следующий.
- Придумать название и сюжет для квеста.
- Нарисовать его граф, чтобы примерно представить сюжет.
- Запрограммировать квест на питоне.
- Протестировать и исправить все баги.
- Провести бета-тест среди друзей и собрать обратную связь.
Кажется, что все более менее реализуемо, кроме, пока что, среднего пункта - "запрограммировать". Но это ненадолго, уже в следующем уроке ты научишься описывать на питоне произвольные текстовые квесты, для чего понадобится:
- установить питон на компьютер и использовать IDLE для вычислений (уже сделали!);
- научиться выводить текст на экран и просить пользователя вводить ответы (уже можно будет сделать линейный квест);
- разобраться с условным оператором, чтобы создавать квесты с ветвлением;
- научится создавать свои функции, использовать глобальные переменные и рекурсию для созданий сложных квестов с возвратами и инвентарем;
- объединить все это, использовать ascii графику, добавить звуки и разбить на несколько модулей, чтобы создать итоговую версию квеста.
Выглядит план, скорее всего страшно, но ты точно справишься! 😉