Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   random без повторений (http://www.flasher.ru/forum/showthread.php?t=120574)

Art_133 24.01.2009 17:23

random без повторений
 
Здравствуйте.
Есть цикл при помощи которого грузятся картинки. Цикл проходит 5 раз (к примеру). В цикле картинки грузятся в случайном порядке при помощи
Код AS1/AS2:

Math.floor(Math.random ()* 5)

Проблема в том что Math.random за 5 раз выдаёт одинаковые цифры и грузятся одинаковые картинки..
Подскажите как можно сделать random без повторений?
Спасибо!

Division 24.01.2009 17:45

Можно создать массив из пяти элементов [0,1,2,3,4] и перемешать его. Потом просто проходишь по нему и грузишь картинки.

Art_133 24.01.2009 17:48

Да! Как раз то что нужно! Как создать массив я знаю, а как можно перемешать его?

Division 24.01.2009 17:49

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

глянь тут

Art_133 24.01.2009 17:55

Цитата:

Сообщение от Division (Сообщение 793327)
Тебе не надо проходить по нему в случайном порадке. Тебе надо его перемешать.

Да, я понял. Глупость написал и удалил.

Цитата:

Сообщение от Division (Сообщение 793327)
Несколько раз поменять случайные элементы друг с другом местами.

Спасибо за подсказку, буду думать.

Zik. 24.01.2009 18:17

Ну, вообще-то я уже поднимал данный вопрос.
(Надо поискать)

Art_133 24.01.2009 18:29

Искал, что-то не нашел... И как нашел решение? Если глянуть темы через твой профиль найду?

Добавлено через 5 часов 4 минуты
Если кому-нибудь будет полезным вот перемешивание элементов в массиве

Код AS1/AS2:

Array.prototype.shuffle = function( b )
{
 var i = this.length, j, t;
 while( i )
 {
  j = Math.floor( ( i-- ) * Math.random() );
  t = b && typeof this[i].shuffle!=='undefined' ? this[i].shuffle() : this[i];
  this[i] = this[j];
  this[j] = t;
 }
 
 return this;
};

Как применить
Код AS1/AS2:

var a = new Array(1,2,3,4,5);
alert( a.shuffle() );

Источник

Добавлено через 5 часов 5 минут
В принципе вариант работающий. Но хотелось бы подобный рандом без массива. Кто с подобным сталкивался? Прошу подсказать.

Жень Шень 26.01.2009 12:29

Цитата:

Сообщение от Art_133 (Сообщение 793337)
...Но хотелось бы подобный рандом без массива...

Без массива не знаю. Нужно ведь запоминать номера как-то.
Но без перемешивания запросто:
Код AS1/AS2:

// Задаем кол-во картинок
var k:Number = 5;
var s = [];
/ заполняем массив. Без него, ну, ни как...
for (var i:Number = 0; i<k; i++) {
        s[i] = [i+1];
}
while (s.length) {
        var p = s.splice(random(s.length), 1);
        trace(p);
}


chingachgoog 26.01.2009 12:57

http://flasher.ru/forum/showthread.p...587#post779587

Art_133 27.01.2009 22:39

спасибо за советы!


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

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