Давайте пограємо зі змією/Текстові ігри

Програма текстового квесту, як і кожної гри складається з циклу. Тільки тут замість читання миші, клавіатури і інших маніпуляторів іде звичайний консольний ввід. Замість звуку та графіки консольний вивід. Гра не обов’язково має бути консольною, наприклад дві мої найолюбленіші ігри мали графічний інтерфейс, і ілюстрації. Проте основну інформацію все одно ніс текст.

Ввід

ред.

Крім того способів текстового вводу є два – меню, і набір команд. Опишу переваги і недоліки кожного:

Команди

ред.

Текстові ігри розробляють так, щоб вони розуміли людську мову. Наприклад:

>Взяти камінь і кинути його в охоронця

За розуміння подібних фраз відповідає штуковина, що називається парсером, або синтаксичним аналізатором. Вона перетворює текст в набір змін які відбуваються з середовищем гри. Таких аналізаторів вже існують тисячі, але вони на жаль, придумані для мов програмування. Людські мови складніші для розуміння, особливо українська. Розробкою нормального аналізатора для неї займається наука про штучний інтелект.

Тому зазвичай синтаксис команд обмежують. Наприклад спочатку має бути дія, потім її об'єкт. Наприклад:

>взяти камінь
>йти вперед

Важливим є знання гравцем словника гри, тобто всіх слів які він може використати для побудови команди. Хоча автор “Старовинного храму” зі мною не погоджується. Якщо ми наприклад оголошуємо що в програмі є слово “розбити”, то коли гравець побачить дзеркало, він здогадається що його можна розбити, що зробить гру більш схожою на менюшну (див нижче). Але зате гравець не має думати яке ще дієслово підібрати для того, щоб комп'ютер зрозумів що він хоче зробити.

Плюсом командної системи є те, що гравець в кожній ситуації має величезне число можливих виборів. Також дещо більша динамічність. Мінуси – вам прийдеться писати осмислену відповідь на все що вводить гравець. І якщо ви написали, що в грі є така команда, то гравець повинен мати змогу використати її в будь-який момент.

Меню

ред.

Менюшні ігри просто дають гравцеві вибір з кількох варіантів. Наприклад:

- Взяти камінь
- Йти вперед

Я спеціально дав такий самий приклад, як в попередньому випадку, щоб було видно, що обидва види ігор еквівалентні. В кожному випадку, гравець має вибір з скінченного числа варіантів. Тільки в менюшній грі кількість цих варіантів відома. І зазвичай трохи менша, так як відображаються тільки суттєві.

Програмувати таку гру простіше, можна навіть звичайним гіпертекстом. Тільки дослідження світу стає вже не таким захоплюючим. Бо в пункти меню не додають команду “оглянути”, для кожного предмету, який присутній в сцені, і можна швидко перебрати всі можливості.

А взагалі, між обома варіантами завжди можна знайти компроміс. Наприклад динамічно генерувати набір можливих дій користувача.

Види команд

ред.

Команди грі можна поділити за функціональністю:

  • Дослідження світу – команди, які тільки виводять інформацію про середовище. Зазвичай обходяться тільки візуальним описом, але вітаються команди на зразок “слухати”, “прислухатись”, “нюхати”, чи навіть “доторкнутись”. Але можна не додавати спеціальні команди, для таких видів інформації, а виводити всю через одну команду дивитись. Наприклад:
Ліс>дивитись

Ти стоїш в красивому зеленому лісі. Сонячне проміння ледь пробивається крізь листя дерев. Десь високо в гіллі щебечуть пташки. Повітря свіже і чисте. Тільки куди йти далі? Всюди, як не кинь оком непролазні хащі.
  • Навігації. Тут все залежить від розмірності світу. Можна наприклад додати команди для чотирьох виходів. Можна додати ще один вимір, і писати вверх та вниз. А можна просто брати до уваги тільки топологію простору, і команди будуть залежати від того, де знаходиться персонаж.
  • Взаємодії з світом – ці команди програмувати найскладніше, бо вони вимагають не просто вибору інформації з структури даних, чи зміни координат персонажа. Сюди входить всякі переміщення предметів, дії над ними, чи взаємодія з іншими персонажами. Це трохи складніші операції, і можуть для кожного предмету писатись по іншому.

Світобудова

ред.

Знову ж таки, в комп’ютерах все дискретно. Можна створити якийсь неперервний світ, але більшість інтерактивної літератури, відбувається в скінченному дискретному світі. Позицію в такому світі називають локацією. (Варто зауважити, що класична література теж дискретна, хоча це маскується плавністю розповіді. Візьміть наприклад Володаря Кілець. Хоча маємо доволі щільну карту, але основна дія відбувається в конкретних місцях, таких як таверни, ельфійські ліси, річкові переправи, фортеці, вежі чи вулкани. )

Між локаціями існують переходи, по яких рухається гравець. Часом в такому переході ставлять додатковий сценарій (або англійською скрипт, що для Пайтона має додатковий зміст :). Наприклад гравець не пройде, якщо не має якогось предмету, чи не піднято прапор.

Прапор – це елемент світу, який не видно в самій грі. Зазвичай він опущений чи піднятий (має булевий тип), але може містити і числа та текст. Наприклад, якщо гравець поговорив з якимось персонажем, наступного разу персонаж його впізнає. Прапор “гравець поговорив з персонажем” піднято. Те ж саме з дверми (чи якимись іншими переходами між локаціями).

Предмет – це елемент світу, з яким взаємодіє гравець. Зазвичай для предмета обов’язковим є те, що гравець може його оглянути (для чого ж тоді він створюється), а інші операції опціональні. Предмети які не дозволяється переміщати називають декораціями. Інші предмети можна брати, носити в кишенях (бажано також додати щось на зразок ваги, чи розмірів предмету). В предметі можуть міститись інші предмети, але від локації предмет відрізняється тим, що в нього не можна ввійти, і його можна переміщати. Приклад:

Порившись в кишенях ти знаходиш:
рюкзак - Вмістимий, зручний наплічник, що дозволяє носити багато речей

Сценарії – це послідовності дій, які виконуються за певних умов. Наприклад гравець входить в локацію, і функція змінює якийсь прапор. Чи функції які приєднуються до предметів, щоб їх використовувати. Наприклад використання пістолета зменшує кількість патронів, і кількість живих персонажів в локації.

Посилання

ред.
  1. Як писати інтерактивну літературу
  2. Інтерактивна література і Python