我刚刚使我的卡片选择动态化,而不是 5 个 if/elseif 语句的序列。
Private Sub PlayElse()
Dim StartHeads As Integer
Dim CardCheckBoxArray() As CheckBox = {CardCheckBox1, CardCheckBox2, CardCheckBox3, CardCheckBox4, CardCheckBox5, CardCheckBox6, CardCheckBox7, CardCheckBox8, CardCheckBox9, _
CardCheckBox10, CardCheckBox11, CardCheckBox12, CardCheckBox13, CardCheckBox14, CardCheckBox15, CardCheckBox16, CardCheckBox17, _
CardCheckBox18, CardCheckBox19, CardCheckBox20, CardCheckBox21, CardCheckBox22, CardCheckBox23, CardCheckBox24, CardCheckBox25}
'Reset Number Generator
Number = (DeckGroup(Rnd.Next(0, DeckGroup.Count)).ID)
'card 1-5
For StartHeads = 0 To 4
If CardCheckBoxArray(StartHeads).Checked = True And DeckGroup(Number).QuantityInteger > 0 Then
'Grab New Card From Deck
DeckGroup(Number).QuantityInteger -= 1
Player1HandGroup(Number).QuantityInteger += 1
CardTypeArray(StartHeads) = Player1HandGroup(Number).CardType
CardCheckBoxArray(StartHeads).Text = Player1HandGroup(Number).CardNameString
NumberArray(StartHeads) = Number
Else
Call PlayElse()
End If
这是我的原始代码(注意有一个 End If。我只是不想通过卡片 2-5 重复代码)
If CardCheckBox1.Checked = True And DeckGroup(Number).QuantityInteger > 0 Then
'Grab New Card From Deck
DeckGroup(Number).QuantityInteger -= 1
Player1HandGroup(Number).QuantityInteger += 1
CardTypeArray(0) = Player1HandGroup(Number).CardType
CardCheckBox1.Text = Player1HandGroup(Number).CardNameString
NumberArray(0) = Number
什么都没有真正改变,除了任何带有 0 的点都没有由循环中的相应数字表示。我的项目中有几个与此类似的循环,但不知何故,这是一个获得 stackoverflow 异常的循环。CardCheckBoxArray 中的 CardCheckBoxes 最多为 25,因为游戏中有 5 个玩家。在此特定语句中,任何超过 6 的 CardCheckBox 都不会被访问,因为此逻辑仅代表玩家 1 的牌。(忘记提及错误发生时,继续按钮会导致子过程的顶部,突出显示Private Sub Playelse()
。)