Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Random LoadMovie (1,2,3.....10) без повторов? (http://www.flasher.ru/forum/showthread.php?t=34800)

Massimo 22.07.2002 13:33

Random LoadMovie (1,2,3.....10) без повторов?
 
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


Часовой пояс GMT +4, время: 12:47.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.