Форум 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)
-   -   спросить:генератор случайных чисел AS2 (http://www.flasher.ru/forum/showthread.php?t=111377)

zorom 24.04.2008 01:21

спросить:генератор случайных чисел AS2
 
Для создания Flash-викторины нужен генератор случайных чисел с неповторяющимися данными AS2. Прошу помощи.

Vertax 24.04.2008 02:52

Если диапазон достаточный, а количество запусков ограничено:
Код:

var RNDVALUES = []; //Здесь храним числа

RND = function (MIN, MAX)
{
        //Получаем число
        var RETVAL = Math.floor(Math.random() * (MAX - MIN) + MIN);
        //Проверяем число на уникальность
        for (var i = 0; i < RNDVALUES.length; i++)
        {
                if (RNDVALUES[i] == RETVAL)
                {
                        RETVAL = RND (MIN, MAX);
                        break;
                }
        }
        return RETVAL;
}

//Для примера
onEnterFrame = function ()
{
        RNDVALUES.push(RND(0, 100));
        trace (RNDVALUES);
}


TanaTiX 24.04.2008 10:05

Vertax, а зачем там нужна конструкция
Код:

(MAX - MIN) + MIN
ведь можно было б просто написать max (но тогда не учитывается нижняя граница)

ЗЫ. Надеюсь никто не против, что встрял в чужую тему, просто стало интересно.

qazwsx 24.04.2008 10:24

У тебя вызов функции при выбори чисел 0-1000 происходит 3500-5000+ раз :).
Если задать диапазон чисел из каторых мы будем делать выбор например 0-100.
И при выборе числа исключать его из этого диапазона, то будет гораздо проще как мне кажется :).

Vertax 24.04.2008 14:06

Цитата:

Vertax, а зачем там нужна конструкция
Дык, если не с ноля начинать нужно, а например с 500.
А формула Math.random() * (MAX - MIN) + MIN. Математика блин.

Цитата:

У тебя вызов функции при выбори чисел 0-1000 происходит 3500-5000+ раз
Читай внимательно пост. Я сразу написал, что если диапазон достаточный, а количество запусков ограничено.

Цитата:

Если задать диапазон чисел из каторых мы будем делать выбор например 0-100.
И при выборе числа исключать его из этого диапазона, то будет гораздо проще как мне кажется
Если чисел так мало, то да, в твоих словах есть смысл. Но... ты когда нибудь участвовал (или просто смотрел) в различных розыгрышах и тд. Очень часто цифры 6+ знаков, а запусков всего 20-100.

qazwsx 24.04.2008 14:28

Неважно сколько чисел главное чтобы хватило памяти:). Способ каторый я описал оптимальней в любом случае...
Правильнее просто геерировать рандомный диапазон и из него делать выбор

olexandr 24.04.2008 16:23

согласен с qazwsx
мне кажется так будет наиболее оптимально

Код:

var count:Number = 100;

var arr:Array = new Array();
for (var i:Number = 0; i<count; i++) {
        arr.push(i);
}

function getRnd() {
        return arr.splice(Math.random()*(arr.length-1), 1);
}

for (var i:Number = 0; i<count; i++) {
        trace(getRnd());
}


zorom 26.04.2008 19:45

всем спасибо


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

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