Как сделать?
…
Дамир Белялов,
В первом варианте используется подвыражение.
т.е. в <<>> представлена переменная, значение которой вписывается в вывод ‘Здоровья’.
Во втором варианте мы выводим:
1) ‘Здоровье:’
2) добавляем к выводу значение hp, попутно переведя его в строковый тип (вроде и без этого можно)
3) добавляем ‘слэш’ (или обратный слэш, могу путать)
4) добавляем (и преобразуем в строковый формат) значение mhp
В двух словах - только формой записи. Плеер работает шустро, так что обе записи не сильно его нагрузят.
Тут уже зависит от удобства. Кому-то удобнее сокращать, кто-то усложняет…
Никто не помнит, как Mioirel в игре Zona Выводил здоровье? У него это так красиво выходило, у него там все так намудрено что я запутался, есть простой код как сделать так же, но не расписывать по 10 строк статус?
Дамир Белялов,
Скрин есть?
Дамир Белялов,
Полоски делаются таблицей, цвет - фоновый цвет ячеек.
Потом привязываешь количество ячеек к статам, ХП например. Можешь напрямую, можешь пропорцией.
Далее красишь полоску в зависимости от количества ХП. Например если уровень ХП 50%, то половину полоски в один цвет, половину в другой.
Дамир Белялов,
есть тема со статьёй по отрисовке шкал https://qsp.org/forum/578-otrisovka-skaly
Прошу помочь разобраться в возврате не предыдущую локацию. Дано:
Локация 1, Локация 2. При переходе на локацию 2, в коде локации прописано следующее:
СлучайнаяВстреча=rand(1,2)
If СлучайнаяВстреча=1:
gt "СлучайноеСобытиеКоридор"
end
Если выпадает 1, случается ивент и нас отсылает на локацию Ивента, на которой происходит какое либо действие. Затем с неё нужно сделать возврат на Локацию 2. Каким образом это сделать?
Путем гуглинга и ломания головы, было сделано следующее:
В начале игры - $ONNEWLOC=“ПЕРЕХОДЫ” - локация обработчик
В локации ПЕРЕХОДЫ следующий код:
IF $CURLOC <> $nextLoc:
$prevLoc = $nextLoc
$nextLoc = $CURLOC
END
И в локации ивента, откуда нужно сделать возврат на предыдущую локацию следующее:
act "Продолжить путь":
GOTO $prevLoc
end
Но таким образом, почему то происходит возврат на локацию 1, хотя предыдущей локацией, является Локация 2 ( На которой происходит рандомизация, и в случае выпадения шанса переход на локацию ивента.
Парни, помогите кто чем может, я практически спился пока это ковырял, раньше ивент вообще вызывался через команду gs, но по факту, мне удобнее и проще с отдельными локациями работать, или я не прав? Заранее спасибо
Piksha,
Это происходит потому, что код на локации 2 не выполняется полностью, соответственно, после его выполнения не запускается выполнение кода на локации onnewloc. То есть при переходе на локацию 2 у тебя не выполняется код на локации onnewloc. Тебе нужно либо goto делать уже из onnewloc, либо goto завернуть в действие на локации 2. Я бы выбрал последнее:
СлучайнаяВстреча=rand(1,2)
If СлучайнаяВстреча=1:
act "Внезапно!..":
gt "СлучайноеСобытиеКоридор"
end
end
Спасибо за ответ. Механизм уяснил, как это сделать с локации onnewloc не уяснил, но вы мне подали идею для гениального решения):
Во первых - перенес бросок кости на ивент, в действие перехода, а не на саму локацию - логически это будет вернее:
act "В локацию 2":
время = время + 2
СлучайнаяВстреча=rand(1,2)
If СлучайнаяВстреча=1:
ВозвратИвентКоридор=2
gt "СлучайноеСобытиеКоридор"
else
gt "Локация 2"
end
end
Основное тут - то что в переменную ВозвратИвентКоридор, записывается откуда был совершен коридор, что в дальнейшем реализуется в механизме возврата из локации ивента на следующую локацию (Что бы было понятнее, Локация 1 -> Коридор(Ивент) -> Локация 2 на которую происходит продолжение пути). Реализовано таким образом:
If ВозвратИвентКоридор=2:
act "Продолжить путь":
ВозвратИвентКоридор=0
gt "Локация 2"
end
end
И значение ВозвратИвентКоридор - сбрасывается до нуля.
По сути, единственным минусом этого способа является загромождение кода ивента лишними копиями переходов в зависимости от условий. К примеру если используется ивент в коридоре,а у вас 4 локации, то нужно 4 отдельных условий продолжения пути на локацию. Но более рационального способа решить это я не нашел.
Возник другой вопрос - ивент, на то и ивент что не должен часто встречаться. Необходимо встроить таймер на срабатывание рандомизации.
К примеру, При срабатывании ивента Используется переменная ИвентСработал=1
А в условие каждого ролла ивента, встраивается следующее:
act "В главный зал":
время = время + 2
If ИвентСработал=1:
wait 30000
ИвентСработал=0
Else
СлучайнаяВстреча=rand(1,2)
If СлучайнаяВстреча=1:
ВозвратИвентКоридор=2
gt "СлучайноеСобытиеКоридор"
else
gt "Локация 2"
end
end
end
Но это все больше увеличивает количество буковок, которые меня начинают все больше пугать. Есть ли более экономный способ встроить таймер на срабатывание рандомизации ивента? Заранее спасибо
Подскажите, что можно вписать из команд в данную строку кроме “GOTO”?
*pl'<a href="EXEC:gt''start''"><img border="0" src="media/button_start.png"></a>'
Подскажите, что можно вписать из команд в данную строку кроме “GOTO”?
Да в принципе, всё что душе угодно. Если текстовая ссылка - можно добавить class=‘plain’:
<a href="exec: ab = a + 1 & goto $curloc" class="plain"><<$NomesTexTus[ab]>></a>
Тогда не будет подчёркиваний текста ссылки. С картинками ситуация иначе. Там основными параметрами выступает ширина (width) и высота (height).
Всё зависит от цели, стилистики, желаний. И не зная ваших целей, невозможно дать “универсальный” ответ.
Лично я бы рекомендовал ориентироваться по справке (там есть список всех поддерживаемых тегов HTML), и уже экспериментируя с этим пользоваться более удобным вариантом. Ведь каждая игра индивидуальна.
Дамир Белялов:
Подскажите, что можно вписать из команд в данную строку кроме “GOTO”?
*pl'<a href="EXEC:gt''start''"><img border="0" src="/media/button_start.png"></a>'
Все что угодно.
$act_code={
!тут любой код, вообще любой.
}
"<a href='exec:dynamic $act_code'>Выполнить</a>"
Piksha:
Но это все больше увеличивает количество буковок, которые меня начинают все больше пугать. Есть ли более экономный способ встроить таймер на срабатывание рандомизации ивента? Заранее спасибо
При wait 30000 у тебя игра зависнет на 30 секунд.
Первый вариант - количество посещений локации
act "В главный зал":
время = время + 2
If ИвентСработал=1:
счетчик+=1
if счетчик=5:
счетчик=0
ИвентСработал=0
end
Else
Второй вариант - от игрового времени
act "В главный зал":
счетчик=время
время = время + 2
If ИвентСработал=1:
if время-счетчик>20:
счетчик=0
ИвентСработал=0
end
Else
Доброго времени господа, у меня появился вопрос, который я хотел бы задать и вам. Возможно ли как-то, может и через костыли сделать, более менее рабочую, приближенную к реальности змейку? Потребовался похожий концепт для реализации мини-игры, так скажем, в своем проекте, попытался сделать что-то сам, но дальше вот этого не пошло;
Spoiler
И да, если кто будет смотреть код, он немного не структурирован.
snakev1.rar
Может, кто-то тоже пытался сделать что-то похожее?
n3m0,
https://qsp.org/forum/comments/24320
Никакие костыли не нужны, можно сделать полноценную змейку.
Тебе нужно сделать массив с последней позицией “головы”, сколько очков, столько позиций и будешь сохранять и выводить. И добавить гамовер, когда позиция головы уходит за пределы поля или будет совпадать со значением хвоста.
Еще нужно запоминать направление движения и включать запрет реверса.
