Алгоритм перетасовки в "Угадай мелодию" игра


Я делаю "Угадай мелодию" игра в визуальных основных 6, который должен играть каждую песню в случайном порядке:

' from frmGuessGame.frm
Private Sub Swap(ByRef Value1 As Variant, ByRef Value2 As Variant)
Dim Temporary As Variant
Temporary = Value1
Value1 = Value2
Value2 = Temporary
End Sub

Private Sub ShuffleList()
Dim LoopCtr As Integer, SwapWith As Integer
For LoopCtr = LBound(InnerPlaylist) To UBound(InnerPlaylist)
SwapWith = (Rnd * (UBound(InnerPlaylist) - LBound(InnerPlaylist))) + LBound(InnerPlaylist)
Swap InnerPlaylist(LoopCtr), InnerPlaylist(SwapWith)
Next
End Sub

Моя функция инициализации включает случайном заявление, поэтому он должен быть хорошим, даже пустую.

' from mdiMain.frm
Private Sub MDIForm_Load()
'initialize pseudo-random number generator
Randomize
frmMusiguess.Show
frmSplash.Show
End Sub

Я не уверен, однако, что это лучший способ, чтобы сделать это. Я на правильном пути?



1713
18
задан 20 января 2011 в 12:01 Источник Поделиться
Комментарии
1 ответ

Я бы, наверное, сделать что-то вроде этого:

Я не знал VB, так это псевдо код.

Private Function Shuffle(playlist) as Playlist
{
Dim PlayList as NewPlayList
Dim RandomIndex as Integer

while(playlist has elements)
{
RandomIndex = (Random number between lowerbound and upperbound)

remove song at RemoveIndex from playlist
add removed song to NewPlaylist
}

return NewPlayList
}

Проблема у меня с тем, как вы сделали это, что есть возможность отменить перемешать. Например, предположите, что вы находитесь на индекс 1, а случайное число 2. Нужно поменять местами 1 и 2. Теперь предположим, что вы находитесь на индекс 2 и случайное число 1. Теперь вы просто отстегнул пустую, что вы таблетированная в предыдущей итерации. Кроме того, мне не нравится использование глобальной переменной InnerPlaylist.

5
ответ дан 20 января 2011 в 02:01 Источник Поделиться