Первые шаги...
Привет, мне понравилась идея создание текстовых игр и 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: Кнопка - Выход
Aleks Versus, сразу подумал что это прикол, вызывать выражение с динамиком через динамик, а оно работает =):
$vol["musmax"]={volmus +=20 & play "sound/effect/button.ogg",voleff & dynamic {if volmus>100: volmus=100} & gt $curloc}
В первую неделю изучения помню пытался гиперссылку засунуть в гиперссылку, и тогда решил больше не извращаться в будущем, так что даже в мыслях небыло так написать.
Спасибо, буду знать :D .
Динамик - это просто оператор. А ограничений на вложенность фигурных скобок в 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>'
'<'
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 отображается также. Не пойму с чем это связанно.
Я создал в дебагере подсветку переменных, когда всё хорошо то горит зеленым, когда нет красным. Но сейчас он как новогодняя ёлка и код после знака меньше не отображается =(
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 в таком случае. Прийдется все переменные переделывать для динамика и не оставлять пустых первых строк или использовать знак неравенства. Печально от того что не понятно. :(
Tom Run,
тогда тебе нужна отдельная локация-функция на такой случай. Чтобы подготавливать текст перед выводом.
У меня вот такая:
!# em.html.to_mnemonics
$result = $replace($args[0], '&', '&')
$result = $replace($result, '<', '<')
$result = $replace($result,'>', '>')
!--- em.html.to_mnemonics ---------------------------------
По поводу сравнения:
Ты сравниваешь текстовое значение с числовым. При этом происходит преобразование числа в строку. Потом сравниваются две строки. Видимо символ переноса строки считается меньшим чем символ нуля, поэтому $b оказывается меньше нуля.
Вообще, почему ты сравниваешь эти значения с нулём? Я не совсем уловил, как ты думаешь это должно работать.
Aleks Versus,
Я думал если переменная пустая то она =0, а если нет то значит всегда больше, так как там что-то есть.
Меня просто удивило когда выскочил минус при заполненной переменной, до использования динамика такого не было и я привык к 0.
Заменил 0 на ‘’ и все заработало.
Сам того не подозревая продолжал говнокодить, спасибо, что разъяснил. Теперь нужно пересмотреть, где еще нули натыкал.
p.s. Я думал 0 он и в Африке 0 =)
Не зря начал дебагер писать в начале, уже наткнулся на такие условия:
if $m="": $m=$txt else $m!"": $m=""
И всё работает как часы. Иногда смотрю на свой код и думаю - кто его писал? =)
Решение №3 «Кнопка - Выход»
Реализовал кнопку выхода таким способом - EXIT.rar.
Пару дней уже ей пользуюсь и все ок, но понимаю что это всё же костыль и ушатывать постоянно плеер не хорошо, от сюда и вопрос:
может с ним что-то случиться?
Уверен за столько лет так уже кто-то делал до меня, но почему-то я негде не встречал такой реализации.
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, спасибо!