このコードはスタックオーバーフローを生成します。プロシージャがそれ自体を呼び出すことが原因であると認識しています。スタックオーバーフローを回避するにはどうすればよいですか?サブプロシージャを呼び出して新しい乱数を生成するのが最も簡単な方法ですが、オーバーフローが発生します。ランダムに生成された番号はランダムな在庫アイテムを選択し、ifステートメントはその番号(ランダムな在庫アイテム)をデッキ在庫からのそのアイテムの数量と一致させて、1以上であることを確認します。 0の場合、elseはプロシージャを再生して再開し、新しい乱数を生成してプロセスを最初からやり直します。別の手順では、デッキの在庫が完全に空になった場合、廃棄パイルがデッキを補充し、廃棄パイルを空にする機能があります。
どういうわけか乱数発生器を強制できるのだろうか
Number = (DeckGroup(Rnd.Next(0, DeckGroup.Count)).ID)
ゼロの在庫品目DeckGroup(Number).QuantityInteger
に番号を生成しないようにします。そうすることで、関数を思い出す必要さえなくなります。乱数は、同じ構造グループ内の別のブランチによって生成されます。
Private Sub PlayElse()
Dim CardCheckBoxArray() As CheckBox = {CardCheckBox1, CardCheckBox2, CardCheckBox3, CardCheckBox4, CardCheckBox5}
'Reset Number Generator
Number = (DeckGroup(Rnd.Next(0, DeckGroup.Count)).ID)
Dim PlayerQuantitySubtractionInteger As Integer
For PlayerQuantitySubtractionInteger = ChecksDynamicA To ChecksDynamicB
If CardCheckBoxArray(TextBoxInteger).Checked = True And DeckGroup(Number).QuantityInteger > 0 Then
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
CardTypeArray(PlayerQuantitySubtractionInteger) = Player1HandGroup(Number).CardType
CardCheckBoxArray(TextBoxInteger).Text = Player1HandGroup(Number).CardNameString
NumberArray(PlayerQuantitySubtractionInteger) = Number
Else
If CardCheckBoxArray(TextBoxInteger).Checked = True And DeckGroup(Number).QuantityInteger < 0 Then
Call PlayElse()
End If
End If
Next PlayerQuantitySubtractionInteger
End Sub