Как сделать?
…
Bup0H, ловите и разбирайтесь в логике :)
Nimage = 1
if rand (0,-1) and D = 1:
if A >= 500 and A < 800:
Nimage = 2
elseif A >= 800:
if rand (1,10) <= 3:
Nimage = 2
else
Nimage = 3
end
end
end
'<center><img src="pic<<Nimage>>.jpg" ></center>'
А, по-хорошему, проверить правильность кода нет возможности, так как вы не указали что вы хотели получить. Желаемый конечный результат не известен. А строить догадки, что там за переменные A и D и каким образом они получаются мне лень.
Darvin432, пример ваш предполагает бой одного героя с одним противником. Точка. Пытаться его переделать под другое количество героев бессмысленно. Вы только усложните себе жизнь. Надо писать с нуля. Особенно, если вы хотите, чтобы состав героев менялся (другой напарник, не один, а больше напарников), то этот примитивный код вам не поможет.
evp Не могли бы вы тогда помочь в том с чего начать? Хотя бы 1 маленький пример
Примерную архитектуру хода игрока в бою я вижу так:[] локация бой определяет количество и состав напарников обращаясь для этого к соответствующей подпрограмме или переменным;
[] в цикле проходит по всем напарникам, определенным в предыдущем шаге, и формирует список действий для каждого из них путем обращения к подпрограммам, которые “знают” о специфичных для каждого напарника наборах действий;
[] выводит на экран эти возможные действия игрока и напарников одновременно все и передает управление игроку;
[] при выборе игроком одного из этих действий производит необходимые расчеты и вносит необходимые изменения в игровые переменные, убирая при этом это действие из списка возможных (или убирая все действия, если автор считает, что один ход - один персонаж);
[*] если действий у игрока не осталось, его ход считается оконченным.
Я намеренно использовал термин “подпрограмма”, так как вы можете использовать для этих целей другие локации, функцииили динамический код.
evp Спасибо. очень помогло. Ещё вопрос:Как задать максимальное значение? То есть что бы здоровье нельзя было вылечить выше максимума? команда здоровье MAX=100 (это всё до чего я додумался) не работает
MAXhealth = 100
!Процедура лечения
if health < MAXhealth: act "Лечить": health = iif (health + 20 < MAXhealth, health + 20, MAXhealth)
Как обновлять переменные не покидая и не перезаходя в локацию?
Вот есть ‘Уровень оружия <<lv_weapon>>’ нажали act ‘Подковать оружие <<price_weapon>>’: и lv_weapon += 1, но он не меняется до тех пор пока не покинешь локацию или хотя бы не перезайдешь в нее.
if $args[0] = '2':
cla
*clr
'<font color=#102c54><B>Кузница</B></font>'
'Вы в кузнице'
'Уровень оружия <<lv_weapon>>'
'Уровень брони <<lv_armor>>'
'Запасы золота <<gold>>'
act 'Подковать оружие <<price_weapon>>':
if gold => price_weapon:
gold -= price_weapon
lv_weapon += 1
else 'Нужно больше золота'
end
end
act 'Подковать броню <<price_armor>>':
if gold => price_armor:
gold -= price_armor
lv_armor += 1
else 'Нужно больше золота'
end
end
act 'Идти в центр города': gt 'Город'
end
end
end
Genryzz,
самое простое, это сделать перезаход в локацию в конце действия.
ACT 'Подковать оружие <<price_weapon>>':
IF gold => price_weapon:
gold -= price_weapon
lv_weapon += 1
GT $CURLOC
ELSE
'Нужно больше золота'
END
END
Можно и не перезаходить, тогда код локации придётся вынести в отдельную локацию и вызывать с помощью GS.
Nex:
Genryzz,
самое простое, это сделать перезаход в локацию в конце действия.ACT 'Подковать оружие <<price_weapon>>': IF gold => price_weapon: gold -= price_weapon lv_weapon += 1 GT $CURLOC ELSE 'Нужно больше золота' END ENDМожно и не перезаходить, тогда код локации придётся вынести в отдельную локацию и вызывать с помощью GS.
Тоесть динамического изменения параметров вообще нету? Это выливается в килотонны локаций. Можно подробнее про “Можно и не перезаходить, тогда код локации придётся вынести в отдельную локацию и вызывать с помощью GS.”?
Genryzz:
Можно подробнее про
пишешь отдельную локацию, где собирается описание, которое ты выводишь на экран. И вместо перехода на текущую локацию, ты делаешь обращение
GS 'локация_с_описанием'
Genryzz:
Тоесть динамического изменения параметров вообще нету?
Genryzz,
тебе нужно не динамическое изменение, а динамический вывод параметров на экран.
Genryzz:
после выполнения act ‘Подковать броню <<price_armor>>’: параметр price_armor изменяется
Где изменяется? Я что-то не увидел.
Решение.
$вывод = {
*clr
'<font color=#102c54><B>Кузница</B></font>'
'Вы в кузнице'
'Уровень оружия <<lv_weapon>>'
'Уровень брони <<lv_armor>>'
'Запасы золота <<gold>>'
}
if $args[0] = '2':
cla
dynamic $вывод
act 'Подковать оружие <<price_weapon>>':
if gold => price_weapon:
gold -= price_weapon
lv_weapon += 1
dynamic $вывод
else
'Нужно больше золота'
end
end
act 'Подковать броню <<price_armor>>':
if gold => price_armor:
gold -= price_armor
lv_armor += 1
dynamic $вывод
else
'Нужно больше золота'
end
end
act 'Идти в центр города': gt 'Город'
end
snail,
dynamic 'вывод'
переменную не нужно помещать в кавычки. И это должна быть текстовая переменная.
dynamic $вывод
ну и в первой строке.)
Да. Спасибо, Aleks Versus.
Либо я вас не понимаю либо вы меня не понимаете.
Проблема в том что если оставаться в локации то ни оператор
if переменная которая изменяется
ни оператор
act <<переменная которая изменяется>>
Не реагируют на изменения вплоть до перезахода в локацию.
Вот есть в локации
a = 0
act 'a +1':
a += 1
end
act '<<a>>'
a += a
end
При этом сколько раз мы не изменим пременную ‘a’ условие
if a mod 10 = 0 and a <> 0:
'a делится на 10 без остатка'
end
Не выполнится никогда, а “а” в act ‘<<a>>’ так и останется равным 0(при том что при изменении “а” он будет производить сложение с текущим “а”).
Вопрос почему?
P.S. Ваш dynamic работает ведь только со строками?
Это вы не понимаете, что при выборе действия исполняется только и исключительно тот код, который находится внутри этого действия. Таким образом, нажав 100500 раз на действие
act '<<a>>':
a += a
end
вы получите a = 2100500*a. В этом легко убедиться, добавлением всего одной строки в действие:
act '<<a>>':
a += a
*nl a
end
Проверка
if a mod 10 = 0 and a <> 0:
не будет выполняться, т.к. этот код лежит за пределами оператора act.
Если вы хотите, чтобы при каждом изменении переменной aпроизводилась проверка на кратность 10, измените код так, чтобы это было возможным. Пути решения вам уже подсказывали.