XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
GetRandom задача
Возникла ситуация, когда нужно использовать эту функцию в цикле (exitwhen ++i==10), но вот незадача, генерируемое число может повторяться =(

Подскажите ваши пример, как можно отсечь повторяющееся число? Но чтобы генерировалось повторно до тех пор, пока не получится число, которое в цикле небыло получено ранее.

З.Ы. как уже написал, цикл запускается 10 раз, соответственно нужно получить 10 разных значений, не похожих друг на друга
Старый 08.04.2012, 11:11
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,024
Активность:
Sidhe, юзай поиск почаще
» вот функция
((код jass
library RandomIntGenMem
globals
public integer RandMemMax = 8100
private integer array RandMem[RandMemMax]
private integer RandMemSize = 0
endglobals
private function CheckRandMem takes integer value returns boolean
local integer i = 0
loop
exitwhen i>RandMemSize
if value == RandMem[i] then
return false
endif
set i=i+1
endloop
return true
endfunction
private function SaveRandMem takes integer value returns boolean
if RandMemSize > RandMemMax then
return false
endif
set RandMem[RandMemSize] = value
set RandMemSize=RandMemSize+1
return true
endfunction
function ClearRandomIntMem takes nothing returns nothing
set RandMemSize = 0
endfunction
function GetRandomIntMem takes integer lowBound, integer highBound returns integer
local integer r
local integer tmp = 0
if highBound<=lowBound or (highBound-lowBound) > RandMemMax then
return 0
endif
set r = GetRandomInt(lowBound,highBound)
set tmp = r
loop
exitwhen CheckRandMem(r)
if r<highBound and r>=tmp then
set r=r+1
elseif r==highBound then
set r=tmp-1
elseif r<tmp and r>lowBound then
set r=r-1
elseif r<=lowBound then
call ClearRandomIntMem()
set r = GetRandomIntMem(lowBound,highBound)
endif
exitwhen r<lowBound
endloop

if SaveRandMem(r) then
return r
else
call ClearRandomIntMem()
call SaveRandMem(r)
return r
endif
endfunction
endlibrary
))
автор ScorpioT1000, можно было и посмотреть в библиотеке функций...
Старый 08.04.2012, 11:24
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
сам то понял как она работает?
Старый 08.04.2012, 11:58
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Вызовом данной функции с мин\макс значениями рандома

function GetRandomIntMem takes integer lowBound, integer highBound returns integer
очевидно же=/
Старый 08.04.2012, 12:03
Sidhe
Unity3D engine
offline
Опыт: 7,721
Активность:
да, уже разобрался

спасибо
Старый 08.04.2012, 12:07
ScorpioT1000
Работаем
online
Опыт: отключен
тока в конце ClearRandomIntMem не забыть, сборосить когда надо =)
надо же, хоть чтото пригодилось
Старый 08.04.2012, 13:29
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 21:13.