Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Порядок возпроизведения Плей листа в Моём плеере, не получаеться сделать случайный порядок 
:(
    Опции темы
BEST13
Дата 3.6.2008, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 11.4.2008
Где: Ukraine

Репутация: нет
Всего: нет



Я вот всё пишу свой плеер , и столкнулся с такой проблемой. У меня не получаеться сделать случайный порядок возпроизведени. Я создаю масив размер которо равен количиству песен в плей листе.  Переношу с первого элемента позицую песни во второй, потом в запоминаю в первый элимент масива придыдушию позицыю песни. Потом рандомом получаю число и дальше должен сравнить его с с элементами масива,и если число ровно одному из элименотв масива тогда надо снова рандомом получить число. А если не равно тогда выдилить это позицыю в плей листе. но уменя не получаеться правельно сделать цыклс условием проверки . Помогите плиз

PM MAIL ICQ GTalk   Вверх
KAMIKAZE
Дата 3.6.2008, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Цитата(BEST13 @ 3.6.2008,  18:28)
Я вот всё пишу свой плеер , и столкнулся с такой проблемой. У меня не получаеться сделать случайный порядок возпроизведени. Я создаю масив размер которо равен количиству песен в плей листе.  Переношу с первого элемента позицую песни во второй, потом в запоминаю в первый элимент масива придыдушию позицыю песни. Потом рандомом получаю число и дальше должен сравнить его с с элементами масива,и если число ровно одному из элименотв масива тогда надо снова рандомом получить число. А если не равно тогда выдилить это позицыю в плей листе. но уменя не получаеться правельно сделать цыклс условием проверки . Помогите плиз

Жесть  smile  

Не проще ли юзать  RandomFrom  smile 
PM MAIL   Вверх
BEST13
Дата 3.6.2008, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 11.4.2008
Где: Ukraine

Репутация: нет
Всего: нет



Цитата

Не проще ли юзать  RandomFrom   

Я посмотрел и не понял его преимушество перед обычным Random. Темболие с рандомом всё ок, вот цыкл который проверял бы масив  сделать не могу(
PM MAIL ICQ GTalk   Вверх
KAMIKAZE
Дата 3.6.2008, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Может тоже самое:
два массива, один с песнями, другой пустой.
во второй добавляешь елемент  RandomFrom(первый) и удаляешь его же из первого. Я делал так. 
PM MAIL   Вверх
BEST13
Дата 3.6.2008, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 11.4.2008
Где: Ukraine

Репутация: нет
Всего: нет



ну вобщет уменя листбокс и я позицыи в масив заганял которые играли
Цитата

Может тоже самое:
два массива, один с песнями, другой пустой.
во второй добавляешь елемент  RandomFrom(первый) и удаляешь его же из первого. Я делал так. 

удалить смысле присвоить ему пустоту?
PM MAIL ICQ GTalk   Вверх
KAMIKAZE
Дата 3.6.2008, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Нет, удалить елемент и уменьшить длину массива, т.е. каждый раз второй массив будет увеличиваться, а второй соответственно уменьшаться.  

Когда я делал подобное мне было лень работать с массивом smile, просто взял два listbox'a - вот тебе и два массива. Ну а дальше - 
Код

i:=random(listbox1.items.count);
Listbox2.items.add(ListBox1.items.strings[i]);
ListBox1.items.Delete[i];

PM MAIL   Вверх
BEST13
Дата 5.6.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 11.4.2008
Где: Ukraine

Репутация: нет
Всего: нет



Вариант неплохой но у меня есть уже два лист бокса и и не смогу сделать так чтоб позицыи их совпадали(
поетом у мне нужно решение через масивы
PM MAIL ICQ GTalk   Вверх
KAMIKAZE
Дата 5.6.2008, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Цитата(BEST13 @  5.6.2008,  16:52 Найти цитируемый пост)
Вариант неплохой но у меня есть уже два лист бокса и и не смогу сделать так чтоб позицыи их совпадали(
поетом у мне нужно решение через масивы

можешь немного подробнее объяснить ?

Это сообщение отредактировал(а) KAMIKAZE - 5.6.2008, 19:14
PM MAIL   Вверх
BEST13
Дата 5.6.2008, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 11.4.2008
Где: Ukraine

Репутация: нет
Всего: нет



Цитата

можешь немного подробнее объяснить ?

У меня есть на форме два листбокса , они служат как плейлист. Тока один показвает путь к песни а другой токо её название. вот принцыпе всё и если я добавлю
ищё два листбокса я не смогу связать их позицыи тоесть песня играть буит одна ,а выдилена другая.
А если делать чер масив то мне кажиться эт рацыональней. 
Просто Создаем динамический масив, и помере играние песен заносим в их позицыи. Перед проиграшем рандомом определяем чесло и если его нет в масиве тогда догда должна играть эта песня вот эта моя задумка. вроде ничего сложного но яуже второй день парюсь
PM MAIL ICQ GTalk   Вверх
KAMIKAZE
Дата 5.6.2008, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Цитата(BEST13 @ 5.6.2008,  21:46)
Цитата

можешь немного подробнее объяснить ?

У меня есть на форме два листбокса , они служат как плейлист. Тока один показвает путь к песни а другой токо её название. вот принцыпе всё и если я добавлю
ищё два листбокса я не смогу связать их позицыи тоесть песня играть буит одна ,а выдилена другая.
А если делать чер масив то мне кажиться эт рацыональней. 
Просто Создаем динамический масив, и помере играние песен заносим в их позицыи. Перед проиграшем рандомом определяем чесло и если его нет в масиве тогда догда должна играть эта песня вот эта моя задумка. вроде ничего сложного но яуже второй день парюсь

Я конечно не критик, но как то не рацЫонально.
Должен быть один плейлист, в котором отображается название и\или полный путь, ну и следующий трек для проигрывания. 

Выложи исходник.
PM MAIL   Вверх
BEST13
Дата 6.6.2008, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 11.4.2008
Где: Ukraine

Репутация: нет
Всего: нет



Цитата

Я конечно не критик, но как то не рацЫонально.
Должен быть один плейлист, в котором отображается название и\или полный путь, ну и следующий трек для проигрывания. 

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

Это сообщение отредактировал(а) BEST13 - 6.6.2008, 12:00
PM MAIL ICQ GTalk   Вверх
BEST13
Дата 6.6.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 11.4.2008
Где: Ukraine

Репутация: нет
Всего: нет



Вот цыкл проверки но он чёт не работает помогите плиз , и внизу а под редактором кода (там где пишет о ошибках) пишет типа poz никогда не используеться ("Value assigned to'poz' never used')
Вот сам код
Код

var   i,poz,pred:integer; prov,prov2:Boolean;

Код

 begin
       mas[0]:=ListBox1.ItemIndex;
   for i:=ListBox1.Items.Count-1 downto 0  do
    mas[i]:=mas[i-1];

  repeat
   begin
  poz:=0;
  prov:=true;
  prov2:=false;
  poz:=0+random(ListBox1.Items.Count);
   for i:=1 to ListBox1.Items.Count-1 do
    if poz=pred  then
    prov:=false
   else prov2:=true;
   end
  until (prov=true) and (prov2=true);
ListBox1.ItemIndex:=poz;

PM MAIL ICQ GTalk   Вверх
Qu1nt
Дата 6.6.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 2
Всего: 50



Я думаю так будет по-красивее:
Код

function UnSort(List: TStringList; Item1, Item2: Integer): Integer;
begin
  Result := - 1 + Random(3);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i, j : Integer;
begin
  Randomize;
  with TStringList.Create do
  begin
    for i := 0 to ListBox1.Count - 1 do
      Add(ListBox1.Items[i]);
    CustomSort(UnSort);
    for j := 0 to ListBox1.Count - 1 do
      ListBox1.Items[j] := Strings[j];
    Free;
  end;
end;

PM MAIL   Вверх
BEST13
Дата 6.6.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 11.4.2008
Где: Ukraine

Репутация: нет
Всего: нет



Цитата(Qu1nt @ 6.6.2008,  16:46)
Я думаю так будет по-красивее:
Код

function UnSort(List: TStringList; Item1, Item2: Integer): Integer;
begin
  Result := - 1 + Random(3);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i, j : Integer;
begin
  Randomize;
  with TStringList.Create do
  begin
    for i := 0 to ListBox1.Count - 1 do
      Add(ListBox1.Items[i]);
    CustomSort(UnSort);
    for j := 0 to ListBox1.Count - 1 do
      ListBox1.Items[j] := Strings[j];
    Free;
  end;
end;

Ухты йо,спс большое. ток я вот  не понял что она делает ? Я вобше исчо новичок и не могу понять что этот код делает.  
1 непонятность: что такое StringList
2 непонятность:  что такое CustomSort
3 непонятность: как она работает что делает и почему имено так
Зарание спосибо
PM MAIL ICQ GTalk   Вверх
Qu1nt
Дата 6.6.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 2
Всего: 50



1. Класс TStringList - замена массивам из элементов типа string.
2. СustomSort - метод класса TStringList, позволяющий подставлять свои функции сортировки.
3. Заполняем TStringList строками из ListBox1=> сортируем => заполняем ListBox1 уже отсортированными, в случайном порядке, данными.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.