0

これが理にかなっていることを願っていますが、私はこの「ボード」タイプのゲームを作成しています。ここでは、サイコロと 28 個のラベルがあり、ラベルを小さな正方形にして隣り合わせにしています。

プレーヤーがクリックしたサイコロによって生成された数字に基づいて、ラベルの自動的に点灯する (BackColor を変更する) コードを理解する必要があります。

たとえば、プレイヤーがサイコロをクリックすると数字 (1 ~ 6) が生成され、これが点灯するラベルの数であり、すべてのラベルの BackColor が別の色 (緑など) に変わるまで続きます。

ダイのコード:

 Private Sub imgDie_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles imgDie.Click

    My.Computer.Audio.Play(My.Resources.Dice, AudioPlayMode.Background)

    randomNumber = rand.Next(1, 7)

    If randomNumber = 1 Then
        imgDie.Image = My.Resources.Die_One
    ElseIf randomNumber = 2 Then
        imgDie.Image = My.Resources.Die_Two
    ElseIf randomNumber = 3 Then
        imgDie.Image = My.Resources.Die_Three
    ElseIf randomNumber = 4 Then
        imgDie.Image = My.Resources.Die_Four
    ElseIf randomNumber = 5 Then
        imgDie.Image = My.Resources.Die_Five
    ElseIf randomNumber = 6 Then
        imgDie.Image = My.Resources.Die_Six
    End If

End Sub

では、正しい数のラベル BackColor が変更されていることを確認するにはどうすればよいでしょうか? 関数が必要ですか?また、サイコロが何度もクリックされるとラベルが点灯するので、変更されていないラベルが 28 個のラベルすべての BackColor が変更されるまで点灯するようにするにはどうすればよいですか?

これが意味をなすことを願っていますか?

ラベルの名前は次のとおりです。

lblSquareOne, lblSquareTwo, lblSquareThree right through to lblSquareTwentyeight
4

1 に答える 1

1

このようなものがあなたを始めるかもしれません:

Private Function ToggleLabels(ByVal NumberToDo As Integer) As Boolean
    Dim R As New Random
    Dim n As Integer
    Dim count As Integer = 0
    Dim lbl As Label

    ' in MY app, the labels would all be grouped (ALONE) on a panel
    ' so I could find them easily in its Controls Array
    ' I am also using the Label.Tag property to track it's state
    '   could also go by its BackColor

    ' do until we match the die count passed OR
    ' the new AllLitUp function tells us we are Done
    Do Until (count = NumberToDo) 
        n = R.Next(0, 28)                       ' maxValue is exclusive

        lbl = LabelsPanel.Controls(n)

        ' is this one already Lit?
        If lbl.Tag = "FALSE" Then

            ' change the color
            lbl.BackColor = TheLitColor
            lbl.Tag = "TRUE"                    ' set indicator
            count += 1                          ' increase the count for this round

            ' dont need this here AND in the loop control
            If AllLitUp() Then                   ' check for game over
                Exit Do
            End If

        End If
    Loop

   ' Return T/F is it Game Over
   Return AllLitUp()
End Function

ラベルをループして新しいゲームの色をリセットするときは、必ず.Tag"FALSE" (引用符付き) に設定してください。

ラベルへの参照を保持する LabelItem クラス (New のときにそれ自体を取得できます) とフラグの方が適しています。

次に、別のクラス - LabelItems - を管理します。LabelItems は、そのうちの 28 個を List(Of LabelItem) に格納できます。これにより、個々のラベルの管理が簡単になります (配列をループする必要はありません)。また、新しいゲームのためにクリアする手順、これまでのスコアを取得する手順、スコアリングまたは Beat The Clock のいずれかのタイマーを追加する手順などの「グローバル」なものも管理できます。等

于 2013-09-23T03:36:58.113 に答える