Как сделать?

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

greymatter,
Собственно да, всё просто.

Инициализируешь имена:

Код:


$__name[] = 'Антон'
$__name[] = 'Денис'
$__name[] = 'Игорь'
$__name[] = 'Владислав'
$__name[] = 'Андрей'
$__name[] = 'Алексей'
$__name[] = 'Пётр'

Генерируешь NPC:

Код:


amount_npc = args[0]

index = 0
:init_array
    $npc_Name[index] = $__name[rand(0, arrsize("$__name")-1)]
    npc_Age[index] = rand(18, 36)
   
    index += 1
if (index < amount_NPC): jump 'init_array'

Выводишь их, дабы проверить корректность алгоритма:

Код:


index = 0
:render_npc_list
    *PL '<<$npc_Name[index]>> | <<npc_Age[index]>>'
   
    index += 1
if (index < arrsize('$npc_Name')): jump 'render_npc_list'

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

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

Oliver,

Код:

*PL '<<$npc_Name[index]>> | <<npc_Age[index]>>'

Тут как-то странно выходит, по сути же обновляется одна строка, как тут список получить? А если индекс в выводе менять, то кроме [0] ничего не выводится. Только что проверил

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

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

greymatter,
Пожалуйста. Так же, чутка подредактировал алгоритм - теперь не будет повторяющихся имён, как и пустых ячеек массива.
npc_gen.qsp

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

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

Oliver,
Тут рандом не запоминается smile Нужно чтоб при определенных условиях сгенеренный оставался таким каким его сгенерил компьютерный бог. Но при этом генерились новые персы, которые, если к ним обратиться, добавятся во френд-лист. Соответственно не поменяются во френд-листе. Вова не станет Катей и так далее потому что переменная $npc_name поменяла свое значение. Вчера наковырял худо бедно работающее запоминание на основе кода dmvikar, попробую и сюда прикрутить

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

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

greymatter,
Эм, каким образом "не запоминается"?
Достаточно обратится к элементу массива $npc_Name и будет вам имя сгенерированного NPC. А что с ними можно делать, уже решает геймдизайнер.

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

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

Малость мусорный код у меня был, почистил ну и опять же, исправил алгоритм от своей забывчивости.
Добавил комментарии, чтобы новичкам было проще понять.
npc_gen_v2.qsp

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

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

Oliver,
Упс, действительно. Это же массив, лол

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

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

Oliver,
Очень сложно и много лишних действий. Зачем удалять использованные имена? Откуда берутся пустые ячейки в массиве? Этот код будет работать только один раз, т.к. индекс обнуляется, т.е. генерацию можно осуществить единственный раз в игре, повторение этого кода перезапишет всех НПС.
Люди же не все с разными именами ходят), к тому же, у автора есть еще генерация фамилий и чем больше массивы имен и фамилий, тем большее разнообразие.

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

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

dmvikar,
1) Сложно? Возможно. Но я добавил комментарии, алгоритм должен стать более понятным.
2) Во-первых, мы их удаляем - чтобы они не повторялись. Это не обязательно, если можно повторять имена. Во-вторых, если мы эти имена юзать более не будем, то они нам незачем в памяти. Ежели в процессе игры необходимо ещё генерировать НПС, тогда да, можно оставить. Хотя я бы всё равно удалял, а при необходимости, просто заново закидывал в память.
Может это и экономия на спичках, но как для программиста - это важные знания. И я посчитал нужным оставить это в разуме новичков.
3) Пустые появляются из-за того, что заканчиваются имена (ибо мы их удалили), но параметром мы передали больше НПС (в данном случае 10). Вот из-за отсутствия имён, остальная часть массива пустая. Вот как раз в таком случае стоило бы вообще выйти из цикла, а не удалять потом. Но, все мы хороши задним умом)
4) Ну, я не ставил целью сделать повторно используемый генератор. Цель была в том, чтобы показать как решить эту задачу. Одним из способов. Дать человеку возможность в будущем расширить генератор, приобретя новый опыт.

Для меня задача была проста - сделать генератор НПС. Я показал одни из вариантов, которым мог бы воспользоваться сам. Но не считаю его идеальным, так как посидев над кодом несколько дней, наверняка можно придумать что получше.

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

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

For debugging purposes, I would like to print a string indexed array. I can't find any documentation on how to find the string index of the array.
В целях отладки я хотел бы напечатать индексированный массив строк. Я не могу найти документацию о том, как найти индекс строки массива.

Код:


NPC_Age['Bob']=18
NPC_Age['Jack']=15
NPC_Age['Linda']=25

i=0
:ArrayPrintLoop
if i < arrsize('NPC_Age'):
    !Print data from first element
    *pl "NPC_Age[<<??StringIndex[i]??>>]=<<NPC_Age[i]>>"
    i += 1
    jump 'ArrayPrintLoop'
end

Expected output/Ожидаемый результат:

Код:

NPC_Age['Bob']=18

NPC_Age['Jack']=15
NPC_Age['Linda']=25

Is there a way for me to do the <<??StringIndex[i]??>> part?
Есть ли способ для меня, чтобы выполнить часть << ?? StringIndex [i] ?? >>?

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

Информация

Статистика форума:
 
Всего тем:
977
Всего опросов:
14
Всего сообщений:
16790646
Всего сообщений сегодня:
6
Пользователи форума:
 
Всего пользователей:
2390
Последним зарегистрировался:
KeyMasterOfGozer