Как сделать?
…
Еще с неймингом подтвердились мои опасения, сначала мы получаем из массива рандомное значение и добавляем в инвентарь арт с названием A, далее в коде мы задаем переменной artifact_notification значение, которое опять выбирает рандомный индекс из массива, таким образом в инвентарь у нас идет имя А, а в уведомлении получаем имя Б(любое другое из массива), могу ли я как-то привязать нейминг к только что полученному объекту?
art_obtain = rand(1, 100)
if art_obtain <100:
arti_pool = rand(1, 101)
if arti_pool <= 75:
! Мусорные артефакты
$мусорные_артефакты[] = "Игла"
$мусорные_артефакты[] = "Жмых"
$мусорные_артефакты[] = "Хурма"
$мусорные_артефакты[] = "Болванка"
$мусорные_артефакты[] = "Черняжка"
$мусорные_артефакты[] = "Пластилин"
$мусорные_артефакты[] = "Спайка"
$мусорные_артефакты[] = "Головастик"
$мусорные_артефакты[] = "Перстень"
$мусорные_артефакты[] = "Очко"
$мусорные_артефакты[] = "Вилка"
$мусорные_артефакты[] = "Песчанник"
$мусорные_артефакты[] = "Клетка"
$мусорные_артефакты[] = "Пискун"
arti_number = rand(0,13)
$chosen_artifact = $мусорные_артефакты[arti_number]
p "Вы нашли мусорный артефакт: <<$chosen_artifact>>!"
pl
! Добавляем артефакт в инвентарь игрока
AddObj $chosen_artifact
elseif arti_pool <= 91:
! Обычные артефакты
$обычные_артефакты[] = "Бенгальский огонь"
$обычные_артефакты[] = "Кровь камня"
$обычные_артефакты[] = "Слизь"
$обычные_артефакты[] = "Медуза"
$обычные_артефакты[] = "Выверт"
$обычные_артефакты[] = "Колючка"
$обычные_артефакты[] = "Капли"
$обычные_артефакты[] = "Кристалл"
$обычные_артефакты[] = "Батарейка"
$обычные_артефакты[] = "Мамины бусы"
arti_number = rand(0,9)
$chosen_artifact = $обычные_артефакты[arti_number]
p "Вы нашли обычный артефакт: <<$chosen_artifact>>!"
pl
! Добавляем артефакт в инвентарь игрока
AddObj $chosen_artifact
elseif arti_pool <= 99:
! Необычные артефакты
$необычные_артефакты[] = "Вспышка"
$необычные_артефакты[] = "Ломоть мяса"
$необычные_артефакты[] = "Слизняк"
$необычные_артефакты[] = "Каменный цветок"
$необычные_артефакты[] = "Грави"
$необычные_артефакты[] = "Кристальная колючка"
$необычные_артефакты[] = "Огненный шар"
$необычные_артефакты[] = "Душа"
$необычные_артефакты[] = "Ночная звезда"
$необычные_артефакты[] = "Лунный свет"
$необычные_артефакты[] = "Колобок"
$необычные_артефакты[] = "Глаз"
$необычные_артефакты[] = "Пузырь"
arti_number = rand(0,12)
$chosen_artifact = $необычные_артефакты[arti_number]
p "Вы нашли необычный артефакт: <<$chosen_artifact>>!"
pl
! Добавляем артефакт в инвентарь игрока
AddObj $chosen_artifact
else
! Редкие артефакты
$редкие_артефакты[] = "Слюда"
$редкие_артефакты[] = "Морской ёж"
$редкие_артефакты[] = "Пленка"
$редкие_артефакты[] = "Снежинка"
$редкие_артефакты[] = "Светляк"
$редкие_артефакты[] = "Пламя"
$редкие_артефакты[] = "Золотая рыбка"
arti_number = rand(0,6)
$chosen_artifact = $редкие_артефакты[arti_number]
p "Вы нашли редкий артефакт: <<$chosen_artifact>>!"
pl
! Добавляем артефакт в инвентарь игрока
AddObj $chosen_artifact
end
else
! Выводим сообщение, если ничего не найдено
p "Вы ничего не нашли"
pl
end
В принципе вроде смотрится норм, менее 100 строк с учетом массивов, дешево и сердито, сюда еще добавится код с аномалиями и уроном, в теории можно эти расчеты перести куда-то в другое место, ссылаясь на служебные локации или еще чего.. Я вот думаю, мб мне эту тему всю перенести в другой раздел форума, потому что похоже немного на флуд
я ваще балдею от этого вашего ксп:
dmvikar:
Код:
AddObj $мусорные_артефакты[rand(0,arrsize(’$мусорные_артефакты’)-1)]А я правильно понимаю эту строчку?
Мы добавляем предмет из массива мусорные артефакты с индексом [случайное между: нулем, длиной массива(arrsize же именно ее определяет, верно?)] а минус один здесь для чего? Мы не можем сделать rand(arrsize(’$мусорные артефакты’)?
Массив из двух элементов содержит индекс 0 и 1, а размер массива - 2.
я ваще балдею от этого вашего ксп:
Еще с неймингом подтвердились мои опасения, сначала мы получаем из массива рандомное значение и добавляем в инвентарь арт с названием A, далее в коде мы задаем переменной artifact_notification значение, которое опять выбирает рандомный индекс из массива, таким образом в инвентарь у нас идет имя А, а в уведомлении получаем имя Б(любое другое из массива), могу ли я как-то привязать нейминг к только что полученному объекту?
Так ты должен использовать рандом один раз, сохранить значение в переменную, не важно, как она будет называться, $a или $chosen_artifact, а потом используешь эту переменную для любых целей. Переменная не нужна, если ты используешь полученное значение только один раз.
я ваще балдею от этого вашего ксп:
В принципе вроде смотрится норм, менее 100 строк с учетом массивов, дешево и сердито, сюда еще добавится код с аномалиями и уроном, в теории можно эти расчеты перести куда-то в другое место, ссылаясь на служебные локации или еще чего.. Я вот думаю, мб мне эту тему всю перенести в другой раздел форума, потому что похоже немного на флуд
Переносить или нет, сам решай. Я подписан только на эту тему и вижу посты только с нее и отвечать буду соответственно. Лучше используй дискорд.
То что я тебе говорил про запись без индекса, оно хорошо, но требует определенных правил. В твоем коде оно будет работать, но массив разрастется до немеряных размеров, т.к. каждый раз при выполнениии этого кода все строки будут добавляться снова. Чтобы такого не случалось нужно либо использовать для массива killvar в коце локации, либи инициализироваь массив один раз и больше в ту локацию не заходить.
dmvikar:
То что я тебе говорил про запись без индекса, оно хорошо, но требует определенных правил.
Вот тут тогда проблема, ибо я пока еще не понимаю как выстраивать лаконичную структуру проекта с оптимизацией итд, поэтому весь этот код написан для 1 действия, которое игрок может выполнять раз за разом.. думаю что мне стоит вернуться к записи с индексами, чтобы через пару часов игры все не начинало тормозить итд
Так-с, ну я даже смог написать ужасно кривую и неудобную систему продажи артефактов + добавил пока тестовую возможность углубляться в Зону, повышая zone_level от которого на данный момент зависит вероятность найти более дорогие артефакты ну и шанс найти артефакты в принципе, магазин сделал через индексированный массив с ценами и целой кучей повторяющегося кода.. 100% можно было сделать раз в 10 короче, но я пока не понимаю как…
if obj 'Игла':
money = money + игла_продажа
delobj 'Игла'
goto $curloc
elseif obj 'Жмых':
money = money + жмых_продажа
delobj 'Жмых'
goto $curloc
Вот кусок кода, ответственного за продажу, ищет конкретный предмет в инвентаре, добавляет N-денег(переменная_продажа равняется цене из массива), и далее проверяет уже следующий предмет.
Из минусов:
Предметы продаются не кучей, чтобы продать 20 предметов - кликаем 20 раз
Только щас понял, что мне не нужна переменная_продажа, я же вроде мог просто прибавлять к money ячейку массива..
я ваще балдею от этого вашего ксп:
Так-с, ну я даже смог написать ужасно кривую и неудобную систему продажи артефактов + добавил пока тестовую возможность углубляться в Зону, повышая zone_level от которого на данный момент зависит вероятность найти более дорогие артефакты ну и шанс найти артефакты в принципе, магазин сделал через индексированный массив с ценами и целой кучей повторяющегося кода.. 100% можно было сделать раз в 10 короче, но я пока не понимаю как…
if obj 'Игла': money = money + игла_продажа delobj 'Игла' goto $curloc elseif obj 'Жмых': money = money + жмых_продажа delobj 'Жмых' goto $curlocВот кусок кода, ответственного за продажу, ищет конкретный предмет в инвентаре, добавляет N-денег(переменная_продажа равняется цене из массива), и далее проверяет уже следующий предмет.
Из минусов:
Предметы продаются не кучей, чтобы продать 20 предметов - кликаем 20 раз
Только щас понял, что мне не нужна переменная_продажа, я же вроде мог просто прибавлять к money ячейку массива..
Это код в магазине автоматом ищет предмет и продает? Тогда убери elseif и просто сделай новую строку с if. За один раз все продастся, правда я не знаю, что будет, если у тебя два одинаковых предмета в инвентаре. Я вообще не люблю объекты и не работаю с ними. И goto $curloc только один в конце.
Конечно, можно все сделать проще через циклы и массивы, но что-то мои советы тока все усложняют).
dmvikar:
Тогда убери elseif и просто сделай новую строку с if.
О, получилось, спасибо)
Если предметов несколько - нужно просто тапнуть еще раз и они уйдут на продажу, ну хотя бы 50 предметов продаются за 5-6 кликов, а не за 50, уже прогресс
Я почитал, что могу сделать саблоку при загрузке игры, то есть в теории я могу засунуть туда все массивы + какие-то еще переменные, которые нужны мне только 1 раз в исходном значении и больше не нагружать этим код в активных игровых моментах?
я ваще балдею от этого вашего ксп:
Я почитал, что могу сделать саблоку при загрузке игры, то есть в теории я могу засунуть туда все массивы + какие-то еще переменные, которые нужны мне только 1 раз в исходном значении и больше не нагружать этим код в активных игровых моментах?
Твоя формулировка имеет разночтения, но примерно так.
dmvikar:
но примерно так.
Улучшит ли показатель оптимизации то, что я сделал:
Игра начинается с локации Меню - она доступна один раз.
На локации Меню я через func вызываю ряд служебных локаций и получаю из них переменные и массивы
Далее начинаю игру и вроде бы весь код работает без целой кучи массивов и лишних переменных, я просто прописываю доп. механики ссылаясь на переменные и данные, которые вызывал служебными локами на старте
Норм?
я ваще балдею от этого вашего ксп,
Делай так. чтоб тебе было удобно с этим работать. Конкретно в производительности начинаются проблемы при работе с циклами от 10к, циклами внутри циклов и т.д. Все остальное не особо влияет, т.е. перечитать локацию в 1к строк - не проблема.
dmvikar:
с циклами от 10к
Я даже не представляю что люди пытаются сделать с такими объемами данных..
Хотя я тут думал чисто в плане концепции динамическую генерацию NPC и их взаимодействие с миром, чтобы ресурсные кластеры имели определенную емкость и неписи имели шансы что-то оттуда утащить, пока игрок занимается чем-угодно
Для каждого нпс рассчитывался бы его суммарный опыт + уровень обеспеченности, что в последствии позволяло бы им забирать все больше и больше ресурсов из под носа игрока, вынуждая его увеличивать сложность забегов для сохранения выгоды- вот наверное такие сложные системы и забирают всю производительность при недостатке оптимизации…
я ваще балдею от этого вашего ксп,
Поддержу dmvikar’а. Пиши как тебе удобнее, понятнее, прозрачнее. Структурирование, лучшие практики, это всё наживное. Главное созидай, многие утопают в попытках достичь идеала в коде, забывая о главное цели - решить очередную задачу на пути создания своего творения.
Но это всё уже лирика)
