我意識到我今天早上從我的結構組陣列中挑選卡片的編碼存在缺陷,這是我轉換爲計算機的桌面卡片遊戲。 目前代碼設置爲隨機挑選特定卡片的陣列,但如果組中的卡片數量爲< 1,則跳過該組。對於我的套牌,這並不是真正的隨機,因爲每張牌都有自己的數量。某些卡片有10張卡片,其他卡片6張,最多4張。我怎樣才能將它編碼到所有這些數量數字的整體中,並從這些數字中挑選一張隨機卡片。真隨機抽取卡,而不是隨機組? visual basic 2010
If GameSize >= 3 Then
For StartHands = 10 To 14
Number = (DeckGroup(Rnd.Next(0, DeckGroup.Count)).ID)
'Cardslots Player3
If CardTypeArray(StartHands) = "" Then
If DeckGroup(Number).QuantityInteger > 0 Then
DeckGroup(Number).QuantityInteger -= 1
Player1HandGroup(Number).QuantityInteger3 += 1
CardTypeArray(StartHands) = Player1HandGroup(Number).CardType
Me.NumberArray(StartHands) = Number
Else
'Recall Procedure if Generated Random Number is not allowed
'due to QuantityInteger <= 0
Call StartButton_Click(sender, e)
End If
End If
Next StartHands
End If
當玩牌和畫一張新牌時,我使用這種編碼方案,以防止計算器堆疊,但是是虛擬的。
Dim temp As IEnumerable(Of LunchMoneyGame.LunchMoneyMainForm.Group) = From r In DeckGroup Where r.QuantityInteger > 0 Select r
If temp IsNot Nothing AndAlso temp.count > 0 Then
Number = (temp(Rnd.Next(0, temp.Count)).ID)
DeckGroup(Number).QuantityInteger -= 1
'Select the Player depending value of T
Select Case T
Case 0
Player1HandGroup(Number).QuantityInteger += 1
Case 1
Player1HandGroup(Number).QuantityInteger2 += 1
Case 2
Player1HandGroup(Number).QuantityInteger3 += 1
Case 3
Player1HandGroup(Number).QuantityInteger4 += 1
Case 4
Player1HandGroup(Number).QuantityInteger5 += 1
End Select
編輯: 改進的問題: 如何我大概畫卡重量的基礎上如何一個特定的卡中有多少人留在每張卡的甲板數量的整數?
甲板大小有限,足以允許用單張卡片填充列表。然後它是微不足道的,只需使用[Fisher-Yates shuffle](http://stackoverflow.com/a/8108702/17034)。 –
我的套牌有106張牌,大多數牌都有一張牌的數量。 –