RU

Прошу помочь с рандомом

McFly #2583 03.02.2023 13:26 1 comment 1591 views

Нашел на одном из местных ресурсов блок кода с модифицированной функцией рандома.Один из QSP-гуру написал и я решил использовать его в своей работе,сам я пока не очень в QSP,учусь в процессе,теперь собственно сама проблема…блок очень удобный,но выяснил в процессе использования,что дублирование локации приводит к неправильным результатам.Рандом диапазоном от 1 до 9.Понятно что в игре,есть необходимость различных диапазонов.


Код:
! в первую очередь генерируем массив, заполненный всеми нужными данными
! можно проставить вручную, но я использую цикл для чисел от 1 до 9
if arrsize(’arand’)=0:
! только если массив не создан, так как незачем создавать его сто раз
args[’i’]=1
:for
if args[’i’]<10:
arand[]=args[’i’]
args[’i’]+=1
jump ‘for’
end
end
! копируем этот массив во временный
copyarr “temprand”,”arand”
! теперь заполняем другой массив, случайным образом выдёргивая данные
! из уже сформированного массива (из temprand в newtemprand)
:for_rand
args[’size’]=arrsize(’temprand’)
if args[’size’]>0:
args[’rand’]=rand(0,args[’size’]-1)
newtemprand[]=temprand[args[’rand’]]
! удаляем выбранную ячейку массива
killvar ‘temprand’,args[’rand’]
jump ‘for_rand’
end
! теперь когда новый массив заполнен случайным образом данными из исходного массива
! выкидываем из него случайное значение
args[’result’]=newtemprand[rand(0,arrsize(’newtemprand’)-1)]
! удаляем временные массивы
killvar ‘temprand’
killvar ‘newtemprand’
! заставляем функцию вернуть значение
result=args[’result’]

Нужно записать этот код на отдельной локации, назвать её например rand-rand и получать случайное число уже так:

Код:

d=func(’rand-rand’)


Вот такой очень удобный код,но…..как только я дублирую локации, например эту называю “rand-rand9”,а уже следующую,которую я называю например “rand-rand99”,(которая соответственно генерит от 1 до 99) и вызываю строчкой уже допустим a=func(’rand-rand99’),то код не работает так как нужно,тоесть выдает результаты только от 1-9,теперь самое интересное.Если я меняю код местами,например

строка 1 а=func(’rand-rand99’)
строка 2 d=func(’rand-rand9’)

то в обоих переменных стоит уже результат от 1-99
Я догадываюсь что речь об обнулении какой то переменной -которая не обнулена(помогает перезапуск QSP),но сам пока понять что не так работает не в состоянии.Прошу помочь разобраться,так как проект масштабный,со множеством рандомных данных,событийный.И мне без них никуда,а к rand(1,5) - возвращаться не хочется.Уж больно мне нравится этот блок кода..Спасибо что дочитали)

Aleks Versus Moderator 08.02.2023 19:05 (3 years ago)

Добавил более широкий пример к другим примерам:
https://mega.nz/folder/rfAllKzR#rssaaJSs4tpGA_tUbaCCQw

Log in or Register to post comments.