RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2437637 views

Martin Doriel
по поводу значение j
на выходе получается  потому что строки в одинарных и двойных кавычках обрабатывают все выражения внутри <<>> сразу же, то есть у тебя сначала обрабатывается <<j>>, а потом уже вызывается DYNAMIC
специально для таких случаев были добавлены еще одни “кавычки” - фигурные скобки
вот так будет работать

DYNAMIC {
   j=5
   $txt="{<<j>>}"
   $txt
}

по поводу регулярки - такой готовой функции в куспе нет, но можно ее сделать на основе strfind
где-то так

#strfind_updated
!'
	$args[0] - string
	$args[1] - regexp
	args[2] - number
!'

args[2] += 1

_su_i = 0
$regexp = "(.*?)"
:loop
	$regexp += "(" + $args[1] + ")" + "(.*?)"
	_su_i += 1
if _su_i < args[2]: jump('loop')
$result = $strfind($args[0], $regexp, args[2] * 2)
-

соответственно

func("strfind_updated", "d h m k","\w",2)

возвращает “m”

Отличные примеры и понятна причина, по которой код не желал подчиняться. Спасибо за разбор полета.
Тогда, уровень сложности +1.

Spoiler
$text="абракадабра"
ACT "действие": DYNAMIC $program,"$text"

! Задача: Расставить скобки в любом из примеров так, чтобы на выходе получилось:
! {5}абракадабра
! При условии: DYNAMIC должен быть многострочным. (т.е. включать в себя строку j=5)

!$program={
DYNAMIC'
	j=5
	$txt="{<<j>>}"+"<<$ARGS>>"
	$txt'
}
!На выходе: {0}$text

!$program={
DYNAMIC '
	j=5
	$txt="{<<j>>}"+<<$ARGS>>
	$txt'
}
!На выходе: {0}абракадабра

!$program={
DYNAMIC{
	j=5
	$txt="{<<j>>}"+"<<$ARGS>>"
	$txt}
}
!На выходе: {5}

!$program={
	j=5
	$txt="{<<j>>}"+"<<$ARGS>>"
	$txt
}
!На выходе: {5}$text

!$program={
	j=5
	DYNAMIC '$txt="{<<j>>}"+<<$ARGS>>'
	$txt
}
!На выходе: {5}абракадабра
!Работает, но не совпадает по условию.

Какой при таком условии возможен выход?

расстановкой скобок проблемы не решить, нужно немного изменить код
самый простой вариант

$program={
    j=5
    $txt="{<<j>>}"+dyneval("$result = " + $ARGS)
    $txt
}

можно еще вот так

$program={
    j=5
    copyarr "$_tmp",$ARGS
    $txt="{<<j>>}"+$_tmp
    $txt
}

werewolf,
Спасибо большущее))
Они отлично справляются с задачей)

Nex,

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

Простейший пример: Рандомно на карте создаются два города с заданным между ними расстоянием. Из города А квест ведет в город Б. С полностью созданной картой НПЦ, выдавший квест, укажет направление в котором находится город Б. А вот с генерируемой попутно картой, таких указаний дать нельзя. Получится что город находится в известном радиусе, но не известно в каком направлении. Более того, добавятся дополнительные проверки на каждый ход: вышел ли за пределы радиуса? Стоит ли создавать город здесь? и подобные сопутствующие.

Сложность кода в случае с генерацией локации при посещении, сильно возрастает. Для иной игры такой подход мог бы быть и выигрышным, создавая неожиданные ситуации. Для подобий Diablo в самый раз, потому как не важно в какой стороне света находится тот или иной объект, бегай и руби)) Потому для моей игры требуется одномоментное создание мира, а мир надо где-то хранить)

Я вот подумываю уже создать модуль для микроархивации данных, специально для генерируемых локаций. Это и вес сэйва уменьшит, и в оперативке только “архивы” хранятся, занимая меньше места чем в развернутом виде. “Архив” раскрыл, воспользовался данными, записал изменения в “архив”, зачистил память от развернутой информации.

Может, есть у кого предложения по уменьшению размеров игры? Расскажите принцип, а я реализовать попробую.

Сюжет-то в игре вообще есть?

Он был в первую очередь. Зрел в течение года. (Все зафиксировано, не в голове.). Код готовлю под нужды сюжета и игровые особенности.

Martin Doriel,
в таком случае предложение остается в силе. Следует разбить сюжет на части(этапы), локации для каждой из частей генерить отдельно.

Здравствуйте, можете подсказать как изменить ширину и высоту плеера? По стандарту там 800 на 600, но мне больше надо

TimKah,
если речь идет об AeroQSP, то размер экрана настраивается в файле config.xml, который должен быть а архиве игры.

Nex,
Благодарю, получилось

Это еще раз я, здравствуйте. Можно ли как-нибудь сделать, чтобы при действии (act) объект в панели Objects обновлялся?
То бишь объект, например, называется ‘<<day>> день’, но когда я делаю day+=1, то там так же и остается предыдущее число (было 1 - осталось 1, хотя day уже равен 2)

DELOBJ '<<day>> день'
day += 1
ADDOBJ '<<day>> день'

Nex,
Я так делал, но у меня почему-то не удаляется первый объект и добавляется второй

А нет, вру, я day += 1 писал до удаления, переставил - получилось.
Другой вопрос, можно ли именно обновлять, просто хотелось, чтобы этот объект всегда в начале списка оставался, а так он в конец идет

Log in or Register to post comments.