Как сделать qsp игру

Добавил пользователь Владимир З.
Обновлено: 19.09.2024

Quest Soft Player - это пакет позволяющий создавать и играть в интерактивные текстовые игры. В пакет входит программа "Quests Generator" ("QGen.exe") предназначеная для создания квестов под платформу "Quest Soft Player" (QSP). Программа плеер ("QSP.exe") при помощи которой можно запустить игру под платформу QSP. Документация с перечнем всех возможных функций и несколько примеров для более быстрого освоения движка. Огромная функциональность платформы впечатляет!

QSP позволяет использовать для оформления игры такие форматы:

графику и видео в формате BMP, JPG, анимированные GIF, PNG, AVI;
музыку и звуки в формате WAV, MP3, OGG, Mid, Mod, Flac, It, Xm и программное выставление уровня громкости.

AeroQSP - расширенная версия плеера на flash;
QSP для Linux - для Linux x86_64 платформ;
QSP CE - Версия плеера для Pocket PC 2003 - Windows Mobile 6.1 устройств;
qsPSP - Порт движка на портативную приставку Sony PSP;
QSP для PocketBook - Версия QSP для PocketBook (электронные книги).

Очень простой и доступный для начинающих встроенный язык для разработки игр. Если вы сталкивались с Basicом, то изучить язык QSP не предоставит трудностей. А также наличие подробной документации и огромное число примеров способствует быстрому обучению программирования на QSP. Имеется поддержка HTML.

Наличие функционального редактора для написания игр, ведение списка локаций и удобное представление локаций и компонентов, позволяет упростить написание и отладку.

Есть возможность коллективного творчества, когда несколько авторов пишут разные ветви одного квеста, а затем сливают в один.

Если вы давно мечтали написать свою игру, с QSP у вас есть возможность воплотить свою мечту в реальность.

Системные требования: Для запуска QSP вам потребуется любой компьютер, на котором установлена операционная система "Windows 95" или выше. Желательно, чтобы процессор был не ниже "P100", глубина цвета была не меньше 16 бит, присутствовала мышь.

Следует отметить, что численно ширина шкалы может не совпадать со значением максимального уровня здоровья. Так же и заполненная часть - с текущим уровнем здоровья. Эх, если бы всё было так просто, нам бы не пришлось ничего считать.

Мы рассмотрим несколько способов отрисовки шкалы.

Отрисовка шкалы символами

Допустим, ширина шкалы 20 символов, что соответствует максимальному уровню здоровья. Если текущий уровень здоровья равен максимальному, или же равен нулю, нам потребуется всего лишь повторить 20 раз один и тот же символ.

|||||||||||||||||||| - полная шкала . - пустая шкала

Проще всего сделать это, используя цикл:

i = 0 :for if i 20 : $scale = $scale + '|' i = i + 1 jump 'for' end

Данный цикл создаст текстовую строку из двадцати символов вертикальной черты в переменной $scale. Но этого нам мало. У нас ведь есть промежуточные состояния. Когда герой имеет всего половину от максимального уровня здоровья, четверть, или даже двести тридцать семь четыреста сорок вторых. То есть нам нужно получить что-то вроде этого:

|||||||||||||||. - заполнена на три четверти ||||||||||. - заполнена наполовину

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

20 символов соответствует health[ 'макс' ] x символов соответствует health[ 'тек' ]

Таким образом, чтобы узнать, сколько палочек нам следует нарисовать в нашей шкале, нам достаточно вычислить x. Согласно пропорции:

20 / health[ 'макс' ] = x / health[ 'тек' ] ⇓ x = ( 20 * health[ 'тек' ]) / health[ 'макс' ]

Теперь, когда мы знаем x (что соответствует ширине заполненной части шкалы), мы можем усовершенствовать наш цикл отрисовки шкалы. Пока i меньше x, добавляем в $scale палочку, потом - точку.

x = (health[ 'тек' ] * 20 ) / health[ 'макс' ] i = 0 :for if i 20 : if i '|' else $scale = $scale + '.' end i = i + 1 jump 'for' end

Чтобы вывести шкалу, придётся использовать *pl $scale или pl $scale. Я рекомендую оформить алгоритм в отдельной локации в виде функции и вызывать по мере необходимости. Тогда вы можете использовать один алгоритм для отрисовки всех шкал в игре: здоровье, мана, выносливость, сила и пр. и пр. Вот как выглядит данный алгоритм в виде функции:

! ----scale.symbols---- args[ 0 ] = args[ 0 ] & ! текущее значение параметра args[ 1 ] = args[ 1 ] & ! максимальное значение параметра if args[ 2 ] = 0 : args[ 2 ] = 20 & ! ширина шкалы в символах (по умолчанию 20 символов) ! вычисляем ширину заполненной части - в символах: args[ 'x' ] = ( args[ 0 ] * args[ 2 ] ) / args[ 1 ] ! выполняем цикл: args[ 'i' ] = 0 :for if args[ 'i' ] args[ 2 ] : if args[ 'i' ] args[ 'x' ] : $args[ 'scale' ] = $args[ 'scale' ] + '|' else $args[ 'scale' ] = $args[ 'scale' ] + '.' end args[ 'i' ] = args[ 'i' ] + 1 jump 'for' end $result = $args[ 'scale' ]

Такая функция позволяет быстро и легко вывести шкалу в любом месте игры, для любого параметра, и любой ширины:

! выведет в окно основного описания шкалу здоровья шириной 30 символов: *PL $func ( 'scale.symbols' ,health[ 'тек' ],health[ 'макс' ], 30 ) ! выведет в окно доп. описания шкалу маны шириной 20 символов (по умолчанию): PL $func ( 'scale.symbols' ,mana[ 'all' ],mana[ 'max' ])

Отрисовка шкалы в виде таблицы

Способ основан на умении QSP рисовать разноцветные таблицы по разметке html.

Дело в том, что в этом случае нам не важна ширина шкалы. Ширина заполненной и незаполненной части вычисляется в процентном отношении. Иными словами:

health[ 'макс' ] соответствует 100% ширины таблицы health[ 'тек' ] соответствует x

Заполненную часть шкалы будет представлять первая ячейка таблицы, раскрашенная в один цвет, незаполненную - вторая, раскрашенная в другой цвет. Но тут стоит учитывать один нюанс: нельзя делать ячейку шириной в 0%. Т.е. если шкала опустошена, или заполнена по-максимуму, достаточно одной ячейки. Всё это вылилось в весьма простенький код, который я привожу сразу для отдельной функции:

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

Заключение, примечания, скриншоты

Заключение и примечания

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

Примечание №1 к первому способу: для отрисовки шкал символами используйте моноширинные шрифты, например Courier.

Примечание №2 к первому способу: В условии сравнения i и x используется знак "строго меньше", потому что цикл считается с нуля. Если бы i изначально была равна единице, в условии цикла i сравнивалась бы не с числом 20, а 21. Тогда в условии сравнения i и x можно было бы использовать знак "меньше либо равно".

Примечание №3 к первому способу: этот способ позволяет отрисовывать шкалу в том числе и картинками. Используйте вместо символов картинки шириной 1-2 пикселя (вставляются html-тегом .

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

форум об interactive fiction, текстовых приключенческих играх и всём таком.

Комплект поставки qsp-игры вместе с файлами плеера

В настоящее время тестирую на знакомых (в том числе и очень далёких от темы текстовых игр) всякое разное, написанное на QSP. Чаще всего люди готовы лишь скачать-запустить-посмотреть, а технические подробности (как скачать плеер, как его запустить и как из него открыть игру) им не особо интересны. Поэтому я в архив с тестируемым модулем (игрой это пока язык не поворачивается назвать) вкладываю и плеер, и запускной файл — чтобы всё запускалось по одному щелчку. Сперва это был bat-файл, но поскольку он открывает консольное окно, которое висит, пока не закроешь QSP, я перешёл на VBS-скрипт (я в нём не особо силён, но уж что есть).

Подразумевается, что в каталоге с игрой в корне лежит qsp-файл игры, а в подкаталоге "qsp" лежат файлы и подкаталоги QSP-плеера. Дополнительно добавлен фильтр, отбрасывающий дополнительные qsp-файлы, содержащие в имени "_lib_" (у меня внешние библиотеки в такие файлы вынесены).
Если у кого есть свои идеи по этому вопросу — буду рад услышать.

Зачем перебирать все файлы, если имя нужного .qsp-файла известно заранее?

Nex написал:

Зачем перебирать все файлы, если имя нужного .qsp-файла известно заранее?

Чтобы не заморачиваться с редактированием ещё и vbs-файла. Так кинул в папку — и всё.

Дык можно ж сделать одним ехе-файлом. Например, игра с КРИЛ-2008 "Конец". Инструкцию, как так делается, могу вечерком выложить, сейчас под рукой нету.

Отредактировано Серый Волк (27.09.2010 12:40)

Серый Волк написал:

Дык можно ж сделать одним ехе-файлом. Например, игра с КРИЛ-2008 "Конец". Инструкцию, как так делается, могу вечерком выложить, сейчас под рукой нету.

Отлично! Было бы интересно взглянуть.

Автор QSP и главный разработчик - Аргунов Валерий aka Byte. Лицензия: GNU GPL.

Помимо этого от себя добавлю, что этот движок хорошо использовать тем кто только начал осваивать программирование. Здесь легкий ЯП на котором можно на тренироваться, а потом переходить на более сложные языки.

Автор QSP и главный разработчик - Аргунов Валерий aka Byte. Лицензия: GNU GPL.

Помимо этого от себя добавлю, что этот движок хорошо использовать тем кто только начал осваивать программирование. Здесь легкий ЯП на котором можно на тренироваться, а потом переходить на более сложные языки.

Читайте также: