RU 📌 Pinned

Как сделать?

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

Piksha:

Благодарю. Еще вопрос -
Для создания времени, использовал код из гайда

Но нигде не нашел обьяснения, каким образом применить время не на одной локации, а что бы оно работало на всём протяжении игры, и менялось в зависимости от действий. Логика подсказывает прописать данный код в отдельной служебной локации, и при каждом изменении времени (к примеру переходе между локациями) обращаться к служебке…

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

Лично я бы посоветовал набросать сам “алгоритм” на бумаге и осмыслить “что” делать и “как” реализовать.
Написание игр состоит из оперирования переменными и их значением. Шаблонизировать очень полезно для средних и больших проектов. Однако если на данном этапе у тебя трудности - напиши что-то маленькое. По-экспериментируй, закрепи знания. Это и правда полезно и на практике много вопросов решаться сами собой. Открой справку, подумай для чего это использовать, пробегись по функциям, операторам - это даст понимание того, что делаешь и что за что отвечает.

И главное - не бойся ошибаться.
HronoS.

HronoStranger,
Этот код предназначен для подсчета времени из переменной ‘время’, т.е. ты руками прописываешь время+=10, обращаешься к вышеуказанному коду, и он тебе выводит дни, часы, минуты. Правильность я не проверял.

Большое спасибо за ответы! Разобрался.

Дамир Белялов #654 10.08.2021 07:13 (4 years ago)

Привет, уважаемые знатоки! Мне при написании квеста очень сильно надоело прописывать массив каждого “модуля” и условия для каждого “модуля” (я пишу что-то вроде симулятора капсулы жизнеобеспечения)
Помогите пожалуйста, кто знает как задать сразу переменные и условия для одного и того же массива? Чтобы не писать вот этот вагон кода:

$module[0]='Кислородный модуль'
$mod_disc[0]='(Описание модуля)'
modulemhp[0]=6
mod_capacity[0]=200
modulecost[0]=1000

$module[1]='Капсульный щит'
$mod_disc[1]=''
modulemhp[1]=2
mod_capacity[1]=250
modulecost[1]=5000

$module[2]='Генератор'
$mod_disc[2]=''
modulemhp[2]=4
mod_capacity[2]=1500
modulecost[2]=750

$module[3]='Радиостанция'
$mod_disc[3]=''
modulemhp[3]=2
mod_capacity[3]=250
modulecost[3]=2000

$module[4]='Климат-модуль'
$mod_disc[4]=''
modulemhp[4]=2
mod_capacity[4]=40
modulecost[4]=1600


$module[5]='Клешня'
$mod_disc[5]=''
modulemhp[5]=2
mod_capacity[5]=0
modulecost[5]=500

$module[6]='Электрошок'
$mod_disc[6]=''
modulemhp[6]=2
mod_capacity[6]=5
modulecost[6]=500

$module[6]='Транспортный Модуль'
$mod_disc[6]=''
modulemhp[6]=4
mod_capacity[6]=12
modulecost[6]=3000

! -------- локация счетчик -------

if modulehp[0]=modulemhp[0]: $modstat[0]='<font color=rgb(100,250,100)>Работает</font>'
if modulehp[0]<=modulemhp[0]/2: $modstat[0]='<font color=rgb(190,160,80)>Поврежден</font>'
if modulehp[0]=0: $modstat[0]='<font color=rgb(250,70,70)>Отсутствует</font>'

if modulehp[1]=modulemhp[1]: $modstat[1]='<font color=rgb(100,250,100)>Работает</font>'
if modulehp[1]<=modulemhp[1]/2: $modstat[1]='<font color=rgb(190,160,80)>Поврежден</font>'
if modulehp[1]=0: $modstat[1]='<font color=rgb(250,70,70)>Отсутствует</font>'

if modulehp[2]=modulemhp[2]: $modstat[2]='<font color=rgb(100,250,100)>Работает</font>'
if modulehp[2]<=modulemhp[2]/2: $modstat[2]='<font color=rgb(190,160,80)>Поврежден</font>'
if modulehp[2]=0: $modstat[2]='<font color=rgb(250,70,70)>Отсутствует</font>'

if modulehp[3]=modulemhp[3]: $modstat[3]='<font color=rgb(100,250,100)>Работает</font>'
if modulehp[3]<=modulemhp[3]/2: $modstat[3]='<font color=rgb(190,160,80)>Поврежден</font>'
if modulehp[3]=0: $modstat[3]='<font color=rgb(250,70,70)>Отсутствует</font>'

if modulehp[4]=modulemhp[4]: $modstat[4]='<font color=rgb(100,250,100)>Работает</font>'
if modulehp[4]<=modulemhp[4]/2: $modstat[4]='<font color=rgb(190,160,80)>Поврежден</font>'
if modulehp[4]=0: $modstat[4]='<font color=rgb(250,70,70)>Отсутствует</font>'

! и так далее............



! я хотел сделать так, но не сработало:  
if modulehp[]=modulemhp[]: $modstat[]='<font color=rgb(100,250,100)>Работает</font>'
if modulehp[]<=modulemhp[]/2: $modstat[]='<font color=rgb(190,160,80)>Поврежден</font>'
if modulehp[]=0: $modstat[]='<font color=rgb(250,70,70)>Отсутствует</font>'

Дембелёк,
Заполнить массив проще вряд ли получится. Если нет алгоритма, то лучше так, как есть. Оно удобнее, в том смысле, что ты наглядно представляешь все характеристики и можешь их балансировать.

Дамир Белялов,

a=0
a_max=arrsize'$module'
:mark
if modulehp[a]=modulemhp[a]: $modstat[a]='<font color=rgb(100,250,100)>Работает</font>'
if modulehp[a]<=modulemhp[a]/2: $modstat[a]='<font color=rgb(190,160,80)>Поврежден</font>'
if modulehp[a]=0: $modstat[a]='<font color=rgb(250,70,70)>Отсутствует</font>'
a+=1
if a<a_max:jump'mark'
Дамир Белялов #654 10.08.2021 08:31 (4 years ago)

Понятно, спасибо и на этом)

Дамир Белялов,
Приветствую, заранее желаю удачной симуляции.
Некоторое время назад я экспериментировал с самой банальной, поверхностной симуляцией космического корабля.

Так вот, можно шаблонизировать алгоритмы, но базы данных всегда приходится писать вручную. Вы можете задать статус “кво” на начале, с дальнейшей коррекцией при изменении. Однако изначальную точку только руками.

С уважением,
HronoS.

Дамир Белялов #654 11.08.2021 09:12 (4 years ago)

Нет у меня намного проще задумка, у меня всего до 10 модулей и они по отдельности влияют на состояние симуляции. Будут несколько факторов аварийной ситуации а так же множители переменных факторов по разному влияющие на каждый модуль а так же на субъекта.
То есть это не целая общая переменная HP и MHP (max_hp) а отдельные показатели как module_hp[], mod_capacity[] и подобные переменные и если damage_factor[] превысит mod_capacity[] то модуль станет разрушаться.

Я это все рассказываю наглядно для понимания, у меня попроще организация. Но мне к сожалению придется прописывать условия под каждый массив.

Прошу прощения за навязчивость, заинтересовало.
Модуль 7 стоял под таким же индексом, что и 6.

Spoiler
! Решил проверить ваш код. Вот без этого никуда:

x=0
: mark
modulehp[x]=modulemhp[x] &! производим назначение для mpdulehp из максимального.
If x<7: x+=1 & jump 'mark'

! Тут чисто для отображения

x=0

: marker
*nl $module[x]+':['+$modstat[x]+']'
If x<7: x+=1 & jump 'marker'

Далее, стоит сменить логику отображения статуса.
Из:

Spoiler
if modulehp[0]=modulemhp[0]: $modstat[0]='<font color=rgb(100,250,100)>Работает</font>'
if modulehp[0]<=modulemhp[0]/2: $modstat[0]='<font color=rgb(190,160,80)>Поврежден</font>'
if modulehp[0]=0: $modstat[0]='<font color=rgb(250,70,70)>Отсутствует</font>'

В:

Spoiler
! -------- локация счетчик -------
$modstat_norm = '<font color=rgb(100,250,100)>Работает</font>'
$modstat_cry = '<font color=rgb(190,160,80)>Поврежден</font>'
$modstat_destr = '<font color=rgb(250,70,70)>Отсутствует</font>'


if modulehp[0]=modulemhp[0]: $modstat[0]= $modstat_norm
if modulehp[0]<=modulemhp[0]/2: $modstat[0]= $modstat_cry
if modulehp[0]=0: $modstat[0]= $modstat_destr

Так же, можно добавить в локацию-счетчик цикл. Тогда это будет так:

Spoiler
! -------- локация счетчик -------
$modstat_norm = '<font color=rgb(100,250,100)>Работает</font>'
$modstat_cry = '<font color=rgb(190,160,80)>Поврежден</font>'
$modstat_destr = '<font color=rgb(250,70,70)>Отсутствует</font>'

x=0
:mark_cy
if modulehp[x]=modulemhp[x]: $modstat[x]= $modstat_norm
if modulehp[x]<=modulemhp[x]/2: $modstat[x]= $modstat_cry
	If modulehp[x]<0: modulehp[x]=0
if modulehp[x]=0: $modstat[x]= $modstat_destr

if x<7: x+=1 & jump 'mark_cy'

Надеюсь, смог помочь в сокращении кода.
Базы данных, увы, как и говорил - только руками.

С уважением,
HronoS.

Дамир Белялов,
Чтоб не путаться с индексами можно инициализировать массив без него - массив[]. Тогда ты сможешь перемещать код по строкам для более удобного расположения без необходимости перебивать индексы и вспоминать, какой там был последний. Однако, тут возникают другие неудобства и подвохи. Потому надо применять с должной осмотрительностью.

Дамир Белялов #654 11.08.2021 15:56 (4 years ago)

ОООО спасибо, вот оно походу то самое решение что я искал!
В остальном примеры кода увлекательные

Дамир Белялов,
А то что я выше давал не ок?

Дамир Белялов #654 11.08.2021 16:50 (4 years ago)

Вот я и говорю тебе за это спасибо

a=0
a_max=arrsize’$module’
:mark
if modulehp[a]=modulemhp[a]: $modstat[a]=‘<font color=rgb(100,250,100)>Работает</font>’
if modulehp[a]<=modulemhp[a]/2: $modstat[a]=‘<font color=rgb(190,160,80)>Поврежден</font>’
if modulehp[a]=0: $modstat[a]=‘<font color=rgb(250,70,70)>Отсутствует</font>’
a+=1
if a<a_max:jump’mark’

оно работает!

Уважаемые знатоки, вопрос - необходимо прописать двумя способами рандомные события на разных локациях, причем пул событий зависит от определенного значения переменной.
Способ 1, запускаемое рандомное событие, через ссылку в выводе текста.
Стандартное описание локации, содержащее ссылку <a href=‘exec:goto ““СлучайноеСобытие””’> Событие</a></b>””.
Тут я реализовал это с помощью перехода на отдельную локацию СлучайноеСобытие, в которой прописана рандомизация события в зависимости от переменной:

If Слава<=20: Ивент = rand (1,2)
If Слава<=40: Ивент = rand (1,4)
If Слава<=60: Ивент = rand (1,6)
If Слава<=80: Ивент = rand (1,8)
If Слава<=100: Ивент = rand (1,10)

А затем уже, в зависимости от значения переменной Ивент, будет происходить какое либо событие, с последующим возращением в исходную локацию. *Соответственно вопрос по этому способу - 1. Есть ли возможность сделать это как то компактнее? 2. Возможно ли прописать рандомизацию в зависимости от переменной, непосредственно в ссылке <a href=‘exec:goto ““СлучайноеСобытие””’> Событие</a></b>””?

[b]Способ 2,* Способ описанный выше подразумевает что случайное событие, происходит в локации со 100% вероятностью, а рандомится только тип события. (Для этого и сделано через ссылку, что бы не было замкнутого круга ивент-возвращение-ивент). В способе 2, необходимо сделать лишь ШАНС на возникновение какого либо события, БЕЗ ПЕРЕХОДА на другую локацию.
Реализовано это таким способом. В локации в которой происходит событие, через команду rand (1,2) (Или больше, в зависимости от необходимого шанса события), генерируется возможность возникновения события, с последующей проверкой значения переменной, и последующим рандомизированием выпавшего ивента. Код:

Ивент2 = rand (1,2)
If Ивент2=1:

!И вот тут затык. Каким образом тут прописать проверку на значение переменной, для последующей рандомизации? (Если не понятно о чем я, см способ 1).
Соответственно вопрос- каким образом можно проще или лучше, реализовать мою идею? Либо продолжить то, что начал я?
Заранее спасибо за ответы

Log in or Register to post comments.