Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме 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
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
$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
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