RU 📌 Pinned

Как сделать?

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

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

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

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

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

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

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

KeyMasterOfGozer #2388 14.01.2020 15:04 (6 years ago)

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,
You can try to create a second array with names of your NPCs.

$NPC_Name[0] = 'Bob'
$NPC_Name[1] = 'Jack'
$NPC_Name[2] = 'Linda'

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[<<$NPC_Name[i]>>]=<<NPC_Age[$NPC_Name[i]]>>"
    i += 1
    jump 'ArrayPrintLoop'
end

I think it’s better to use numbers instead of strings as indexes for arrays.

Sorry for my bad English :D

KeyMasterOfGozer #2388 14.01.2020 17:47 (6 years ago)

NickoAilus:

KeyMasterOfGozer,
You can try to create a second array with names of your NPCs.

$NPC_Name[0] = 'Bob'
$NPC_Name[1] = 'Jack'
$NPC_Name[2] = 'Linda'

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[<<$NPC_Name[i]>>]=<<NPC_Age[$NPC_Name[i]]>>"
    i += 1
    jump 'ArrayPrintLoop'
end

I think it’s better to use numbers instead of strings as indexes for arrays.

Sorry for my bad English :D

Your English is good! Thank you for your help.

My need is to create a more generic procedure to print an arbitrary array fr debug purposes. Surely the internal platform must be able to know the string index in order to function. Most languages have a way to loop through and know both the key and the value. I am wondering if there is some method (maybe hidden) to find the list of items in a string indexed array.

Aleks Versus Moderator 14.01.2020 18:01 (6 years ago)

KeyMasterOfGozer,
if you need… hm… sort throught in order, you can use number indexes. Number indexes crossed with text indexes.
check:

NPC_Age['Bob'] = 18
NPC_Age['Jack'] = 15
NPC_Age['Linda'] = 25
NPC_Age[0]
NPC_Age[1]
NPC_Age[2]

You can’t resieved text indexes from it.

Sorry MY Bad English. See http://qsp.su/index.php?option=com_agora&task=search&action=search_results&keywords=строковые+индексы&author=&forum=-1&sort_by=5&sort_dir=DESC&show_as=posts&submit=Поиск
Google-Translate in your help.

Здравствуйте. Я пробую писать в QSP/ И столкнулся с проблемой.
Задача: у персонажа есть некоторая статистика. Я написал параметры этой статистики на отдельной локации в виде массива.
Потом я на проверке вывел эту статистику в формате “У вас <<денег>> золотых. Вы <<$денег>>”
моя проблема: текстовая переменная, которая написана на отдельной локации не отображается в тексте($денег).
НО: если писать характеристику персонажа в одной локации, то все норм.
Я не понимаю, в чем проблема.
Я переписывал переменную $денег c условиями. if денег<0 then $денег=‘ нищий’ else $денег=‘ богатый’
Некоторые пишут команду set ЗАЧЕМ?
Спасибо за ответ

Poganec37, порядок соблюден? Сначала определяешь переменную денег, потом код:

if денег<0:
$денег='нищий'
else
$денег='богатый'
end

потом текст. Скорее всего у тебя текст идёт раньше кода, и переменная $денег пустая.
У тебя возможна ситуация, когда деньги уходят в минус?
set - я так понимаю, использовалась для присвоения значения переменной в ранних версиях qsp, теперь использовать не обязательно.

Я хотел сделать бродилку. И мне нужен был журнал квестов, или что-то похожее. Я написал статистику персонажа на отдельной локации. Там по определённым условиям меняются числа и текст. На локации журнала не отображались ячейки с текстом: их надо было в этой же локации писать. Я обращение сделал через gosub.
Я хотел уточнить: вот в некоторых играх можно переносить сохранения из одной части игры в другую. Как это делается: нельзя же просто сделать 2 части игры, а потом сохранения из одной части переносить в другие?

Последний из Гаяр Moderator 18.01.2020 16:50 (6 years ago)

Я не очень понимаю, что ты хочешь сделать, но попробуй глянуть Komm, susser Tod.
И главное: не отчаивайся! ;) Вопросы решаемы, важно только спросить. А лучше конечно прикреплять файл или участок кода, который не работает, так всем будет проще.
Удачи в написании игр)

Poganec37:

вот в некоторых играх можно переносить сохранения из одной части игры в другую

В каких конкретно?

Я полагаю, что алгоритм следующий, из игры А берутся некоторые ключевые значения переменных и объявляются в игре Б на стартовой локации. А как это реализуется программно - я не знаю.

По урокам очень быстро можно научиться. Я разобрался с системой сохранения переменных и переход между локациями. Goto это переход конкретно с места на место. Если мы хотим переносить какие-либо параметры, которые изменяются, то мы пишем их на отдельной локации и обращаемся к ним в нужном месте через gosub. Это был мой косяк, который я не учел.
О переносе сохранений: да, я тоже думал о переносе параметров. Единственное: я не нашел в документации, как создаются письменные файлы, как блокнот или что-то похожее.
В целом, можно было бы просто создать в конце игры блокнот с параметрами персонажа и эти данные переносить в другие части игры. Как в Масс Эффект.

Log in or Register to post comments.