Как сделать?
…
Не помогло. все равно выходит на else.
…
поправка: не понял в чем подвох(или может я косой), но заработало при тупой подстановки пробелов пока правил. было $глава1=‘t4r6’ сделал $глава1 = ‘t4r6’ и в input так же, причем и другой код тоже заработал. И да, с присвоениями помогло в первом коде сразу.
всем спасиб, разобрался.
Еще один вопрос:
Хочу сделать прыжки по коду с актами. Есть ли команда, которая останавливает дальнейшее выполнение кода?
Что-то типа такого:
текст текст текст
act 'что-то сделать':
*clr
текст
текст
jump '123'
end
стоп код
:123
act 'что-то тут сделать':
*clr
текст
текст
jump '321'
end
стоп код
:321
act 'еще что-то':
*clr
текст
текст
end
иначе получается, что все действия (act) прописываются сразу при входе в локацию
ejikplains,
Пишешь
wait 3000
И три секунды код в принципе не выполняется, как и возможность игрока что-то делать.
Прямой пример:
Spoiler
'текст текст текст'
act 'что-то сделать':
*clr
'текст'
'текст'
wait 3000
end
act 'что-то тут сделать':
*clr
'текст'
'текст'
wait 5000
end
act 'еще что-то':
*clr
'текст'
'текст'
wait 2000
end
А можно и так)
Spoiler
'- Мы ведь ведём с вами разумный разговор?'
act '- Это что ещё за оборот речи такой?': dialog45 = 2 & gt curloc
if dialog45=2:
*clr
cla
'- От детворы услышал. Показалось вразумительным объяснением происходящего.'
act '- Нет, ну вы гений!': dialog45=4 & gt curloc
act '- Да простит меня Иисус, но Вы, крайне неодобрительный персонаж.': dialog45=3 & gt curloc
end
if dialog45=3:
*clr
cla
'Затянулась драка, никто не смог предугадать победителя.'
wait 7000
'Победитель ...!'
end
if dialog45=4:
*clr
cla
'- На том и порешили.'
end
с if уже общаюсь, но думал, может что проще будет. просто с точки зрения отзывчивости, к метке придти и остановить код намного проще и оперативнее, нежели гонять по ифам весь код с нуля. Вроде только что нашел(не проверенный, прост подсказали) способ через параметр exit, но не пойму почему из под act параметр jump работать не хочет. Просто, если act является контейнером для блока кода, то с jump потерплю фиаско.
ejikplains,
А, я видимо не так вопрос понял. Только собственно, зачем тебе прыжки? Чтобы быстро диалоги менять? Ну, по идеи, потому что прыгать вниз кода он не может, только вверх(а может и нет, циклами не особо пользовался). И выводит всё, потому что условия нету для скрытия тех, которых быть в данный момент не должны.
получилось крч! Мучался, да тему накопал, где, как и думал, act служит в виде контейнера для кода, но это можно обойти.
jump работает вроде в обе стороны, но заместо него умельцы придумали другое решение. Ниже код, благодаря которому можно переходы делать.
IF $args[0]<>'': JUMP $args[0]
:ccc
'ты тут'
act 'иди дальше':
cla
*clr
'пришел'
gs $CURLOC,'ppp'
end
exit
:ppp
act 'иди назад':
cla
*clr
gs $CURLOC,'ccc'
end
exit
команда exit принудительно останавливает код и его дальнейшее исполнение, а заместо jump исполняется gs $CURLOC,’ccc’, с присвоением IF $args[0]<>’’: JUMP $args[0]
Теперь поясню для чего это нужно:
1)Игрок путешествует в пределах одной локации, которой присвоил имя “глава первая”. Это и удобно и работоспособно. К тому же работа с инвентарем по прежнему активна через взаимодействие с актами(act), а реализацию пропусков(нашел предмет - прошел куда-либо. не нашел - не прошел) легко делается для всей главы в начале при помощи присвоений и изменений 1 или 0.
2)При работе с большим кодом, множество if могут заметно увеличить время “обдумывания” и исполнения. Когда работает if, то до конца кода все ифы проверяются на соответствие. Именно поэтому намного лучше остановить код для дальнейшего исполнения вообще. тогда будет осуществляться только поверхностный поиск меток и при исполнении сразу стоп. Если хочешь понять о чем я говорю, то для эксперимента выполни ниже у себя код:
a = RAND(1, 50)
if a=1:
'у нас число 1'
end
...
...!вручную пропиши от 1 до 50
...
if a=50:
'у нас число 50'
end
3)Еще прост привык к notepad++ с его ctrl+h. наставил спецсимволов везде у текста, где нужно, все позаменил и сидишь куришь в потолок))))
теперь такой вопрос: имеется большаааая прибольшая таблица с матрицей и с переменными. Все эти переменные и сама таблица мне пригодятся на протяжении всей игры. в моем случае переменные - это картинки, которые должны будут показаны в бою.
что конкретно происходит: есть удар кулаком, которым можно бить постоянно и есть удар стихией, где стихии восстанавливаются один ход. пока стихии восстанавливаются, картинка черно-белого цвета. стихии восстановились - становятся цветные.
Можно ли все эти переменные с матрицей повреждений запихнуть в отдельную локацию какую-либо, но так, чтобы та локация постоянно обрабатывалась именно в том месте, где мне нужно?
ejikplains,
GOSUB 'матрица'
ejikplains,
Можно вопрос, от человека не очень понимающего, но жгче желающего разобраться в qsp?
Как этот код работает вообше?
UPD.:В предыдущем разобрался, извините.
Как работает gs $curloc +’название метки’?
Чувак,
тебе поможет вопрос, который задан в соседней теме https://qsp.org/forum/comments/23051 что такое ARGs и с чем его едят.
Когда выполняем код
gosub $curloc,'ААА'
плеер заглядывает повторно на текущую локацию и встречает строку кода
IF $args[0]<>'': JUMP $args[0]
$args[0] в этот момент для него равен “ААА”, и он прыгает к указанной метке.
От метки и до конца локации плеер выполняет весь код и, поскольку мы использовали gosub, возвращается к следующей строке после gosub $curloc,’ААА’ и продолжает выполнение кода. Поэтому если строка gosub $curloc,’ААА’ была в теле действия, выполнение кода действия не прерывается, а переход на текущую локацию всё равно как бы совершён.
могу ли я удалять акты через if? будет момент, где после ввода актов будет проверка, где количество актов равно числу определенному в массиве и если это число ниже количества актов, то нужно удалить определенный акт(act) или добавить(если число значительно больше). если да, то как тогда лучше это сделать: до объявления действий вводить delact или после?
Чтобы было понятно, ниже пример того что спрашиваю:
результатмассива = 3
if результатмассива > 3:
!тогда нужно добавить акт
act 'новое действие':
gt 'куда нужно'
end
end
if результатмассива < 3:
delact 'первое действие'
end
act 'первое действие':
gt 'первый дом'
end
act 'второе действие':
gt 'второй дом'
end
Думаю, что сначала лучше создать действие, а потом его удалять :-)
логично. но тогда по логике действие уже введено и в раздел действий добавлено, а delact после его удаляет, но поскольку действие уже введено, нужно обновить их список. но если он очищается, то вроде заново идёт ввод, delact и очистка и так бесконечно…. но это только в теории рассуждаю…. или всё же действие после delact сразу удаляется из действий без обновления?
Разобрался сам абсолютно случайно(сделал совершенно другое, но решена была задача. не так, как хотел, но получилось).
…
Теперь вопрос такой: возможно ли реализовать таймер с выводом времени?
В бою одна из способностей потребует от игрока быстрого выбора. Если игрок не выбрал за отведенное время ничего, то он теряет жизнь. Так же если выбрал не верно, то тоже её теряет. Таймер должен видеть игрок только в случае если ему выпадает данная способность.
ejikplains,
в разделе “Разработчикам” есть пример “Взорви зомби”, также ещё что-то в каталоге было, кажется, только уже не помню, какие именно игры.
Ну и традиционно скажу своё “фи” ) Сам лично не люблю такие задания “на скорость” в текстовых играх, хотя, отмечу, на всё воля автора )