Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vipuskna_robota_bakalavra.doc
Скачиваний:
147
Добавлен:
13.04.2015
Размер:
4.4 Mб
Скачать

3 Разработка

3.1 Ознакомление с платформой разработки и реализация игры

В процессе создания первого пробного квеста происходило ознакомление с интерфейсом набора необходимых программ для разработки под платформу QSP – файла помощи .chm, проигрывателя-интерпретатора файлов, инструмента преобразования текстовых файлов кода в интерпретируемые и интерактивной среды разработки.

Рисунок 3.1 – Интерактивная среда разработки

Были написаны первые локации и реализована последовательность событий первого квеста вместе с тремя базовыми механиками взаимодействия с игрой – диалог, рисковое действие и головоломка.

На данной платформе локацией является процедура в программе, содержащая программный код. В зависимости от способа перехода в локацию, интерфейс либо очищается перед выполнением кода новой локации, включая вывод на экран, используя локацию именно как локацию, новое место; либо нет, и локация выполняется как процедура.

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

Платформа QSP русскоязычна, и хотя основные операторы языка все же на английском, допустимы названия переменных, локаций и предметов на русском. Это необходимая функциональность, так как название предмета используется и как уникальный идентификатор для его вызова, так и выводится на экран.

#Лес

SHOWINPUT 0

$FNAME = 'Arial'

USEHTML = 1

Открыто = 0

Ключ_взят = 0

Упала = 0

Разговор = 0

Тропинка_видна = 0

Можно_в_город = 0

Вывод на экран – самое элементарное действие в этом языке программирования, и производится просто записью строки с абзаца. Строка окружается одинарными либо двойными кавычками. Возможно использование тегов HTML для оформления вывода и использования картинок.

'<center><img src="img/Wood.jpg" width="100%"/></center>'

' '

'В густых кронах деревьев шелестит листва, откуда-то издалека доносится перекличка птиц. В кустах время от времени слышится шорох какого-то пробегающего мелкого зверька.'

'Теплый июньский день подходит к концу. Тени удлиняются, и между деревьев вьется прохладный ветерок. Луна устала.'

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

Ненамного сложнее вывод действий меню для пользователя. Кроме оператора, обозначающего вывод строки как действия в области меню, необходимо обозначить действия при нажатии этой кнопки. Для этого есть два формата: однострочный, включающий всего одно действие, как правило, являющееся переходом между локациями или вызовом процедуры, и многострочный, позволяющий указать любое количество операторов для выполнения, включая условные операторы, операторы вывода на экран и вывода действий меню. Максимальная вложенность ограничена, но достаточно велика для нужд практически любой текстовой квестовой игры, и в любом случае легко обходится использованием процедур.

Важный элемент – оператор DELACT, удаляющий действия меню с экрана. В этой игре он используется для действий, которые можно выполнить только один раз подряд – к примеру, взять уникальный предмет или подойти или заглянуть куда-то.

ACT '<table width="100%"><tr><td bgcolor="#eeeefF">Обойти избушку слева</td></tr></table>': GOTO 'Юг_избушки'

ACT '<table width="100%"><tr><td bgcolor="#eeeefF">Обойти избушку справа</td></tr></table>': GOTO 'Север_избушки'

ACT 'Заглянуть в окно':

'Изнутри окно занавешено красивой кружевной занавеской.'

DELACT 'Заглянуть в окно'

IF Ключ_взят = 0:

'На подоконнике лежит небольшой блестящий ключик.'

'<img src="img/key.png" />'

ACT 'Взять ключик':

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

ADDOBJ 'Небольшой блестящий ключик','img/key_small.png'

Ключ_взят = 1

DELACT 'Взять ключик'

END

END

END

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

Это достигается путем запоминания места разговора в соответствующей переменной и множественного выбора при инициации разговора.

ACT 'Постучать в окно':

IF Разговор > -1:

'Занавеска отодвигается. В окне появляется сморщенное, загорелое старушечье лицо с густыми бровями, крючковатым носом и бородавкой на остром подбородке.'

IF Разговор = 0: GOSUB 'Разговор1'

IF Разговор = 1: GOSUB 'Разговор2'

IF Разговор = 2: GOSUB 'Разговор3'

IF Разговор = 3: GOSUB 'РазговорОкончен'

END

ELSE:GOSUB 'РазговорНеВышел'

DELACT 'Постучать в окно'

END

Механика головоломки реализуется путем использования операторов работы с инвентарем. К ним относятся ADDOBJ, добавляющий предметы в инвентарь, DELOBJ, удаляющий предметы из инвентаря, и OBJ, проверяющий наличие предмета в инвентаре по его названию. При добавлении предмета в инвентарь можно указать адрес файла изображения, и в этом случае предмет в инвентаре будет отображаться рядом с этим изображением. При этом не представляется возможность настроить размер изображения, поэтому важно следить за размером загружаемого файла.

#Взять_бутыль

DELACT 'Взять бутыль'

'Луна берет бутыль и прячет в сумку.'

'- Вот спасибо, - вздыхает хозяйка.'

ADDOBJ 'Бутыль с зельем','img/bottle_small.png'

Бутыль_взята = 1

-

IF OBJ 'Узелок с пирожками':

ACT 'Предложить пирожки':

DELACT 'Предложить пирожки'

'Луна достает из сумки узелок с пирожками и разворачивает.'

'- Хотите? - жизнерадостно спрашивает она, беря один себе.'

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

'- Ты проходи, если хочешь, - кивает он на дверь.'

IF Можно_в_город = 0:

ACT '<table width="100%"><tr><td bgcolor="#eeeefF">Пройти через дверцу</td></tr></table>': GOTO 'Ворота_внутри'

END

Можно_в_город = 1

DELOBJ 'Узелок с пирожками'

END

END

Механика рискового действия реализуется при помощи оператора CLA, очищающего зону меню для невозможности прерывания действия в середине, генератора случайных чисел RAND и таймера WAIT, обеспечивающего напряженность ожидания. Также для каждого действия используется переменная, обозначающая неудачу этого действия и невозможность попробовать заново – в случае успеха действие можно повторить. В первом квесте рискованное действие – это попытка пролезть к трубе по скользкой крыше, и единожды упав, главная героиня не хочет пробовать заново.

IF Упала = 0:

ACT 'Попробовать залезть в трубу':

CLA

'Луна осторожно, на корточках, пытается перебраться через скользкую крышу - маслом, что ли, она намазана? - к трубе.'

WAIT 1000

WAIT 1000

IF RAND(1,2) > 1:

'Внезапный порыв ветра бьет по ведьмочке, и она, теряя равновесие, катится вниз по скользкому скату. Не успевая сгруппироваться, Луна приземляется напротив двери избушки.'

WAIT 1000

WAIT 1000

Упала = 1

GOTO 'Запад_избушки'

ELSE

'Внезапный порыв ветра бьет по ведьмочке, но она, вцепившись в конек крыши, удерживается на месте. Фух... вот и труба.'

ACT 'Залезть в трубу': GOTO 'Внутри_избушки'

END

END

END

На следующем этапе, после ознакомления с основными возможностями игры и разработкой основ механики, были созданы основные локации игры – см. рисунок 2.7. Был написан основной текст игры – художественное описание происходящего, и закодирована последовательность событий со всеми альтернативными разветвлениями и возможностями.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]