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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.06.2010, 21:37
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию Math.random() , вытяжка из массива и подгрузка обратно

Код AS1/AS2:
var arr = [1,2,3,4,5,6]
 
tf_text = arr[Math.floor(Math.random()*arr.length)]
Выбираем некий случайны элемент, затем надо повторять эту функцию = кол элементов в массиве, но при этом выбирать каждый раз новый, тоесть те ктороые были выбраны должны отсеятся

как такое организовывается:?

П.с. вот моя методика, но почему то иногда удаляется не тот элемент, тоесть предидущий остается. В чем может быть ошибка?


Код AS1/AS2:
var a = Math.floor(Math.random() * (arr.length - 2));
		arr.splice(a,1);
		arr1.splice(a,1);
		arr2.splice(a,1);
		a = Math.floor(Math.random() * (arr.length - 1));
		tf33.text = arr[a];
		trace(arr);
		if (tf_answer.text.toString() == arr2[a]) {
			SUPER_COUNT++;
		}


Последний раз редактировалось in4core; 01.06.2010 в 21:52.
Старый 01.06.2010, 21:57
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
После выбора случайного элемента просто удаляй его из массива и всё. Именно удаляй, а не обнуляй или не делай неопределенным:
http://www.flasher.ru/forum/showthread.php?t=138239
чтобы размер массива стал меньше на единицу.

При желании первоначальный массив можно сохранить, а для операций всех этих использовать его копию.

Старый 01.06.2010, 22:01
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 3  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Мункар я ответил уже, таким же алгоритмом. Тока толку мало в нем

Старый 01.06.2010, 22:14
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Код AS1/AS2:
var array:Array = [ 1, 2, 3, 4, 5, 6 ];
var clone:Array = [].concat(array);
 
var l:Number = array.length;
for (var i:Number = 0; i < l; i++)
{
	trace(getRandomElement());
}
 
function getRandomElement():Object
{
	return clone.splice(Math.floor(Math.random() * clone.length), 1)[0];
}

Старый 01.06.2010, 22:23
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 5  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Вероятно "толку нет" не в алгоритме, а в реализации.
Прекрасный алгоритм:

Код AS1/AS2:
var arr:Array = [1,2,3,4,5,6];
 
this.onEnterFrame = function  () {
 
	trace('Длина массива = ' + arr.length);
 
	if (arr.length != 0)
	{
		var randomIndex:Number = Math.floor(Math.random() * arr.length);
		var randomElement = arr[randomIndex];
		trace('randomIndex = ' + randomIndex);
		trace('randomElement = ' + randomElement);
		trace('-------------------------');
		arr.splice(randomIndex, 1);
	}
	else 
	{
		delete this.onEnterFrame ;
		trace('-------------------------');
		trace('Конец массива');
	}
};
Скопируй и запусти.

Старый 01.06.2010, 23:13
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 6  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Та это все понятно, задача немного сложнее, чем я расписал просто. Видимо косяки в другом. Задача такая :
есть 2 массива данных из XML. Допустим title атрибутов и url атрибутов.
Автоматом перейдя на кадр, запускается рандом. выбирающий некий элемент из массива 1. А далее, при нажатии на кнопку идет проверка, если текст в поле соотв тексту массива 2, то в память кидаем +1 для некой переменной. Затем этот элемент удаляется, остается новый массив 1 , соответсвующий массиву 2, и снова опреция повторяется, до тех пор пока массив не будет разрушен. Вот такая не получается бойда, почему то массивы то расходятся, то их значения спешат на 1 и т.д....

Добавлено через 5 минут
На данный момент это безобразие ( кусок только) выглядет так,

Код AS1/AS2:
if (_global.ORDER != "Random") {
	defaulT();
}
else {
	defaulT1();
}
 
function defaulT() {
	tf33.text = arr[0];
}
btn.onRelease = somefunction;
somefunction() {
if (a == true && b == false) {
		var ab = Math.floor(Math.random() * (arr.length - 1));
		if (arr.length >= 1 && arr.length < _global.MAX - 1) { 
			tf33.text = arr[ab];
			if (tf_answer.text.toString() == arr2[ab]) {
				SUPER_COUNT++;
			}
 
		}
		else {
			tf33.text = arr[0];
			if (tf_answer.text.toString() == arr2[0]) {
				ab = 0;
				SUPER_COUNT++;
			}
		}
		trace(arr);
		trace(arr2);
		//trace(SUPER_COUNT);
		arr.splice(ab,1);
		arr1.splice(ab,1);
		arr2.splice(ab,1);
 
 
 
		//trace(arr);
 
	}
}
где MAX = начальной длинне массива

Старый 01.06.2010, 23:19
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 7  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Ошибки в определении диапазона выборки? (arr.length - 2 зачем? )

Старый 01.06.2010, 23:30
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 8  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
где минус 2 ? Нету там такого

Старый 01.06.2010, 23:36
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 9  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Почему тогда первоначальный диапазон равен arr.length - 1 ?

Добавлено через 6 минут
Чтобы получить случайный индекс, нужно использовать
Код AS1/AS2:
Math.floor(Math.random() * arr.length)


Последний раз редактировалось mooncar; 01.06.2010 в 23:43.
Старый 02.06.2010, 00:04
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 10  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
ты думаешь в этом косяк? Что то я очень сомневаюсь. Хотя проверу

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

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

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


 


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


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