Просмотр полной версии : Случайный массив
Mr. Fixit
28.10.2006, 23:09
Проблема:
Незнаю как решить задачу...
-------------------------------
Как сделать что-бы выбирался случайный массив?
//vars
var myArr:Array = new Array();
myArr = ["A", "B", "C"];
len = myArr.length;
//on button
next_btn.onRelease = function() {
ran = int(Math.random()*len);
_root.attachMovie(myArr[ran], "mc", 0);
_root.mc._x = Stage.width/2;
_root.mc._y = Stage.height/2;
};
на сцену выводится, то "A" 2-раза, то "B" n-раз, то "C" n-раз...
----------------------------------------------
Вопрос: как сделать, что бы если запускаешь функцию, то выводилось например "А", но неповтрялось вторично, а сдедовало за ним следущие "С" или "В", тоесть отбор случайности не повторялся до тех пор пока все елементы массива не пройдут...
Я уже устал считать, сколько раз я эту функцию писал. Вы поиском пытались воспользоваться?
Не проверял... Может и не работать...
//vars
var myArr:Array = new Array();
myArr = ["A", "B", "C"];
var myArrLength:Number = myArr.length;
var tempArr:Array = new Array();
resetTempArray();
function resetTempArray()
{
for (var index:Number = 0; index < myArrLength; index++)
{
tempArr.push(myArr[index]);
}
}
//on button
next_btn.onRelease = function() {
var len:Number = tempArr.length;
if (len == 0)
{
resetTempArray();
len = tempArr.length;
}
var ran:Number = randRange(0, len - 1);
_root.attachMovie(tempArr[ran], "mc", 0);
_root.mc._x = Stage.width/2;
_root.mc._y = Stage.height/2;
tempArr.splice(ran, 1);
};
function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.round(Math.random()*(max-min))+min;
return randomNum;
}
Fenix = 0;
var arr = ["a", "b", "c"];
this.onMouseDown = function() {
ran = random(arr.length);
_root.attachMovie(arr[ran], "mc", 1);
_root.mc._x = _xmouse;
_root.mc._y = _ymouse;
if (ran == 0) {
arr.splice(0, 1);
Fenix += 1;
}
if (ran == 1) {
arr.splice(1, 1);
Fenix += 1;
}
if (ran == 2) {
arr.splice(2, 1);
Fenix += 1;
}
if (Fenix == 3) {
Fenix = 0;
arr.splice(0, 0, "a", "b", "c");
}
};
держи =)
2 D12: тебе не приходило в голову, что
if (ran == 0) {
arr.splice(0, 1);
Fenix += 1;
}
if (ran == 1) {
arr.splice(1, 1);
Fenix += 1;
}
if (ran == 2) {
arr.splice(2, 1);
Fenix += 1;
}
можно записать как
arr.splice(ran, 1);
Fenix ++;
Многоуважаемый iNils это ты должен знать , флешь твоя работа и ты в ней совершенствуешся =)
а я так итузиазист : )
P.S. Постораюсь расти над собой : )
Mr. Fixit
29.10.2006, 01:22
Сенкс чуваки....
2 D12: Ладно прибедняться :)
Мой старый гениальный код :) Не смейтесь, он НИКОГДА не ошибается
my_btn.onPress = function() {
n=(random(5)+ 1);
if (n == m) {n=(random(5)+1)};
if (n == m) {n=(random(5)+1)};
if (n == m) {n=(random(5)+1)};
if (n == m) {n=(random(5)+1)};
if (n == m) {n=(random(5)+1)};
m=n;
trace(m);
}
2 Wolsh:
Да, это действительно не смешно... +_+
Не, ну если хочешь можешь засунуть в цикл, но копи/пасте быстрее :)
(я всё понимаю про "красоту кода", потому и просил не смеяться)
a = ['a', 'b', 'c'];
Array.prototype.shuffle = function() {var len = this.length;for (l=0; l<len; l++) {this.splice(random(this.length), 0, this.splice(random(this.length), 1));}};
a.shuffle();
trace(a);
А вообще, мне больше всех вот это элегантное решение нравится:
Array.prototype.shuffle = function() {
var rand = function() {return Math.floor(Math.random()*3);};
return this.sort(rand);
}
a = [1,2,3,4,5,6,7,8,9];
a.shuffle();
trace(a);
Денис, как тебе это может нравится, когда это не АС2 и меняет текущий класс?:D
Элегантное??? Может быть. Только оно ПОВТОРЯЕТСЯ, а значит не является решением заявленной проблемы. И первое (прости за наглость), тоже повторяется.
Ну, вообще, если говорить о задаче, то вот:
отбор случайности не повторялся до тех пор пока все елементы массива не пройдут
То есть, насколько я понял, элементы массива выбираются случайным образом, пока не будут выбраны все, после чего всё повторяется...
Элегантное??? Может быть. Только оно ПОВТОРЯЕТСЯ, а значит не является решением заявленной проблемы. И первое (прости за наглость), тоже повторяется.
Где оно повторяется?
Думаю, товарищ сформулировал неверно. Понятно же и так, чего он хочет - чтобы два раза подряд один и тот же мувик не пошел
Нет, массив-то оно перемешивает будь здоров. Это его задача, и она решена на 5. Но элементы по одному индексу повторяются, и значит невозможно вытащить неповторяющееся число. Это в общем и так видно, из кода. Чтобы решить поставленную задачу, надо либо проверять на равенство с предыдущим значением, либо исключать это значение из рассматриваемых заранее.
Других способов не вижу.
А первый способ просто подряд совершенно одинаковые массивы выдает с частотой примерно один из восьми
Wolsh, не фига не понял того что ты написал.
Вот трейс:
2,4,5,8,6,1,3,7,9
3,2,5,8,9,1,7,6,4
8,5,4,7,6,3,1,9,2
2,6,5,4,3,1,8,7,9
9,2,4,6,5,3,7,1,8
5,2,3,9,1,8,7,4,6
9,5,4,8,7,3,6,1,2
Так понятно? Как ты вытащишь какое-то число с гарантией, что в следуюшем шейке не получишь по этому индексу тоже самое?
Сортируется массив и идет обращение каждый раз к следущему индексу пока не достигнем конца массива.
Думаю, товарищ сформулировал неверно. Понятно же и так, чего он хочет - чтобы два раза подряд один и тот же мувик не пошел
Мне не понятно. Я понял так, что имя не должно повторяться в рамках одного прохода массива...
Сортируется массив и идет обращение каждый раз к следущему индексу пока не достигнем конца массива.
Угу. А потом шейк и по-новой? Или шейк перед каждым мувиком. я всётаки настаиваю чтобы задача рассматривалась как она поставлена. После замечания Хемуля о том что должны проиграть все мувики в одном цикле я признаю что мой код не подходит, в нем может вызваться позапрошлый мувик. Но я чёто никак не допетрю, как этот код __etc присобачить к данной проблеме?
Смотри в трейсе:
строчки 3 и 4. Мувик 2 повторится.
строчки 4 и 5. Мувик 9 повторится.
Вопрос стоял так
как сделать, что бы если запускаешь функцию, то выводилось например "А", но неповтрялось вторично, а сдедовало за ним следущие "С" или "В", тоесть отбор случайности не повторялся до тех пор пока все елементы массива не пройдут...
Хорошо, а вот что на душе у человека наболело:
Проблема:
Незнаю как решить задачу...
-------------------------------
на сцену выводится, то "A" 2-раза, то "B" n-раз, то "C" n-раз...
----------------------------------------------
Хорошо, а вот что на душе у человека наболело:
Это замечание некорректное, так как вырвано из контекста текущего кода автора вопроса.
Товарищи, вообще-то ещё в 7-ом сообщении темы автор поблагодарил всех за помощь, что наводит на мысль о том, что его удовлетворил тот код, который ему предоставили ранее, поэтому в своих спорах о том, чего же хотел автор, стоит отталкиваться от того, что было написано с первого по 7-ое сообщение. ^_^
Серьёзно? :) Ну ладно тогда, мы тут достаточно понаписали, придет автор и возьмёт что ему надо. У меня 6 утра, я спать.
Mr. Fixit, только мой код никогда не повторяет подряд два мувика, хотя возможна последовательность 1,2,1,2 при наличии в массиве 3, 4, и 5.
Остальные хорошо тусуют их в массиве, но при переходе к следующему показу массива возможен повтор последнего мувика.
Выберите, что вам подходит.
Это чтоб никто не путался в наших решениях :)
Мммм, да я вообще привёл вариант shuffle… И он, ессно, не является решением задачи.
Mr. Fixit
29.10.2006, 11:32
Спасибо..
проблема была в том что-бы по 2 раза не выбирало одно и тоже...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.