Всё о RAND(RANDOM)
Часто встречаю вопросы по Randomu. Предлагаю сюда выкладывать различные уроки связанные с RANDOMom.
Бой, случайная фраза, случайный предмет (с убитого монстра), и т.д, и т.п.
Спасибо большое.
oleksandrigo:
x = rand (2) if x = 0: gt 'лок1' if x = 1: gt 'лок2' if x = 2: gt 'лок3' !Хочешь больше локаций? Тогда пишеш в ранд вместо 2 число на единицу меньше чем количество локаций. Нет ну можно еще написать так rand(1,a) где а будет количеством локации к примеру rand (1,7) и ифов соответственно тоже будет семь. Ну и начинаться отсчет уже будет с 1.
Если индексировать локации как в примере, то можно без семи ифов.
act 'Погнали': dynamic 'gt "лок<<rand(1,7)>>"'
Здравствуйте,помогите пож начинающему кодеру.У меня существует две локации с функцией рандома от 1 до 10, и от 1 до 100.При переходе на первую локацию все работает отлично и выдает случайное число от 1 до 10…на следующем шаге задействуется вторая локация с функцией от 1 до 100 -но при этом продолжается рандомить первый вариант от 1 до 10.Отдельно эти локации работают отлично но в последовательности почему то вторая не работает.
код:(код не мой) мне пока сложно такое писать - но функционирует без проблем.
! в первую очередь генерируем массив, заполненный всеми нужными данными
! можно проставить вручную, но я использую цикл для чисел от 1 до 9
if arrsize(’arand’)=0:
! только если массив не создан, так как незачем создавать его сто раз
args[’i’]=1
:for
if args[’i’]<11:
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’]
McFly,
Код рабочий.
Для простого вывода случайной цифры советую использовать только rand(m,n) где n-максимальное число, а m-минимальное.
Для постепенного “выдергивания” ячеек из массива советую ознакомится с данной статьей.
Приведите пример кода, который направляет на данные локации.
McFly:
При переходе на первую локацию все работает отлично и выдает случайное число от 1 до 10…на следующем шаге задействуется вторая локация с функцией от 1 до 100 -но при этом продолжается рандомить первый вариант от 1 до 10.
возможно всё дело в том, что массив arand уже сформирован ко второй локации и не создаётся для варианта от 1 до 100.
Хм. Код по стилю похож на мой, но не помню, чтоб я такое писал. Ещё этот код похож на решение для замены rand() по причине того, что rand выдаёт псевдослучайные варианты и иногда на одинаковых промежутках времени выдаёт одни и те же серии чисел. Так что я присоединяюсь к совету HronoStranger, лучше использовать чистый rand и не лепить лишнюю функцию, если нужно просто выбросить числа в промежутке.
UPD: Это и правда мой код https://qsp.org/forum/comments/7019
Код очень мне понравился своим решением на выходе,я пока учусь и праdить его под свою игру пока не могу,хотя совет принял и перешел пока на чистый rand,впоследствии я все таки его адаптирую когда буду готов,и еще раз спасибо тебе за уроки,Alex.
HronoStranger:
McFly,
Код рабочий.
Для простого вывода случайной цифры советую использовать только rand(m,n) где n-максимальное число, а m-минимальное.
Для постепенного “выдергивания” ячеек из массива советую ознакомится с данной статьей.Приведите пример кода, который направляет на данные локации.
Да,спасибо,совет принял,статьи читаю)