Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.01.2012, 13:06
Scorp2008 вне форума Посмотреть профиль Отправить личное сообщение для Scorp2008 Найти все сообщения от Scorp2008
  № 1  
Ответить с цитированием
Scorp2008
[+1 13.07.11]
[++1 13.07.11]

Регистрация: Dec 2009
Сообщений: 42
Thumbs up Случайное число с исключением

Доброго дня.
Мне нужно получить случайное число в заданном диапазоне (ес-но функцией), но с исключением какого-либо числа, т.е. например любое число от 1 до 10, но только не 5. (1,2,3,4,6,7,8,9,10)... Имеется переменная в которой храниттся число исключение - idgame:int, также имеется функция рандома которая выдает случайное число в заданном диапазоне, а как сделать то что мне нужно - прошу помочь. Спасибо.

Функция рандома:
Код AS3:
public function random(min:Number, max:Number):Number {
  return Math.round(Math.random() * (max - min)) + min;
}

Старый 28.01.2012, 13:25
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 2  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Первый, плохой, но рабочий вариант:
Код AS3:
public function random(min:Number, max:Number, idgame:int):Number {
  var result:int = Math.round(Math.random() * (max - min)) + min;
  while (result == idgame)
    result = Math.round(Math.random() * (max - min)) + min;
  return result;
}
Добавлено через 3 минуты
Еще вариант:
Код AS3:
public function random(min:Number, max:Number, idgame:int):Number {
  var arr:Array = [];
  for (var i:int = min; i <= max; i++) if (i != idgame) arr.push(i);
  var len = arr.length;
  return arr[int(Math.random() * len)];
}
Добавлено через 13 минут
Ждем более изящных решений

Старый 28.01.2012, 13:39
Scorp2008 вне форума Посмотреть профиль Отправить личное сообщение для Scorp2008 Найти все сообщения от Scorp2008
  № 3  
Ответить с цитированием
Scorp2008
[+1 13.07.11]
[++1 13.07.11]

Регистрация: Dec 2009
Сообщений: 42
Спасибо большое

Старый 29.01.2012, 06:44
Zolza вне форума Посмотреть профиль Отправить личное сообщение для Zolza Найти все сообщения от Zolza
  № 4  
Ответить с цитированием
Zolza

Регистрация: Jun 2011
Сообщений: 31
Код AS3:
public function randomExeption(max:Number, min:Number, exeption:Number):Number
		{
			var mod:Number = 1;
			var t:uint = getTimer() % 2;
			if (!t) return Math.random() * (exeption - min) + min;
			else return Math.random() * (max - exeption) +(exeption + mod);
		}
Переменная mod для того, чтобы точно не нарваться на исключаемое число. Для целых исключаемых подойдет 1, для вещественных можно и меньше, 0.1 например.

Старый 29.01.2012, 07:10
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 5  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Код AS3:
public function randomNum(min:Number, max:Number, ex:Number):Number {
	var ret:Number = Math.random() * (max - min) + min;
	if(ret == ex)
		ret = max;
	return ret;
}
public function randomInt(min:int, max:int, ex:int):Number {
	var ret:int = int(Math.random() * (max - min) + min);
	if(ret >= ex)
		++ret;
	return ret;
 
}
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 29.01.2012 в 11:57.
Старый 29.01.2012, 07:25
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 6  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
-De-, только что наваял такой же вариант. Тольео для 2-го случая поправь возвращаемое значение на int, и в расчетах тоже, там Number не нужен.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 29.01.2012, 07:58
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 7  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Код AS3:
                function selectNm( max:int, min:int, ex:int ):int
		{
			var res:int = Math.random() * ( max - min ) + min; 
 
			if ( res === ex ) res = selectNm( max, min, ex );
 
			return res;
		}

Старый 29.01.2012, 07:58
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
-De-, TanaTiX – А что, ситуации когда ex == max исторически исключаются?)
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 29.01.2012 в 08:01.
Старый 29.01.2012, 07:59
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 9  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
но самый прикольный напишет 2wvxvw, если конечно заглянет в тему )

Старый 29.01.2012, 08:50
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 10  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Wolsh, тогда необходима либо дополнительная проверка, либо теряется равномерность рэндома (с учетом всех его недостатков во флеше)
fish_r, +1
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
random
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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