Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su

20.20. Как сделать перемещение на случайную локацию?

В: Как сделать перемещение на случайную локацию?

Например, чтобы портал переносил случайным образом на одну из локаций.

О:

Можно прописать выбор из случайного варианта прямо в действии:

act "Войти в портал":
    i=rand(1,5)
    if i=1:
        goto "Мир вечного полдня"
    elseif i=2:
        goto "Плоский мир"
    elseif i=3:
        goto "Земля-616"
    elseif i=4:
        goto "Трансметрополитен"
    elseif i=5:
        goto "Атлантида"
    end
end

Можно заранее внести названия локаций в массив (создаём список):

$portal[0]="Мир вечного полдня"
$portal[1]="Плоский мир"
$portal[2]="Земля-616"
$portal[3]="Трансметрополитен"
$portal[4]="Атлантида"

act "Войти в портал":
    goto $portal[rand(0,4)]
end

Последний вариант удобен тем, что посещённые места можно убирать из массива, и таким образом игрок не сможет посетить одно место дважды, но всё равно будет посещать их в случайном порядке:

! если значение переменной-флага равно нулю
if portal_flag=0:
    
! вписываем названия локаций в массив (создаём список)
    $portal[0]="Мир вечного полдня"
    $portal[1]="Плоский мир"
    $portal[2]="Земля-616"
    $portal[3]="Трансметрополитен"
    $portal[4]="Атлантида"
    
! выставляем переменной-флагу значение 1
    portal_flag=1
end
! действие
act "Войти в портал":
    
! получаем текущий размер массива
    local size=arrsize('$portal')
    
! если размер массива больше нуля
    if size>0:
        
! выбрасываем случайное число от нуля до номера последней ячейки массива
        local i=rand(0,size-1)
        
! запоминаем текущее название выбранной локации
        local $i_act=$portal[i]
        
! убираем это название из списка
        killvar '$portal',i
        
! переходим на эту локацию
        goto $i_act
    else
    
! если размер массива 0
        
! портал не работает
        *pl "Портал больше не работает."
    end
end