RU

Первые шаги...

Tom Run #2765 31.08.2024 11:55 97 comments 14053 views

Привет, мне понравилась идея создание текстовых игр и QSP движок показался прост в изучении, так как я в этом деле 0. Очень много вопросов закрываются путём изучения форума и справок по движку, и тут же огромная благодарность @aleksversus за его уроки. Но всё же вопросов, как всегда, больше чем ответов и это хорошо, поскольку это превратилось в хобби. Я надеюсь что вы поможете разобраться по ходу изучения в части из них, или направите в нужное направления, где это можно посмотреть (если похожую тему не найду).
На данном этапе я хотел бы создать игру на QGen - 4.2.0 beta 4 под плеер qsp - 5.7.0 для Windows.
И сразу хочу выразить большую благодарность всем тем кто будет мне помогать в решении (тупых) вопросов…

Для быстрого поиска:

Spoiler

Вопрос №1: Стиль кода

Вопрос №2: Ограничение переменных

Вопрос №3: Changelog

Вопрос №4: Error105

Вопрос №5: !BASE

Вопрос №6: Меню игры (массивы)

Вопрос №7: Модули

Вопрос №8: Метки

Вопрос №9: disablescroll = 0

Вопрос №10: loc

Вопрос №11: Список переменных (debugger)

Вопрос №12: Путь к игре

Вопрос №13: Однострочная запись

Вопрос №14: Знак <

Вопрос №15: Цикл

Решение №1: Файл .bat

Решение №2: Текст поверх картинки

Решение №3: Кнопка - Выход

Edited at 26.10.2025 17:35 (3 months ago)

Aleks Versus, сразу подумал что это прикол, вызывать выражение с динамиком через динамик, а оно работает =):

$vol["musmax"]={volmus +=20 & play "sound/effect/button.ogg",voleff & dynamic {if volmus>100: volmus=100} & gt $curloc}

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

Aleks Versus Moderator 04.12.2024 17:21 (1 year ago)

Динамик - это просто оператор. А ограничений на вложенность фигурных скобок в QSP вроде нет, поэтому любой код можно углублять, сколько нужно. Я использую dynamic и dyneval сейчас как раз для таких вот лямбда-функций.

Как только думаешь что ты Царь - приходит Король и говорит что ваш сосед Император.
Tom Run (15:27)
Век живи - век учись. Спасибо!
p.s. Это я фильм смотрел, где мужик что-то в таком духе ответил священнику, а теперь не могу вспомнить и весь день придумываю что-то свое. Ибо муляет в голове и отвлекает от написание кода =).

Лазил по форуму и как рас наткнулся на такой ответ:

Nex:

Максимальная вложенность выражений: 30
Впрочем, если содержимое фигурных скобок рассматривается как особая символьная строка (что вполне вероятно), то ограничение вложенности не должно действовать. Я так не вспомню, это нужно смотреть в исходниках интерпретатора, либо спрашивать у Байта.

Думаю вложенности и в 30 будет не просто достичь, так что можно не заморачиваться=)
Если интерестно вот тема была - Пример создания циклов с помощью DYNAMIC.

Вопрос №14 «Знак <»
Начал писать подобие дебагера для своей игры и столкнулся с вот такой проблемой - КАРТИНКА.
3 вопроса на картинке и код если нужно:

usehtml=1
$a={one text}
$b={
two text
}
'>'
if $a >0: $color[1]='<font color=green>' else $color[1]='<font color=red>'
if $b >0: $color[2]='<font color=green>' else $color[2]='<font color=red>'
'<<$color[1]>><<$a>></font>'
'<<$color[2]>><<$b>></font>'
'&lt;'
if $a <0: $color[1]='<font color=green>' else $color[1]='<font color=red>'
if $b <0: $color[2]='<font color=green>' else $color[2]='<font color=red>'
'<<$color[1]>><<$a>></font>'
'<<$color[2]>><<$b>></font>'
'='
if $a =0: $color[1]='<font color=green>' else $color[1]='<font color=red>'
if $b =0: $color[2]='<font color=green>' else $color[2]='<font color=red>'
'<<$color[1]>><<$a>></font>'
'<<$color[2]>><<$b>></font>'
'!'
if $a !0: $color[1]='<font color=green>' else $color[1]='<font color=red>'
if $b !0: $color[2]='<font color=green>' else $color[2]='<font color=red>'
'<<$color[1]>><<$a>></font>'
'<<$color[2]>><<$b>></font>'

В плеере 5.9.0 отображается также. Не пойму с чем это связанно.
Я создал в дебагере подсветку переменных, когда всё хорошо то горит зеленым, когда нет красным. Но сейчас он как новогодняя ёлка и код после знака меньше не отображается =(

Aleks Versus Moderator 07.12.2024 07:38 (1 year ago)

Tom Run,
знак меньше в данном случае воспринимается движком, как начало HTML-тега. У классического QSP “неполноценный” HTML, поэтому в данном случае вылезает такой артефакт. Используй для вывода на экран знаков меньше и больше мнемоники: “<” и “>” соответственно.

P.S. в той теме про написание цикла в динамике как раз я выспрашивал у Аксиля, нафига ему такой цикл. Теперь-то я понимаю, что это были первые лямбда-функции на куспе. :=D

Aleks Versus, главное писал себе файл спецсимволов и не вспомнил про них, видать потому что отобразить знак еще таким способом можно, а вот засунуть мнемоник в условие это еще тот геморрой.
Я сделал так что если дебагер находит ошибку (переменную которой быть не должно), он эту переменную выводит на экран, для того чтоб посмотреть сразу что в ней лежит. Вроде удобно, но в случае если в переменной условия (к примеру для динамика), то после знака меньше код не отображается. На моём примере:

voleff +=20 & play "1.ogg",voleff & dynamic {if voleff>100: voleff=100} & gt $curloc    - работает.
voleff -=20 & play "1.ogg",voleff & dynamic {if voleff    - тут он обрывается.

Это конечно не критично и на работу не влияет, но не приятно.

Про отображения знаков в тексте я понял (это был ответ на 2й и зацепом 3й вопросы), а что насчёт цвета (1й вопрос).
Почему знак ! и = срабатывают исправно, а < и > не выполняют условия для $b. Исходя из примера:
$a - больше 0, не меньше 0, не равно 0. - результат: $a - больше 0.
$b - не больше 0, меньше 0, не равно 0. - результат: $b - меньше 0.
Как может переменная $b быть меньше 0?
Это видимо както связанной с многострочной записью:

$b={
two text
}

Плеер делает вывод на основе первой пустой строки, но как она может быть меньше 0 я не пойму, она должна равняться 0 в таком случае. Прийдется все переменные переделывать для динамика и не оставлять пустых первых строк или использовать знак неравенства. Печально от того что не понятно. :(

Aleks Versus Moderator 07.12.2024 16:21 (1 year ago)

Tom Run,
тогда тебе нужна отдельная локация-функция на такой случай. Чтобы подготавливать текст перед выводом.
У меня вот такая:

!# em.html.to_mnemonics
$result = $replace($args[0], '&', '&amp;')
$result = $replace($result, '<', '&lt;')
$result = $replace($result,'>', '&gt;')
!--- em.html.to_mnemonics ---------------------------------

По поводу сравнения:
Ты сравниваешь текстовое значение с числовым. При этом происходит преобразование числа в строку. Потом сравниваются две строки. Видимо символ переноса строки считается меньшим чем символ нуля, поэтому $b оказывается меньше нуля.

Вообще, почему ты сравниваешь эти значения с нулём? Я не совсем уловил, как ты думаешь это должно работать.

Aleks Versus,
Я думал если переменная пустая то она =0, а если нет то значит всегда больше, так как там что-то есть.
Меня просто удивило когда выскочил минус при заполненной переменной, до использования динамика такого не было и я привык к 0.
Заменил 0 на ‘’ и все заработало.
Сам того не подозревая продолжал говнокодить, спасибо, что разъяснил. Теперь нужно пересмотреть, где еще нули натыкал.
p.s. Я думал 0 он и в Африке 0 =)

Не зря начал дебагер писать в начале, уже наткнулся на такие условия:

if $m="": $m=$txt else $m!"": $m=""

И всё работает как часы. Иногда смотрю на свой код и думаю - кто его писал? =)

Решение №3 «Кнопка - Выход»
Реализовал кнопку выхода таким способом - EXIT.rar.
Пару дней уже ей пользуюсь и все ок, но понимаю что это всё же костыль и ушатывать постоянно плеер не хорошо, от сюда и вопрос:
может с ним что-то случиться?
Уверен за столько лет так уже кто-то делал до меня, но почему-то я негде не встречал такой реализации.

Aleks Versus Moderator 09.12.2024 09:00 (1 year ago)

Tom Run,
:D https://qsp.org/forum/comments/8950
Ушатывать плеер можно, конечно, но не везде. Если планируется, что твоя игра будет запускаться на чём-то, кроме винды, то предсказать, как поведёт себя плеер в иных случаях – невозможно. Как вариант, ты будешь полностью вешать устройство, что конечно же не понравится игроку.

Ну и как всегда в таких случаях, обращаю твоё внимание на qSpider, где выход из игры, меню, и что угодно, можно кастомизировать безо всяких костылей.

Aleks Versus,
Я понял, нужно протестировать в маке и линуксе. Спасибо за ответ и ссылку!

Nex:

Поэтому, для stand-alone нужен свой, переписанный плеер, а в таком плеере реализовать какую-нибудь “волшебную” команду, причем не только для кнопки “выход”, будет довольно просто.

Как я понял, кнопку сделать просто, но можете ее не ждать (прошло 15 лет от сообщения).
Хотя не могу понять почему ее не реальзовать. Я например люблю играть в фуллскрин экране, и чтобы выйти или зайти в него нужно нажимать 2 кнопки так-как из меню в него не попасть. А чтобы закрыть в таком режиме игру нужно сново нажимать 2 кнопки. Приходиться пользоваться Alt+F4 чтобы не запоминать комбинации под каждый плеер.
Ты меня решил измором взять с этим вашим qSpiderом? :=D
p.s. Я сторонник классика. В нём есть всё что мне нужно, кроме настроек того что уже есть. (Цвет окошек, фиксировать размер окошек, цвет действий и т.д. ну сами знаете. Игрокам, как и начинающим авторам всегда будет не хватать красивой обвёртки которую почему-то не хотят делать, а завозят только технические решения по типу кортежей. Ну это мои наблюдения по последним обновам, даже для редактора сделали подсветку цифр для номера строк, а плеер, как всегда, обделили. Как говорят в народе “Встречают по одёжке, а провожают по уму”. Одёжка у нас не очень =(. Я переписывался с авторами игр которые делают сейчас обновы на классике и их будет трудно переубедить сесть за новый классик, а про паука можно и вовсе забыть. Уговорил, пойду попробую еще рас запустить паука, может в 4‑й рас что-то измениться. Но как говорят доктора - “Когда пациент делает одно и то же действе и ждёт другого результата, это признак - …”).

Пошел качать паука и вот что я вижу - КАРТИНКА.
Мог местами преувеличить, но примерно так и есть, как это советовать кому-то хз.
В классике все просто. Делаешь в плеере для своей ОС и 2 других вкладываешь с игрой.
На сайтах указываешь - Платформа: PC/Windows/Linux/Mac
Хотя тут тоже не пойму почему 3 плеера не запихнуть в 1, тот же батник легко распознаёт текущую ОС пользователя.
По плееру не имеет смысла что-то писать так как всё равно отправите в дискорд или куда-то к автору плеера, чего делать всё равно не буду.
p.s. Поржать, понять и простить.

Просьба
Скиньте, пожалуйста, исходник Source code(zip), на почту - osnov24@gmail.com
Если интересно зачем:
Столкнулся с такой ошибкой Ошибка, судя по ней нужно переустановить виндовс, но я пока не планирую этого делать.
Спасибо!

Вот файлы.
qspgui-5.zip
qsp-5.zip
NB. Форум почему-то переименовал архивы.

Byte, спасибо!

Log in or Register to post comments.