PDA

Просмотр полной версии : Random LoadMovie (1,2,3.....10) без повторов?


Massimo
22.07.2002, 13:33
random такой:
loadMovieNum ("../../directory/"+Math.ceil(Math.random()*30)+".swf", 1000);
как сделать чтобы он не повторял предыдущий, или лучше даже чтобы ещё следующи после него тоже не поторял....?
Вроде понятно изложил суть вопроса... :D :) :p

DeliMIter
22.07.2002, 13:38
Делаешь массив имен, использованное имя метишь как пройденное в таком-то проходе. Если на него выпадает рандом, то рероллишь этот рандом. Счетчик проходов инкрементируешь, естесстна.

Egoritch
22.07.2002, 13:53
masCount = 10; //cколько элементов надо расставить
a = new Array(masCount);
for (i=0;i<masCount;i++){
oo1=0;
while (oo1==0){
oo1=2;ooo=random(masCount);
for (i1=0;i1<i;i1++) if (a[i1]==ooo)oo1=0;
}
a[i]=ooo;
}



заполняет массив a размерности masCount числами от 0 до masCount без повторов.

lexass
22.07.2002, 13:54
DeliMIter, лично Я тЯ понял =)))

ИМХО
мо быть массив заполнили,
то что отЮзали выкинули ?

Massimo
22.07.2002, 14:00
Ухх.. я не думал, что всё так трудно.... :cool:
Т.е. мне тот код нужно вставить после лоад муви, и всё заработает? :)

Egoritch
22.07.2002, 14:14
послен выполнения того кода у тебя в массиве a будут лежать случайные числа от 0 до 9 неповторяющиеся

то есть что то типа

a[0]=4;
a[1]=2;
a[2]=9;
a[3]=0;

и т.п. как их заюзать - разбирайся ;-)) что-то типа в первом кадре, там пишешь этот код и i=0;

потом

loadMovieNum ("../../directory/"+a[i]+".swf", 1000);
i++;

;)

Nox Noctis
22.07.2002, 14:47
по-моему надо быть проще ;)
самый рациональный вариант тебе сказал делимитер в самом начале... только я не понял причем тут счетчик рандомов :)

// предел рандома + массив уже использованных
limit=30, hits=[];
//
// там, где нужно запускать лоад пишешь три строчки:
while (hits[tmp=Math.ceil(Math.random()*limit)]) {}
hits[tmp] = true;
loadMovieNum("../../directory/"+tmp+".swf", 1000);

...и все собственно :)

только учти, что чем больше будет загружаться, тем дольше рандом будет искать неиспользованные ячейки - значит надо сразу задать предел в несколько раз больший чем количество твоих мультиков - просто чтоб не притормаживало...

DeliMIter
22.07.2002, 14:49
2lexass

Эт здорово, что хоть ТЫ меня понял ;)))
В условии требовалось не повторять как минимум два предыдущих, но ничего не было про НЕ ПОВТОРЯТЬ ВООБЩЕ. Так что у меня все правильно :))

Track = new Array();

function Turn() {
while (Track[_i = random(30)] + 2 > _turn);
loadMovieNum(...);
Track[_i] = ++_turn;
}

Так что Egoritch идет в угол за много лишнего кода.

Nox Noctis
22.07.2002, 14:51
хе-хе-хе.... а я на две минуты раньше :p :p :p

DeliMIter
22.07.2002, 14:53
Я заметил (мрачно)...

Nox Noctis
22.07.2002, 14:55
...это дуэль ?.. я выбираю оружие :)))

lexass
22.07.2002, 15:08
:cool: гранатомет :cool:

Nox Noctis
22.07.2002, 15:12
хотя с учетом этого
В условии требовалось не повторять как минимум два предыдущих, но ничего не было про НЕ ПОВТОРЯТЬ ВООБЩЕ. код делимитера лучше подходит :))



ага, гранатомет :) подствольный :) а что там над ним... уууу.... :)))

Massimo
22.07.2002, 15:22
Эх как закрутило то... :D :) :p
Хорошо...

DeliMIter
22.07.2002, 15:23
А над ним (хыхы) ствол от Глока (семнадцатого) :))))))))))))

Egoritch
22.07.2002, 15:30
"угу, угу, если только два соседних, то у меня лишнее", - промычал Егорыч, уходя с линии огня ;))

DeliMIter
22.07.2002, 15:36
Не дрейфь, Egoritch, горчичный газ тебе везде накроет ;)))))

lexass
22.07.2002, 15:36
а мне нравиться вот так:

max=10;limit=3;id=[];tmp=[]
for(i=0;i<max;i++)id[i]=i

function load_img(){
tmp.push(img_num=id.splice(random(id.length),1)[0]);
(tmp.length>limit)? id.push(tmp.splice(0,1)[0]):'';
//loadMovieNum(...); // - img_num
}

а все это с предыдущими, следующими, радом стоящими ФИГНЯ

ЗЫ
Цыклы долоЙ :D ;)
:p

DeliMIter
22.07.2002, 15:42
И очень зря, потому что твой вариант сложнее, в нем два массива вместо одного, а первая твоя строка по всем правилам это четыре строки (как ты не пытался это скрыть).

lexass
22.07.2002, 15:54
ну и что
limit=5
а мне так нравиться вот :p

Nox Noctis
22.07.2002, 16:35
buffer = ""; bufferlen = 2;
xload = function () {
while (buffer.indexOf(str=String((num=random(30))+10)) != -1) {}
buffer = (buffer+str).substr(-2*bufferlen);
loadMovieNum("../../directory/"+num+".swf", .....);
};

вот так мы победили сырость :))

цикл все равно остался, но для буфера из всего лишь двух имен его можно заменить двумя ифами ;)

lexass
22.07.2002, 16:40
:D

Massimo
23.07.2002, 14:46
Блин, объяснили что ли конкретно что писать то... а то зачем я спрашивал то, что ничего не понимаю.... :cool: :mad: :( :o

lexass
23.07.2002, 14:52
Оригинал написал(а) Massimo
Блин, объяснили что ли конкретно что писать то... а то зачем я спрашивал то, что ничего не понимаю.... :cool: :mad: :( :o

2Massimo
Был вопрос:
как сделать чтобы он не повторял предыдущий

те дали кучу вариантов :cool:
дык чЁ те еще надо :(
резжевать и врот положить :mad:

ЗЫ
Все очень просто ;)

Massimo
23.07.2002, 15:32
Да всё, всё врубился... :mad:
Всем спасибо.

lexass
23.07.2002, 15:34
Всем спасибо.
все свободны :D :D :D