私のプログラムはランダムに作業をやめることにしました。エラーメッセージはありません。何も起こらずにプレイボタンを押すだけです。カードの概要を確認すると、対応するプレーヤーのQuantityIntegerがカードを引き、パイルを破棄するために追加しましたが、新しいカードを手に追加しませんでした。ただし、ランダムな間隔で機能するか機能しないため、これは完全にランダムです。
Tは私のコードの心臓部のようなものです。現在、私は2人用モードでのみ実装しています。T = 0の場合、プレーヤー1のコードを実行し、T = 1の場合、プレーヤー2のコードを実行します。
ChecksDynamicは、Forループの範囲を表します。これらの数値は、アレイ内でそのプレーヤーが見つけた有効な数値を表しているためです。
攻撃ダイアログは、攻撃することを決定したプレイヤーを表します(自分自身を攻撃することはできないため、2プレイヤーモードでは1人しか攻撃できません)。
Tはまた、さまざまなプレーヤーの数量整数をユースケースに配置します。ユースケースの出力変数=playerTの特定の値に割り当てます。
次に、ユースケースを使用してすべてのプレーヤーカードを変換し、特定のプレーヤーに対してチェックされているチェックボックスのコードを動的にします。
次に、Ifステートメントは、チェックボックスがオンになっているかどうかを確認し、右側のプレーヤー(選択したケースのSelectPlayer)の数量整数が選択されます。
次に、カードのダメージ値に基づいてヒットポイントが差し引かれます。
カードが武器である場合、プレイヤーはカードを保持するか破棄するかを選択できます。破棄しない場合は、ヒットポイント以外の変更はありません。
GrabFromDeckandDiscardプロシージャでは、TをSelect Caseで再度使用して、正しいプレーヤーのアイテムインベントリからサブラクトします。
次に、対応するカードを廃棄パイルに追加します
次に、デッキグループの数量整数で使用可能なカードをランダムに選択する関数を実行します。もう一度セレクトケースを実行して、ランダムに生成された番号から対応するプレイヤーのインベントリにニーズカードを追加します。
次に、最後の主要な部分は、Tを次の値に切り替えることです。テストの目的で、フォームにランダムなラベルを付け、それを使用してTの値を確認します。Tは、私が言えることから失敗しているようには見えません。
Private Sub PlayButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PlayButton.Click
Dim CardCheckBoxArray() As CheckBox = {CardCheckBox1, CardCheckBox2, CardCheckBox3, CardCheckBox4, CardCheckBox5}
Dim HitPoints() As Label = {Nothing, HitPoints1, HitPoints2, HitPoints3, HitPoints4, HitPoints5}
Dim n, SelectPlayer As Integer
Label1.Text = T.ToString
'Player 1
If T = 0 And (CardCheckBoxArray(0).Checked = True Or CardCheckBoxArray(1).Checked = True Or CardCheckBoxArray(2).Checked = True Or CardCheckBoxArray(3).Checked = True Or CardCheckBoxArray(4).Checked = True) Then
AtkPlayerDialog.Player1.Enabled = False
AtkPlayerDialog.Player2.Enabled = True
AtkPlayerDialog.Player3.Enabled = True
AtkPlayerDialog.Player4.Enabled = True
AtkPlayerDialog.Player5.Enabled = True
ChecksDynamicA = 0
ChecksDynamicB = 4
'Player 2
ElseIf T = 1 And (CardCheckBoxArray(0).Checked = True Or CardCheckBoxArray(1).Checked = True Or CardCheckBoxArray(2).Checked = True Or CardCheckBoxArray(3).Checked = True Or CardCheckBoxArray(4).Checked = True) Then
AtkPlayerDialog.Player1.Enabled = True
AtkPlayerDialog.Player2.Enabled = False
AtkPlayerDialog.Player3.Enabled = True
AtkPlayerDialog.Player4.Enabled = True
AtkPlayerDialog.Player5.Enabled = True
ChecksDynamicA = 5
ChecksDynamicB = 9
'Player 3
ElseIf T = 2 And (CardCheckBoxArray(0).Checked = True Or CardCheckBoxArray(1).Checked = True Or CardCheckBoxArray(2).Checked = True Or CardCheckBoxArray(3).Checked = True Or CardCheckBoxArray(4).Checked = True) Then
AtkPlayerDialog.Player1.Enabled = True
AtkPlayerDialog.Player2.Enabled = True
AtkPlayerDialog.Player3.Enabled = False
AtkPlayerDialog.Player4.Enabled = True
AtkPlayerDialog.Player5.Enabled = True
ChecksDynamicA = 10
ChecksDynamicB = 14
'Player 4
ElseIf T = 3 And (CardCheckBoxArray(0).Checked = True Or CardCheckBoxArray(1).Checked = True Or CardCheckBoxArray(2).Checked = True Or CardCheckBoxArray(3).Checked = True Or CardCheckBoxArray(4).Checked = True) Then
AtkPlayerDialog.Player1.Enabled = True
AtkPlayerDialog.Player2.Enabled = True
AtkPlayerDialog.Player3.Enabled = True
AtkPlayerDialog.Player4.Enabled = False
AtkPlayerDialog.Player5.Enabled = True
ChecksDynamicA = 15
ChecksDynamicB = 19
'Player 5
ElseIf T = 4 And (CardCheckBoxArray(0).Checked = True Or CardCheckBoxArray(1).Checked = True Or CardCheckBoxArray(2).Checked = True Or CardCheckBoxArray(3).Checked = True Or CardCheckBoxArray(4).Checked = True) Then
AtkPlayerDialog.Player1.Enabled = True
AtkPlayerDialog.Player2.Enabled = True
AtkPlayerDialog.Player3.Enabled = True
AtkPlayerDialog.Player4.Enabled = True
AtkPlayerDialog.Player5.Enabled = False
ChecksDynamicA = 20
ChecksDynamicB = 24
End If
'Code for choosing which player to attack
AtkPlayerDialog.ShowDialog()
If AtkPlayerDialog.DialogResult = 1 Then
n = 1
ElseIf AtkPlayerDialog.DialogResult = 2 Then
n = 2
ElseIf AtkPlayerDialog.DialogResult = 3 Then
n = 3
ElseIf AtkPlayerDialog.DialogResult = 4 Then
n = 4
ElseIf AtkPlayerDialog.DialogResult = 5 Then
n = 5
End If
'CheckedLoop
For Me.Checks = ChecksDynamicA To ChecksDynamicB
'Supplement Numbers(1-5) variable in loop
NumberChecks = NumberArray(Checks)
'Select the Player
Select Case T
Case 0
SelectPlayer = Player1HandGroup(NumberChecks).QuantityInteger
Case 1
SelectPlayer = Player1HandGroup(NumberChecks).QuantityInteger2
Case 2
SelectPlayer = Player1HandGroup(NumberChecks).QuantityInteger3
Case 3
SelectPlayer = Player1HandGroup(NumberChecks).QuantityInteger4
Case 4
SelectPlayer = Player1HandGroup(NumberChecks).QuantityInteger5
End Select
'Convert arrays to correct textboxes
Select Case Checks
Case 0, 5, 10, 15, 20
TextBoxInteger = 0
Case 1, 6, 11, 16, 21
TextBoxInteger = 1
Case 2, 7, 12, 17, 22
TextBoxInteger = 2
Case 3, 8, 13, 18, 23
TextBoxInteger = 3
Case 4, 9, 14, 19, 24
TextBoxInteger = 4
End Select
'Play Card(s)
If CardCheckBoxArray(TextBoxInteger).Checked = True AndAlso SelectPlayer > 0 Then
'Subtract Hitpoints when damage is delt
Player1HandGroup(n).HitPoints -= Player1HandGroup(NumberChecks).DamageInteger
HitPoints(n).Text = Player1HandGroup(n).HitPoints.ToString
'When player plays hand, card quantity is removed from hand to the discard pile.
If Player1HandGroup(NumberChecks).CardType = "Weapon" Then
DiscardDialog.ShowDialog()
'Choose if to Discard Weapon after usage
If DiscardDialog.DialogResult = Windows.Forms.DialogResult.OK Then
Call GrabFromDeckAndDiscard()
End If
Else
Call GrabFromDeckAndDiscard()
End If
End If
ChecksLabel.Text = Checks.ToString
Next
Dim CardCheckBoxInteger As Integer
'Clear Check Boxes when turn is finished
For CardCheckBoxInteger = 0 To 4
CardCheckBoxArray(CardCheckBoxInteger).Checked = False
Next
'Turn off play button
PlayButton.Enabled = False
End Sub
Private Sub GrabFromDeckAndDiscard()
'ReDeclare CheckBox Array for Private sub
Dim n As Integer
Dim CardCheckBoxArray() As CheckBox = {CardCheckBox1, CardCheckBox2, CardCheckBox3, CardCheckBox4, CardCheckBox5}
'Discard
Select Case T
Case 0
Player1HandGroup(NumberChecks).QuantityInteger -= 1
Case 1
Player1HandGroup(NumberChecks).QuantityInteger2 -= 1
Case 2
Player1HandGroup(NumberChecks).QuantityInteger3 -= 1
Case 3
Player1HandGroup(NumberChecks).QuantityInteger4 -= 1
Case 4
Player1HandGroup(NumberChecks).QuantityInteger5 -= 1
End Select
'Add Card to Discard Pile
DiscardGroup(NumberChecks).QuantityInteger += 1
'Shuffle Deck from Discard Pile if Deck is out of cards
Call DiscardPile()
'Reset Number Generator, unless weapon isn't discard
Dim validDeckGroupsIndexes As New List(Of Integer)
For ndx As Integer = 0 To (DeckGroup.Count - 1)
If DeckGroup(ndx).QuantityInteger > 0 Then
validDeckGroupsIndexes.Add(ndx)
End If
Next ndx
Dim deckGroupNdx As Integer = Rnd.Next(0, validDeckGroupsIndexes.Count)
Number = DeckGroup(deckGroupNdx).ID
If DeckGroup(Number).QuantityInteger > 0 Then
'Grab New Card From Deck
DeckGroup(Number).QuantityInteger -= 1
Select Case T
Case 0
Player1HandGroup(NumberChecks).QuantityInteger += 1
Case 1
Player1HandGroup(NumberChecks).QuantityInteger2 += 1
Case 2
Player1HandGroup(NumberChecks).QuantityInteger3 += 1
Case 3
Player1HandGroup(NumberChecks).QuantityInteger4 += 1
Case 4
Player1HandGroup(NumberChecks).QuantityInteger5 += 1
End Select
' assign card type to chosen card and assign "number" to corresponding cards number as well
CardTypeArray(Checks) = Player1HandGroup(Number).CardType
NumberArray(Checks) = Number
End If
'Switch to next player
Select Case T
Case 0
For CardCheckBoxInteger = 0 To 4
Select Case CardCheckBoxInteger
Case 0
n = 5
Case 1
n = 6
Case 2
n = 7
Case 3
n = 8
Case 4
n = 9
End Select
CardCheckBoxArray(CardCheckBoxInteger).Text = Player1HandGroup(NumberArray(n)).CardNameString
Next
T += 1
Case 1
If GameSize = 2 Then
For CardCheckBoxInteger = 0 To 4
CardCheckBoxArray(CardCheckBoxInteger).Text = Player1HandGroup(NumberArray(CardCheckBoxInteger)).CardNameString
Next CardCheckBoxInteger
T -= 1
End If
If GameSize > 2 Then
T += 1
End If
Case 2
Case 3
Case 4
End Select
Label1.Text = T.ToString
End Sub