easy.math.qsp v. 3.2.0
Библиотека математических функций для Quest Soft Player
Разрабатывалась для плееров версий 5.9.0 — это: классический плеер версии 5.9.0 и qSpider версии [1.2.0] и выше. Не гарантируется правильная работа на плеерах иных версий. Некоторые функции имеют ограничения на значение числовых аргументов, это связано с используемыми плеером библиотеками. Для разных версий плеера могут быть разные ограничения, поэтому внимательно читайте документацию к плееру, под который разрабатываете игру.
- aleksversus@mail.ru
- Вконтакте: id40090736
- Бусти: boosty.to/aleksversus
Изначально библиотека создавалась для обеспечения нужд игры МАГИКОН.
Поддержать проект можно, подписавшись на Boosty: aleksversus.
Подключение и использование
Предполагается, что вы читали справку по QSP, пробовали писать игры и уже знаете, что такое локации, подпрограммы (процедуры) и функции, чем отличаются текстовые и числовые переменные, что такое аргументы и для чего они нужны.
Чтобы использовать функции библиотеки при написании своей игры, сделайте следующее:
-
Скачайте архив с библиотекой со страницы релизов, и распакуйте в папку, где лежит ваша игра. В папке с вашей игрой должна появиться папка
"lib"
. -
В своей игре на самой первой локации, в поле "выполнить при посещении" введите
inclib 'lib\easy.math.qsp' - Теперь вы можете пользоваться функциями библиотеки.
Все функции библиотеки вызываются с помощью ключевого слова FUNC
( ) - для получения числовых значений, и $FUNC
( ) - для получения текстовых значений.
Исключением являются функции, результат которых записывается в массив. Такие функции вызываются оператором GOSUB
, или GS
.
Аргументы могут быть текстовыми или числовыми в зависимости от требований и назначения функции.
Можно использовать неявный вызов функций, если вам так удобнее. Функции, которые явно вызываются через GOSUB
, не вернут результат даже при неявном вызове.
Далее все примеры будут писаться для варианта с неявным вызовом.
Библиотека работает с переменными, имена которых включают префиксы, соответствующие названиям локаций, чтобы избежать пересечений с именами переменных, которые вы используете в своих играх. Если функция может принимать в качестве аргумента имя переменной/массива, удостоверьтесь, что значения локальных переменных в этой функии не перекроют передаваемые вами значения.
Все переменные, использующиеся функциями, после - уничтожаются.
Если результат работы функции помещается в массив, одним из параметров функции указывается имя массива, в который должен быть помещён результат. Имена массивов, передаваемые в аргументах функций, должны записываться по общим правилам записи имён переменных для плеера: текстовые массивы - с символом $
перед именем, числовые - без символа $
перед именем. Само имя не должно содержать символа $
, и других запрещённых символов.
В руководстве приводятся примеры с результатами работы функции. Некоторые из таких примеров не являются валидным кодом QSP, и служат лишь для демонстрации вызова функций и результата, который они вернут. Чтобы превратить данные примеры в валидный код QSP, необходимо закомментировать часть с представленным результатом.
@em.zero(13)='0000000000000'
@em.zero(13,'1')='1111111111111'
@em.zero(13,'10')='10101010101010101010101010'
@em.zero(13,'a')='aaaaaaaaaaaaa'
@em.zero(3,'bla')='blablabla'
@em.zero(13) & ! ='0000000000000'
@em.zero(13,'1') & ! ='1111111111111'
@em.zero(13,'10') & ! ='10101010101010101010101010'
@em.zero(13,'a') & ! ='aaaaaaaaaaaaa'
@em.zero(3,'bla') & ! ='blablabla'
Работа с исходниками
Вы можете скачать исходный код библиотеки с гитхаба и собрать собственный модуль лишь из тех функций, которые вам нужны.
Сборку рекомендуется осуществлять через билдер в Sublime Text из пакета QSP для SublimeText.
При включенном препроцессоре необходимо подключить файл 00_sets/_variables.qsps_
к сборке, чтобы все функции добавились в модуль, либо написать собственный файл с метками нужных функций и так же подключить его к сборке. Для примера, можно взять project.json
из исходников.
История версий
Функции
-
Вспомогательные функции
- em.dergb - получает составляющие цвета на основе числового кода цвета QSP.
- em.str.get_word - из строки вида
aaa|bbb|ccc|...|yyy|zzz
вычленяется подстрока, стоящая в указанной позиции. - em.str.in_regexp - преобразует обычную строку к регулярному выражению, экранируя символы, являющиеся в регулярках специальными.
- em.tag.get_cont - получает значение сдвоенного тега.
- em.tag.get_num - получает значение одиночного тега.
- em.var.get_type - получение типа переменной.
-
Операции над вещественными (дробными) числами
- em.sqrt - вычисление корня квадратного.
- em.add - вычисление суммы рациональных чисел.
- em.div - вычисление частного от деления рациональных чисел.
- em.mult - вычисление произведения рациональных чисел.
- em.round - округляет рациональное число.
- em.simpl - сравнение рациональных чисел.
- em.indiv - рациональное частное от деления двух целых чисел
- em.divdigs - получает разрядность дробной части числа
- em.dz - отсечение нулей в дробной части числа
- em.undiv - превращает рациональное число в целое
-
Логические операции
- em.byte.add - "логическое" сложение
- em.byte.dev - "логическое" вычитание
-
Операции над текстом
- em.arr.search - производит поиск элемента массива, содержащего строку, соответствующую регулярному выражению.
- em.gen_uuid - генерирует UUID-подобный идентификатор.
- em.str.random - генерирует строку случайных символов
- em.str.slice - вырезает из строки подстроку по номерам символов.
- em.str.thin - разрежение строки строкой-разделителем.
- em.str.widetrim - удаление прилегающих пробелов, символов табуляции и переводов строк, или символов преформатирования.
- em.zero - генерирует строку одинаковых символов
-
Операции над шестнадцатеричными числами
- em.col.inv - инвертирование цвета в формате RRGGBB, т.е. преобразование цвета к совершенно противоположному.
- em.col.add - изменение цвета, записанного в шестнадцатеричном RGB.
- em.col.in_rgb - преобразование цвета из формата RRGGBB в формат rgb понятный QSP.
- em.dec.in_col - превращает десятеричное число в шестнадцатеричное
- em.dec.in_hex - перевод из десятеричной системы в шестнадцатеричную
- em.hex.add - сложение двух шестнадцатеричных чисел
- em.hex.in_dec - перевод из шестнадцатеричной системы в десятеричную
-
Операции над массивами
- em.arr.print - вывод содержимого всех элементов массива в виде текста
- em.fewArrs.print - вывод содержимого нескольких массивов.
- em.arr.insert - вставка элемента в массив со сдвигом ячеек вправо.
- em.arr.clear - удаление всех элементов массива, соответствующих указанному значению.
- em.arr.concatenate - объединение двух массивов в массив кортежей.
- em.arr.enumerate - на основе исходного массива генерирует массив кортежей типа
[значение, индекс]
. - em.arr.few_kill - удаление нескольких элементов массива одной командой.
- em.arr.fill - упрощённое заполнение массива значениями;
- em.arr.fill_rand - заполнение элементов массива случайными числами
- em.arr.fill_strt - заполнение элементов массива подряд идущими числами.
- em.arr.sort - многофункциональная сортировка содержимого массива.
- em.arr.restand - перетасовка элементов массива в соответствии с таблицей перестановки.
- em.arr.desort - операция обратная сортировке.
- em.arr.simpl - сравнение содержимого двух массивов.
- em.arr.find - поиск максимального или минимального значения числового массива по указанной области и в заданных пределах.
-
Операции над целыми числами
- em.abs - модуль от разности.
c=|a-b|
- em.digs - получение разрядности целого числа
- em.even - округление целых чисел до указанной разрядности
- em.exp - возведение целого числа в степень.
- em.log - логарифмирование по указанному основанию.
- em.random - случайное число в указанных промежутках.
- em.summ - подсчёт суммы всех элементов массива.
- em.abs - модуль от разности.
-
Работа с координатной сеткой
- em.map.cell.get_coords - определяет координаты ячейки по текущему номеру ячейки.
-
Работа с HTML
- em.html.clr_pref - очищает текст с HTML-разметкой от символов преформатирования.
- em.html.to_mnemonics - заменяет в тексте с HTML-разметкой символы
<
и>
на соответствующие мнемоники.
-
Работа с HTML
- em.tpl.get - получает элемент кортежа по индексу.
- em.tpl.unzip - распаковывает кортеж в массив.
Перспективы
Библиотека будет пополняться новыми функциями по мере необходимости, и если существование функции хоть как-то оправдано. Некоторые функции на сегодняшний день сделать невозможно - они будут либо слишком сложны, либо заметно снизят быстродействие игры. Вероятно, некоторые математические операции очень скоро будут встроены непосредственно в движок плеера, и необходимость в них отпадёт. Такие функции будут исключаться из последующих версий библиотеки. По возможности, алгоритмы будут упрощены и разгружены, а так же будут достраиваться необходимые для работы с функциями параметры.