-2

私のプログラムはランダムに作業をやめることにしました。エラーメッセージはありません。何も起こらずにプレイボタンを押すだけです。カードの概要を確認すると、対応するプレーヤーの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
4

1 に答える 1

0

コードをクリーンアップすると、解決策を見つけやすくなると思います。たとえば、ここでは、ざっと見ただけで少なくとも20行が削除されています。

    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 CardCheckBoxArray(0).Checked Or CardCheckBoxArray(1).Checked Or CardCheckBoxArray(2).Checked Or CardCheckBoxArray(3).Checked Or CardCheckBoxArray(4).Checked Then
            AtkPlayerDialog.Player1.Enabled = Not (0=T)
            AtkPlayerDialog.Player2.Enabled = Not (1=T)
            AtkPlayerDialog.Player3.Enabled = Not (2=T)
            AtkPlayerDialog.Player4.Enabled = Not (3=T)
            AtkPlayerDialog.Player5.Enabled = Not (4=T)
            ChecksDynamicA = 5 * T
            ChecksDynamicB = 5 * T + 4
        End If
        'Code for choosing which player to attack
        AtkPlayerDialog.ShowDialog()
        n = AtkPlayerDialog.DialogResult
        '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
            TextBoxInteger = Checks Mod 5
            'Play Card(s)
            If CardCheckBoxArray(TextBoxInteger).Checked 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.Equals("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

そしてこれ!

            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

に変わる:

            For CardCheckBoxInteger = 0 To 4
                CardCheckBoxArray(CardCheckBoxInteger).Text = Player1HandGroup(NumberArray(CardCheckBoxInteger+5)).CardNameString
            Next
于 2013-03-26T17:24:44.087 に答える