| Учебник по QSP для редактора QGen |
| Автор: Nex |
| 27.02.2009 08:41 |
|
Перед вами - учебник для написания игр в программе QGen.
Урок первый. Создаём игру.Запускаем QGen. Выбираем меню "Утилиты\Настройки". Открываем вкладку "Пути".
Игровые локации - это небольшие части, на которые мы делим игру.
Привет, мир!
showstat 0
Урок второй. Переходы по локациям.В описании локации "Начало" удаляем строку "Привет, мир!" и пишем Новое приключение героя.
Создаём локации "Об игре", "Об авторе". Перед вами величайшая игра всех времён. И народов. Точно.
В описании локации "Об авторе" пишем Автор сей замечательной игры - великолепен и неподражаем. Вы сами сможете убедиться в этом, поиграв в мою игру.
У нас есть три локации, осталось связать их вместе, сделать переходы между локациями. Для этого нам нужно добавить "действия" для каждой локации. Откроется вкладка с заголовком "Начало".
GOTO 'Об игре'
GOTO 'Об авторе'
Выбираем локацию "Об игре".
Урок третий. Простейшая игра с выбором.Создаём локацию "Развилка". В описании пишем: Вышел герой к реке, куда дальше идти?
Переплыл герой реку и завершил своё приключение с победой.
Брёл герой вдоль берега, брёл. А потом его съел медведь. Так наш герой проиграл.
Урок четвертый. Переменные.Переменные - это "память" игры.
Когда мы говорим плееру, "в переменной a будет храниться значение 5" - это запись в переменную. Также запись назвают "присваиванием", это одно и то же. В коде это выглядит так: a = 5 Мы записали в переменную "a" числовое значение 5. Знак "=" здесь не обозначает равенство, как в математике, он обозначает операцию присваивания. Переменная, в которую мы записываем значение, должна всегда стоять слева от знака "=".
$строка = 'Быть или не быть?' Мы записали в переменную "$строка" текстовое значение "Быть или не быть?"
Чаще всего, значение переменной нам требуется для нового присваивания, либо для проверки условия. Вот, например, мы прибавляем 10 к переменной "a", и записываем результат в переменную "k". k = a + 10 Допустим, в переменной "a" было записано 5. Тогда k = 5 + 10 = 15. В переменной "k" теперь хранится значение 15. Обратите внимание, в этой строке кода было произведено чтение значения переменной "a", вычисление выражения "a + 10", и запись результата в переменную "k". Уменьшаем значение переменной "k" на 2. k = k - 2 В переменной "k" было записано 15. Значит, k = 15 - 2 = 13. Теперь в переменной "k" хранится значение 13.
$вопрос = $строка + ' Вот в чем вопрос.' Теперь в переменной "$вопрос" хранится текстовое значение "Быть или не быть? Вот в чем вопрос."
Для вывода используйте двойные угловые скобки, "<<" и ">>". Между двойными угловыми скобками напишите имя переменной, например "<<$вопрос>>", или "<
Создайте локацию "Начало", в описании напишите "Создайте свою планету и сможете управлять ей в меру своих скромных возможностей." В коде локации(поле "выполнить при посещении") отключите неиспользуемые окна. На этот раз окно инвентаря нам не понадобится, поэтому его тоже отключаем. SHOWSTAT 0 SHOWINPUT 0 SHOWOBJS 0 Создайте действие "Создать планету" с переходом на локацию "СоздатьПланету".
Создайте локацию "СоздатьПланету". В коде локации пишем $Имя = INPUT('Придумайте имя для своей планеты.')
Температура = 100
'Ваша планета называется <<$Имя>>.'
Рассмотрим подробно. В первой строке, мы просим игрока ввести имя для планеты. В скобках функции INPUT указано приглашение, которое прочтет игрок. Текст, который введет игрок, будет сохранен в текстовой переменной $Имя. Вторая строка задает значение для числовой переменной Температура. В этой переменной будет храниться текущая температура для планеты. В третьей строке на экран описания локации выводится текст. В выводимом тексте, вместо выражения <<$Имя>> плеер подставит значение переменной $Имя, то есть тот текст, который ввел игрок. Если игрок ввел "Персефона", то на экране будет написано "Ваша планета называется Персефона."
Создайте локацию "Планета". В описании локации пишем Имя планеты: <<$Имя>> Температура на планете: <<Температура>> градусов.
Нам нужно, чтобы игрок мог изменить температуру на планете. Для этого сделаем несколько действий, в которых будет меняться переменная Температура. Создайте действие "Поднять температуру на 10 градусов". В коде действия пишем Температура = Температура + 10 GOTO $CURLOC В первой строке, мы увеличиваем на 10 единиц значение переменной Температура. Если температура планеты была 100 градусов, то при выборе этого действия температура планеты станет 110 градусов, и так далее. Вторая строка задает переход на текущую локацию. $CURLOC - специальная функция, которая всегда возвращает имя текущей локации, в нашем случае это локация "Планета". Зачем же нам "переходить" на локацию, на которой мы и так уже находимся? Это нужно для того, чтобы обновить текст описания локации. Переменная Температура была изменена, но изменения в описании появятся только при "входе" на локацию, поэтому мы должны явно задать переход. Создайте аналогичное действие "Снизить температуру на 10 градусов". Создайте действие "Установить комнатную температуру". Код действия: Температура = 25 GOTO $CURLOC При выборе этого действия, температура планеты станет 25 градусов, вне зависимости от того, какой она была. Обычное присваивание. Создайте действие "Создать новую планету" с переходом на локацию "СоздатьПланету". Когда игроку надоест одна планета, он может выбрать это действие и создать новую.
Урок пятый. Условия.Условия - самый важный и мощный инструмент в разработке текстовой игры. Автору требуется не только вести учет состояния игры(переменные), но и делать прохождение игры зависящим от изменившегося состояния. Для этих целей в QSP есть условный оператор - "IF".
IF условие :
действие1
ELSE
действие2
END
Если условие выполняется, то будет выполнено действие1, если нет - действие2.
IF условие :
действие1
END
Создайте локацию "Начало", в описании напишите "Игра про космос." В коде локации отключите неиспользуемые окна. Окно инвентаря в этой игре не понадобится, поэтому его тоже отключаем. Для удобного перезапуска игры из локации проигрыша, добавим оператор KILLALL, он очищает все переменные и инвентарь. Теперь достаточно сделать переход на локацию "Начало", чтобы состояние игры было "сброшено". KILLALL SHOWINPUT 0 SHOWSTAT 0 SHOWOBJS 0 Создайте действие "Играть" с переходом на локацию "Играть".
Создайте локацию "Играть". В описании пишем: "Вы долго исследовали пояс астероидов и настала пора возвращаться на Землю."
IF Курс_Полёта = 1: GOTO 'Победа' ELSE GOTO 'Проигрыш' END Рассмотрим подробно. Мы проверяем значение переменной Курс_Полёта. Условие "Курс_Полёта = 1" означает "Значение переменной Курс_Полёта должно равняться 1". Если значение равняется 1, то при нажатии этого действия будет переход на локацию "Победа", иначе - переход на локацию "Проигрыш".
Создайте локацию "Диспетчер". В описании пишем - Вызываю диспетчера, вызываю диспетчера. - Диспетчер на связи, высылаю вам курс полёта через пояс астероидов до Земли. - Курс полёта принял. В коде локации пишем Курс_Полёта = 1 Здесь мы "запоминаем", что игрок зашел в локацию, записав в переменную Курс_Полёта значение 1. Если игрок не заходил в локацию, то значение переменной будет 0.
Создайте локацию "Победа". В описании локации пишем: "Вы благополучно долетели до Земли. Хорошо, что вы связались с диспетчером и получили у него курс полёта."
Создайте локацию "Проигрыш". В описании пишем: "Лететь без курса полёта через пояс астероидов - чистой воды самоубийство. Вам не повезло и один из астероидов протаранил ваш корабль, так что на Земле вас так и не дождались."
Урок шестой. Берём предметы.В текстовых играх часто применяются предметы. Для того, чтобы игрок всегда знал, какие предметы у него с собой, в QSP есть специальное окно инвентаря(с заголовком "Предметы"). Когда игрок берет предмет, тот появляется в инвентаре. Для того, чтобы добавить предмет в инвентарь, используется оператор ADDOBJ, для того, чтобы удалить предмет из инвентаря, используется оператор DELOBJ.
ADDOBJ 'Название предмета' DELOBJ 'Название предмета'
Вы спасли гномьего короля от смерти в лапах тигра. - Бери алмазов сколько захочешь, бери рубинов, сколько унесёшь, бери Меч Справедливости, он у нас один.
Напишем действие для того, чтобы брать алмазы. Создайте действие "Взять алмаз". В коде действия пишем: ADDOBJ 'Алмаз' Действие готово. Теперь, когда игрок выберет это действие, в инвентаре добавится предмет "Алмаз". Сколько раз нажмет, столько алмазов добавится, без ограничений по количеству.
Напишем действие для того, чтобы брать рубины. По замыслу игры, игроку позволено взять только 5 рубинов. Создайте действие "Взять рубин". В коде действия пишем: IF Количество_Рубинов < 5: ADDOBJ 'Рубин' Количество_Рубинов = Количество_Рубинов + 1 ELSE 'Жадность не порок, но вы не можете унести больше, чем уже взяли.' END В этом действии делается проверка на количество рубинов, которые уже взял игрок. Если количество рубинов меньше 5, то он может взять еще один рубин. Если нет, то выводим строку текста. Обратите внимание на строку Количество_Рубинов = Количество_Рубинов + 1 Здесь переменная "Количество_Рубинов" увеличивается на 1 каждый раз, когда игрок берет рубин. Такую переменную называют "счетчиком". Пока игрок не взял ни одного рубина, в этой переменной будет значение 0. Когда игрок будет брать рубины, это значение будет увеличиваться, пока не достигнет максимального значения 5.
Напишем действие для того, чтобы взять меч. Это действие будет присутствовать на локации только в том случае, если игрок еще не взял меч. Поэтому мы не создадим действие как обычно, а напишем его в коде самой локации, "обернув" его в условие. Пишем в коде локации: IF Меч = 0:
ACT 'Взять Меч Справедливости':
ADDOBJ 'Меч Справедливости'
Меч = 1
GOTO $CURLOC
END
END
Переменная "Меч" принимает всего два значения: 0 и 1. Такую переменную назвают "флажком". Изначально в переменной "Меч", как и в любой другой числовой переменной, хранится значение 0. Условие "Меч = 0" выполняется, и действие "Взять Меч Справедливости" добавляется в список действий. Рассмотрим подробно, что произойдет, когда игрок выберет это действие. ADDOBJ 'Меч Справедливости' В инвентарь добавляется предмет "Меч Справедливости". Меч = 1 В переменную "Меч" записывается значение 1. Мы "установили флажок", теперь игра "помнит", что игрок взял меч. GOTO $CURLOC Переход на текущую локацию. Заново выводится описание локации, заполняется список действий, и выполняется код локации. Условие "Меч = 0" не выполнится, и поэтому действие "Взять Меч Справедливости" не будет добавлено.
Урок седьмой. Применение предметов.Основной способ сделать "применение" предмета в игре - создать действие, которое будет доступно только при наличии предмета в инвентаре. Рассмотрим на примере.
Создайте локацию "Начало", с описанием "Игра про Дверь." и действием с переходом на локацию "Комната". Отключите строку ввода.
Создайте локацию "Комната". В описании пишем: "Вы стоите в центре комнаты, заполненной грудами ненужного хлама. У дальней стены вы видите дверь." Создайте действие "Подойти к двери" с переходом на локацию "Дверь".
IF Ключ = 0:
'На полу вы видите небольшой ключ.'
ACT 'Взять ключ':
Ключ = 1
ADDOBJ 'Ключ'
PL 'Вы взяли ключ.'
GOTO $CURLOC
END
END
Обратите внимание, что строка "На полу вы видите небольшой ключ." находится внутри условия. Благодаря этому, она будет на экране до тех пор, пока игрок не возьмет ключ. Также обратите внимание на строку PL 'Вы взяли ключ.' PL - оператор вывода текста в окно дополнительного описания. При переходах между локациями дополнительное описание не очищается, поэтому в него удобно записывать результаты совершенных действий.
Создайте локацию "Дверь". В описании пишем: "Дверь заперта." Создайте действие "Отойти от двери" с переходом на локацию "Комната".
IF OBJ 'Ключ':
ACT 'Открыть дверь ключом':
DELOBJ 'Ключ'
GOTO 'Победа'
END
END
Рассмотрим подробно. Условие "OBJ 'Ключ'" определяет, находится ли предмет "Ключ" в инвентаре. Действие "Открыть дверь ключом" будет доступно тогда, когда предмет "Ключ" находится в инвентаре. Обратите внимание на строку DELOBJ 'Ключ' После того, как мы открыли дверь, ключ нам больше не нужен, поэтому мы удаляем его из инвентаря.
Создайте локацию "Победа" с описанием "Вы выбрались из комнаты."
|
- Чекпойнты - автоматическое сохранение
- Выбор случайных вариантов - тянем карты из колоды [1.0]
- Плавное изменение цвета фона [1.0]
- Игровое время [1.0]
- Плавная остановка музыки в игре
- Поиск кратчайшего пути между городами
- Мини-игра "Взорви зомби" - пример использования локации-счётчика
- Архив примеров кода - "28 в 1"
- BlackJack Lite [1.1]
- Пример реализации боя [1.0]
- Back Tutorial [1.0]
- HTML Sample [1.0]
- Гибкий плейлист [1.0]
- Использование Wiki разметки [1.1]
- Использование в HTML специальных символов [1.0]
- Оформление меню для игры [1.0]
- Сапер [1.1]
- Конь и ферзь [1.0]
- Жизнь 1.0
- Создание диалогов [1.1]
- Библиотечка дополняющая инвентарь 0.76



















