PDA

Просмотр полной версии : random без повторений


zzz_dmg
18.11.2008, 01:36
не могу придумать, как сделать так, чтобы картинки загружались по очереди рандомно, но чтобы последующая не повторяла предшествующую. только получилось сделать так: что картинки - это массив и я рандомно составляю массив (т.е. в массиве элементы не повторяются). а как сделать без массива

Division
18.11.2008, 02:12
А чем вариант с массивом не нравится?

zzz_dmg
18.11.2008, 02:29
) тем что массив большой и за большой промежуток времени картинки повторяются только один раз. а так они будут повторяться чаще. просто когда обычным рандомом делаешь, то бывает картинка выпадает раза 3-4. да и еще. картинки разделены на три группы и для каждой группы свой рандом, а у каждой группы своя длина массива) вот...
а еще. когда весь массив проходит и он создается заново (рандом чисел), то есть вероятность, что последняя цифра из массива совпадет с первой и опять задача сводится к исходным условиям

Eric Gurt
18.11.2008, 03:13
а если логику включить? Пусть у нас есть массив со списком всех картинок. Дальше создаем новый массив, в него рандомно закидываем по картинке из того массива, при этом в том массиве взятую картинку удаляем. Все, показываем картинки в их порядке во втором массиве!

DarkLight
18.11.2008, 07:16
Вообще, как мне кажется, стоит написать отдельный класс, который генерирует массив неповторяющихся чисел определенной длины в определенном интервале и получать оттуда числа. саоме простое - создавать массив по порядку, а брать рандомное по положению число, с его удалением.

zzz_dmg
18.11.2008, 09:32
сейчас я так и делаю. из массива картинок создаю новый массив где картинки стоят случайным образом без повторений и это массив проигрвается с удалением из массива картинки, котороя уже была показана. кагда весь массив удалился, создаю новый. а как отказаться от этого массива и генерировать просто числа

kyzi007
18.11.2008, 11:55
function playImg(){
rand = Math.floor(Math.random()*100);
if(rand < 35){
if(playing_img !=1){
mebel.play();
playing_img =1;
} else {
playImg();
}
}else if(rand < 67){
if(playing_img !=2){
svet.play();
playing_img =2;
} else {
playImg();
}
}else if(rand < 101){
if(playing_img !=3){
aksess.play();
playing_img =3;
} else {
playImg();
}
}
}

вот грубо для 3 позиций, но общяя идея должна подойти.

etc
18.11.2008, 12:00
kyzi007, отредактируйте свой пост и оформите код тегами .

Zik.
18.11.2008, 13:43
Эта тема уже обсуждалась, спрашивал я, поищите в поиске.