Генератор случайных чисел в ActionScript

Для генерирования случайных чисел в ActionScript 2.0 есть два специальных метода:

1.) метод random()

Метод random() возвращает случайные числа в диапазоне от 0 до числа, которое на единицу меньше, чем указанное в качестве параметра у данного метода.

Код ActionScript 2.0:

trace(random(12))

В приведённом выше примере программа будет генерировать случайные числа от 0 до 11 (но не 12).

В результате нескольких запусков приведённого выше кода в панель Output были выведены следующие случайные числа:

5

3

8

10

1

11

1

7

1

На данный момент метод random() считается устаревшим и его использование не рекомендуется.

2.) метод random() класса Math

Math.random() возвращает случайные числа в диапазоне от 0 до 1.

Код ActionScript 2.0:

trace(Math.random())

После нескольких запусков программы в Output (специальная панель программы, в которой выводятся результаты трассировки) у меня оказались следующие числа:

0.492935118731111

0.772722862660885

0.41508986055851

0.97931618290022

0.797055774834007

0.167450917419046

0.400475445203483

Чтобы получить случайное число в интервале от 0 до заданного числа, достаточно лишь умножить результат работы данной функции на заданное число. К примеру, для получения случайного числа x, которое удовлетворяло бы условию 0<x<10, достаточно следующего кода:

trace(Math.random()*10)

Чтобы получить случайное число не в интервале от 0 до заданного числа, а в диапазоне от одного заданного числа до другого заданного числа, можно использовать конструкцию следующего вида:

(максимальное_значение - минимальное_значение) * Math.random() + минимальное_значение;

Так, для получения случайного числа в диапазоне от 50 до 100 можно применить следующий код:

trace((100-50)*Math.random()+50)

Именно метод Math.random() рекомендован к использованию вместо устаревшего random().

На практике, как правило, требуются целые случайные числа. Поэтому Math.random() часто используется в сочетании с методами округления. Для округления чисел в ActionScript применяется три специальных метода:

I.) Math.round() - округление числа по математическим правилам

Если дробная часть числа меньше 0.5 , то число будет округлено до ближайшего наименьшего целого числа, а если число равно или больше 0.5 , то оно будет округлено до ближайшего наибольшего целого числа.

Код ActionScript 2.0:

trace(Math.round(0.772722862660885))

Данный код вернёт "1".

II.) Math.floor() - округление до ближайшего меньшего целого числа

Код ActionScript 2.0:

trace(Math.floor(0.772722862660885))

Данный код вернёт "0".

III.) Math.ceil() - округление до ближайшего большего целого числа

Код ActionScript 2.0:

trace(Math.ceil(0.167450917419046))

Данный код вернёт "1".

Используя метод Math.random() в сочетании с одним из методов округления, можно получить случайное число в заданном диапазоне. Так, например, для вывода случайных чисел в интервале от 0 до 10 (включительно) можно использовать следующий код:

trace(Math.round(Math.random()*10))

Учтите, что использование разных методов округления может влиять на возвращаемый результат. Так, следующий код вернёт уже случайные числа только от 0 до 9 (включительно):

trace(Math.floor(Math.random()*10))

Для получения случайного числа с заданным количеством символов после запятой, можно воспользоваться кодом примерно следующего вида:

function trim(num, dec) { var rez = num; if (dec>=0) { var temp = Math.pow(10, dec); rez = Math.round(num*temp)/temp; } return rez; } trace(trim(Math.random()*100, 2));

Данный код вернёт случайное число в диапазоне от 0 до 100 с двумя знаками после запятой.

В ActionScript 3.0 для получения случайных чисел тоже используется метод Math.random(), который также возвращает случайное число с плавающей запятой в диапазоне от 0 до 1.

Код ActionScript 3.0:

trace(Math.random())

Описанные ранее приёмы для работы со случайными числами в ActionScript 2.0, будут работать и в ActionScript 3.0 (методы округления в этих языках тоже идентичны).

Примечания

[!] В ActionScript (вне зависимости от версии языка) целая часть числа отделяется от дробной не запятой, а точкой. Например:

0,5 - неправильно

0.5 - правильно

[!] Встроенный генератор случайных чисел (правильнее, псевдослучайных) далеко не идеален и разработчики иногда прибегают к написанию собственных генераторов случайных значений (примеры можно без особого труда найти в сети).

Автор: admin

Дата добавления: 2011-07-21

Просмотров: 19572

Рейтинг поста: +31-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): IgorKup
Дата добавления: 2014-10-23
Всё, теперь понятно. Ещё раз спасибо большое.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2014-10-23
Правильно именно ceil - округляет до большего целого числа. floor округляет до наименьшего целого и может выпадать число 0. А кадра 0, как вы должны знать, на временной шкале нет. И количество кадров, конечно, надо не ручками прописывать, а через свойство totalFrames.
Комментатор
Комментарий добавил(а): IgorKup
Дата добавления: 2014-10-23
Спасибо за Вашу помощь!
Еще подсказали что можно написать так:
gotoAndPlay(Math.floor(Math.random()*100));
Я попробовал оба варианта и оба сработали! Отличия между ними в - floor - ceil - в чем разница между ними тогда?!
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2014-10-23
В первом кадре следующий код:


gotoAndPlay(Math.ceil(Math.random() * this.totalFrames));
Комментатор
Комментарий добавил(а): Игорь
Дата добавления: 2014-10-23
здраствуйте, хочу спросить у Вас, если сможете конечно помочь
такой вопрос:
Раньше использовал АS2.0, а сейчас АS3.0 (попробую объяснить если будет понятно конечно) Вообщем создавал допустим "звездочку" делал ее крутящейся и она потом исчезала (получался эффект блеска) для нее я писал (по уроку АS2.0 код - в 1м кадре- gotoAndPlay(random(100)); и в последнем кадре: gotoAndPlay(2); затем мог размножать звездочки по проекту и они "как бы поблескивали) *появлялись, в разные промежутки времени (получалось своего рода сверкание такое). Теперь же в AS3.0 написание такого кода не срабатывает и все звездочки сверкают в одно и тоже время, все одинаково, а не как бы каждая в своё время! Я так понял что изменили команду - random.
Если Вы примерно поняли меня, о чем я написал, то скажите пожалуйста как мне надо написать код в 1м кадре и последнем? Спасибо большое
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-07-14
Да, конечно, там ошибка. Спасибо. Поправил.
Комментатор
Комментарий добавил(а): Сергей
Дата добавления: 2013-07-13
"К примеру, для получения случайного числа x, которое удовлетворяло бы условию 0>x<10, достаточно следующего кода:"
тут опечатка или я тупак? может там 0<x<10
Комментатор
Комментарий добавил(а): Троль
Дата добавления: 2012-03-07
Заибатая капча. Плюсую!
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика