Как сделать?

Re: Как сделать?

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

Piksha
useravatar
Offline
8 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

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


Код:



$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>'

Дамир Белялов
useravatar
Offline
50 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

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

dmvikar
useravatar
Offline
126 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

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

Код:


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'

dmvikar
useravatar
Offline
126 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

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

Дамир Белялов
useravatar
Offline
50 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

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

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

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

HronoStranger
Странник
useravatar
Offline
39 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

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

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

Дамир Белялов
useravatar
Offline
50 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

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

 Спойлер Show Spoiler Hide 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'

Далее, стоит сменить логику отображения статуса.
Из:
 Спойлер Show Spoiler Hide 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>'

В:
 Спойлер Show Spoiler Hide 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

Так же, можно добавить в локацию-счетчик цикл. Тогда это будет так:
 Спойлер Show Spoiler Hide 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.

HronoStranger
Странник
useravatar
Offline
39 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

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

dmvikar
useravatar
Offline
126 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Как сделать?

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

Дамир Белялов
useravatar
Offline
50 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Информация

Статистика форума:
 
Всего тем:
1006
Всего опросов:
14
Всего сообщений:
16790890
Всего сообщений сегодня:
2
Пользователи форума:
 
Всего пользователей:
2585
Последним зарегистрировался:
McFly