RU

Всё о RAND(RANDOM)

Nickit #1336 11.03.2015 21:42 22 comments 18727 views

Часто встречаю вопросы по 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-минимальное.
Для постепенного “выдергивания” ячеек из массива советую ознакомится с данной статьей.

Приведите пример кода, который направляет на данные локации.

Aleks Versus Moderator 16.12.2021 12:26 (4 years ago)

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-минимальное.
Для постепенного “выдергивания” ячеек из массива советую ознакомится с данной статьей.

Приведите пример кода, который направляет на данные локации.

Да,спасибо,совет принял,статьи читаю)

Log in or Register to post comments.