Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Вопрос по Randomize Добавлено: 09.04.06 05:05  

Автор вопроса:  Павел | Web-сайт: www.hono.ru
В VB я далеко еще не гуру, потому у меня есть один вопрос.
Скажите, вот, допустим, у меня есть на форме 3 объекта: Picture1, Picture2, Picture3. Как сдалать так, чтобы в них загружались рисунки случайным образом и порядке???
Ну, к примеру, в Picture1-рисунок 3, Picture2-рис. 1, Picture1 - рис. 2?????

Ответить

  Ответы Всего ответов: 35  

Номер ответа: 1
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #1 Добавлено: 09.04.06 10:08
Вопрос рызмыт. Где у тебя эти "рис. 1", "рис. 2" и "рисунок 3" хранятся? В файлах, в переменных типа StdPicture?

Ответить

Номер ответа: 2
Автор ответа:
 KEP



Вопросов: 44
Ответов: 119
 Профиль | | #2 Добавлено: 09.04.06 10:24
Через Randomize

Ответить

Номер ответа: 3
Автор ответа:
 Nj



ICQ: 223663115 

Вопросов: 21
Ответов: 285
 Профиль | | #3 Добавлено: 09.04.06 16:13
...Form_Load...
Randomize Можно еще по-QB Randomize Timer
....


Я плохо помню, но знаю, что VB поддерживает
QB-фишки.
В школе нас учили задавать число случайное так
A=int(rnd(1)*5)

Я могу ошибаться, у себя не проверял - может кто поправит. В переменную A записано случайное число не то от 0 до 5 , не то от 1 до 5 - я опять же, не помню.
INt - обязательно, т.к. rnd возвращает дробное...
Вообщем пробуй.

Pict1=PictureBank(A) если хранишь изображения в других пикчербоксах, имиджах или еще в каком массиве...

Ответить

Номер ответа: 4
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #4 Добавлено: 09.04.06 16:39
'intMin - минимум
'intMax - максимум
'Возвращает случайное число от intMin до intMax включительно

Call Randomize
A = CInt(Rnd * (intMax - intMin)) + intMin

Повторюсь, см. пост #1

Ответить

Номер ответа: 5
Автор ответа:
 Nj



ICQ: 223663115 

Вопросов: 21
Ответов: 285
 Профиль | | #5 Добавлено: 09.04.06 17:17
Одно ясно точно - для случайной загрузки картинок надо использовать массив с этими рисункам и задавать случайные индексы при помощи описанной выше функции рнд.

Ответить

Номер ответа: 6
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #6 Добавлено: 09.04.06 20:47
и задавать случайные индексы при помощи описанной выше функции рнд.
Ты забыл момент. Еще нужно проверять, не был ли уже использован текущий индекс, ведь может выпасть 2, 2, 1 (т.е. два PictureBox'а будут иметь два одинаковых рисунка, чего, наскока я понял, быть не должно).

Ответить

Номер ответа: 7
Автор ответа:
 Programmer



Вопросов: 71
Ответов: 246
 Профиль | | #7 Добавлено: 09.04.06 21:03
Рнд делается так:
a = rnd * 3
Теперь а может иметь значение от 0 до 3.
Если надо от 1 до 3, тогда:
a = (rnd * 2) + 1

Все просто!

Ответить

Номер ответа: 8
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #8 Добавлено: 10.04.06 15:16
Randomize Timer
Dim rndnum as long
Dim FileArray(2) as String

FileArray(0) = "C:\1.bmp"
FileArray(1) = "C:\2.bmp"
FileArray(2) = "C:\3.bmp"

rndnum = int(rnd*Ubound(FileArray))

Picture1.Picture = LoadPictrure(FileArray(rndnum))

Извыняюсь, не дома, не тестил...

Ответить

Номер ответа: 9
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #9 Добавлено: 10.04.06 15:43
a = rnd * 3
A никогда не будет иметь значение 3, так как округления в VB нет, вместо этого отбрасывается дробная часть.

a = (rnd * 2) + 1
Аналогично.
rndnum = int(rnd*Ubound(FileArray))
Аналогично. Нужно юзать CInt()

Ответить

Номер ответа: 10
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #10 Добавлено: 10.04.06 15:50
Cint - преобразовует значение в переменной к типу Integer
int - отрезает дробную часть.

Ответить

Номер ответа: 11
Автор ответа:
 Nj



ICQ: 223663115 

Вопросов: 21
Ответов: 285
 Профиль | | #11 Добавлено: 10.04.06 22:00
Я вот решил и для себя тоже разобраться с этой функцией - я не притендую на Нобелевскую премию, но возможно сей код будет полезен. Он универсален для создания любых уникальных последовательностей.
Еще нужно проверять, не был ли уже использован текущий индекс, ведь может выпасть 2, 2, 1
Согласен, если такое требуется, то я бы модифицировал код HACKER'а так:

Для трех PictureBox под загрузку и базы из 10 картинок:
Кинем на форму лист с 10 путями к картинкам - PictList.
Рекомендую вместо Pict1, Pict2, Pict3 использовать массив
контролов Pict(0), Pict(1), Pict(2)

Private Sub Form_Load()

Const BaseMaxIndex = 9 ' = PictList.ListCount
Const TargetMaxIndex = 2 '= Pict.UBound

Dim rndNum As Long
Dim UsedIndex(TargetMaxIndex) As String

Randomize Timer

For x = 0 To TargetMaxIndex

ReRND:
rndNum = CInt(Rnd * (BaseMaxIndex))


If x = 0 Then
   UsedIndex(0) = rndNum
Else
   For xx = 0 To x - 1
      If rndNum = UsedIndex(xx) Then
      GoTo ReRND
      Else
      UsedIndex(x) = rndNum
      End If
   Next xx
End If

Pict(x).Picture = LoadPictrure(PictList.List(rndNum))

Next x

End Sub


У меня работает.

Ответить

Номер ответа: 12
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #12 Добавлено: 10.04.06 22:14
Goto не солидно :)

Ответить

Номер ответа: 13
Автор ответа:
 Nj



ICQ: 223663115 

Вопросов: 21
Ответов: 285
 Профиль | | #13 Добавлено: 11.04.06 22:54
Goto не солидно :)
Зато эффективно ;) Предлогай свое, если хочешь.

Ответить

Номер ответа: 14
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #14 Добавлено: 11.04.06 22:57
Зато эффективно

С каких пор? Видать я от жизни отстаю...

Ответить

Номер ответа: 15
Автор ответа:
 Nj



ICQ: 223663115 

Вопросов: 21
Ответов: 285
 Профиль | | #15 Добавлено: 11.04.06 22:59
С тех пор как работает ;))
Предлагай свое, если хочешь. !!!
- я не по-русски пишу?

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам