1

ここに私のコードの一部があります。これは、3 つのサイコロがすべて同じかどうかをチェックするサイコロ ゲームです。ユーザーは 3 つのいずれかを押したり離したりでき、サイコロはタイマーを使用してロールします。それらがすべて同じ場合、ポイントは 1 上がります。問題は、ロール ボタンを再度押すまでラベルが更新されないことです。3 つのサイコロの数字が同じになるとすぐにラベルが 1 上がるようにするにはどうすればよいですか?

すべてのコードで編集

Dim randomObject As New Random()
Dim n, m, o, p As Integer
Dim RollNumber = 1
Dim TurnNumber As Integer
Dim Points = 0
Dim Restart As Boolean = True


Private Sub btnRoll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRoll.Click


    If btnHold.Enabled = True Then
        Timer1.Enabled = True
    End If
    If btnHold2.Enabled = True Then
        Timer2.Enabled = True
    End If
    If btnHold3.Enabled = True Then
        Timer3.Enabled = True
    End If

    TurnNumber += 1
    lblTurns.Text = TurnNumber

    If TurnNumber = 3 Then
        RollNumber += 1
        TurnNumber = 0
    End If

    lblRolls.Text = RollNumber


    If Not Restart Then
        If (lblDice.Text = lblDice2.Text) And (lblDice2.Text = lblDice3.Text) Then
            Points += 1

        End If
        lblPoints.Text = Points
    End If
    Restart = False






End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    m = m + 1
    If m < 10 Then
        n = randomObject.Next(1, 7)
        lblDice.Text = n
        die1PictureBox.Image = ImageList1.Images(n - 1)
    Else
        Timer1.Enabled = False
        m = 0
    End If
End Sub

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    m = m + 1
    If m < 10 Then
        n = randomObject.Next(1, 7)
        lblDice2.Text = n
        die2PictureBox.Image = ImageList1.Images(n - 1)
    Else
        Timer2.Enabled = False
        m = 0
    End If
End Sub

Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
    m = m + 1
    If m < 10 Then
        n = randomObject.Next(1, 7)
        lblDice3.Text = n
        die3PictureBox.Image = ImageList1.Images(n - 1)
    Else
        Timer3.Enabled = False
        m = 0
    End If
End Sub

Private Sub btnHold_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHold.Click
    btnHold.Enabled = False
    btnUnhold.Enabled = True
End Sub

Private Sub btnUnhold_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUnhold.Click
    btnHold.Enabled = True
    btnUnhold.Enabled = False
End Sub

Private Sub btnHold2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHold2.Click
    btnHold2.Enabled = False
    btnUnhold2.Enabled = True
End Sub

Private Sub btnUnhold2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUnhold2.Click
    btnHold2.Enabled = True
    btnUnhold2.Enabled = False
End Sub

Private Sub btnHold3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHold3.Click
    btnHold3.Enabled = False
    btnUnhold3.Enabled = True
End Sub

Private Sub btnUnhold3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUnhold3.Click
    btnHold3.Enabled = True
    btnUnhold3.Enabled = False
End Sub

Private Sub btnRestart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRestart.Click
    Dim msg As String
    Dim title As String
    Dim style As MsgBoxStyle
    Dim response As MsgBoxResult
    msg = "Are you sure you want to start a new game? If not, you can select 'No' to continue with your current game."
    style = MsgBoxStyle.DefaultButton2 Or _
       MsgBoxStyle.Critical Or MsgBoxStyle.YesNo
    title = "New Game"

    response = MsgBox(msg, style, title)
    If response = MsgBoxResult.Yes Then
        Reset()

    End If

    Restart = True

End Sub


Private Sub ColorChangeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ColorChangeToolStripMenuItem.Click

    'Notice the ... in the menu...that means a dialog box will come

    Dim dialog As New ColorDialog   ' Color Dialog
    Dim result As DialogResult ' stores Button clicked

    dialog.FullOpen = True ' show all colors
    result = dialog.ShowDialog

    ' do nothing if user clicked dialog's Cancel Button
    If result <> Windows.Forms.DialogResult.Cancel Then
        ' assign new color to Paint object
        Label1.ForeColor = dialog.Color
    End If


End Sub

Private Sub FontChangeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FontChangeToolStripMenuItem.Click
    'Notice the ... in the menu...that means a dialog box will come

    Dim dialog As New FontDialog   ' Font Dialog
    Dim result As DialogResult ' stores Button clicked

    ' show dialog and get result
    result = dialog.ShowDialog()

    ' do nothing if user clicked dialog's Cancel Button
    If result <> Windows.Forms.DialogResult.Cancel Then
        ' assign new font value to TextBox
        If Windows.Forms.DialogResult.OK = MessageBox.Show("Changing Font. Click Ok to Change,\n Cancel for no change to occur.", _
                                 "Warning", MessageBoxButtons.OKCancel) Then
            Label1.Font = dialog.Font
        End If


    End If


End Sub

Private Sub SelectAColorToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SelectAColorToolStripMenuItem.Click

    Dim dialog As New ColorDialog   ' Color Dialog
    Dim result As DialogResult ' stores Button clicked

    dialog.FullOpen = True ' show all colors
    result = dialog.ShowDialog()

    ' do nothing if user clicked dialog's Cancel Button
    If result <> Windows.Forms.DialogResult.Cancel Then
        Me.BackColor = dialog.Color
    End If

End Sub

Private Sub SelectAnImageToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SelectAnImageToolStripMenuItem.Click
    Dim msg As String
    Dim title As String
    Dim style As MsgBoxStyle
    Dim response As MsgBoxResult
    msg = "Are you sure you want to see what happens when you get a perfect score without actually playing? That's cheating.. and will reset the game!"
    style = MsgBoxStyle.DefaultButton2 Or _
       MsgBoxStyle.Critical Or MsgBoxStyle.YesNo
    title = "New Game"

    response = MsgBox(msg, style, title)
    If response = MsgBoxResult.Yes Then
        Dim FileChooser As New OpenFileDialog()
        Dim result As DialogResult

        result = DialogResult = FileChooser.ShowDialog()

        If result <> Windows.Forms.DialogResult.Cancel Then
            If FileChooser.FileName <> "" Then
                Me.BackgroundImage = System.Drawing.Image.FromFile(FileChooser.FileName)
                Reset()
            Else
                MessageBox.Show("No Change Made. File Not Selected!", "Warning", _
                                System.Windows.Forms.MessageBoxButtons.OK, _
                                System.Windows.Forms.MessageBoxIcon.Exclamation)
            End If
        End If
    End If

End Sub

Private Sub btnHow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHow.Click
    MessageBox.Show(" You will have 5 rolls.  In each roll you have up to 3 turns. Your object in each of the turns is to get three of a kind on the dice.  You can hold some die and roll only some of the die, or you can reroll all the dice.  If in a turn you get three of a kind, you get a point.  At the end of 5 turns you could have a maximum of 5 points and you will get a special prize.")
End Sub

Sub Reset()
    RollNumber = 1
    lblRolls.Text = RollNumber
    TurnNumber = 0
    lblTurns.Text = TurnNumber
    Points = 0
    lblPoints.Text = Points
    lblPoints2.Text = ""

    btnRoll.Enabled = True
    btnHold.Enabled = True
    btnHold2.Enabled = True
    btnHold3.Enabled = True
    btnUnhold.Enabled = False
    btnUnhold2.Enabled = False
    btnUnhold3.Enabled = False

    die1PictureBox.Image = Nothing
    die2PictureBox.Image = Nothing
    die3PictureBox.Image = Nothing
    lblDice.Text = ""
    lblDice2.Text = ""
    lblDice3.Text = ""

End Sub

Private Sub btnTriple_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTriple.Click
    Points += 1
    lblPoints.Text = Points

    btnTriple.Visible = False
End Sub

クラス終了

4

3 に答える 3

0

lblRolls.Text を設定した後、DoEvents を呼び出してみてください。

....

lblRolls.Text = RollNumber
Application.DoEvents()

....

編集

Private Sub SetTimers(Enable As Boolean)
    Timer1.Enabled = Enable
    Timer2.Enabled = Enable
    Timer3.Enabled = Enable
End Sub

''''
SetTImers(True)
....

If TurnNumber = 3 Then
    RollNumber += 1
    TurnNumber = 0
    SetTimers(False)
    Application.DoEvents()
    lblRolls.Text = RollNumber        
    Application.DoEvents()
    SetTimers(True)
Else
    lblRolls.Text = RollNumber
End If

....
于 2013-03-21T00:14:53.503 に答える
0

if の末尾のラベル行を下に移動し、それが役立つかどうかを確認します。ポイントを増やしている場所がわからないので、わかりにくいです。

If (lblDice.Text = lblDice2.Text) And (lblDice2.Text = lblDice3.Text) Then
    btnTriple.Visible = True
End If

または、現在の場所ではなく、restart=false 行の前に配置することもできます。

lblPoints.Text = Points
Restart = False
于 2013-03-21T00:24:55.163 に答える