3
我寫了下面的代碼來構建一個基本的遊戲,使兩輛賽車(randomgenerator),並讓用戶選擇他們對最終結果的賭注。我在某個地方犯了一個錯誤,我的賽車只是半路賽跑,然後卡在起跑線後面,程序不停地重複嗶嗶聲和messsagebox.show,並將結果添加到「錯誤」框中。我花了三天的時間試圖找出我出錯的地方,我只是想念它。感謝您花時間看這個。我非常感謝任何建議。VB.net計時器滴答事件問題
終止應用程序的唯一方法是點擊「停止調試」。
Option Explicit On
Option Strict On
Public Class MainForm
Private Sub exitButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles exitButton.Click
Me.Close()
End Sub
Private Sub MainForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'fills the list box with items, then selects the first item
resultListBox.Items.Add("No guess")
resultListBox.Items.Add("Tie")
resultListBox.Items.Add("Red Car wins")
resultListBox.Items.Add("White car wins")
resultListBox.SelectedIndex = 0
End Sub
Private Sub startButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles startButton.Click
raceTimer.Enabled = True
End Sub
Private Sub raceTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles raceTimer.Tick
' moves two cars from a starting line to a finish line on the form
' displays a message indicating the race results
' calculates and displays the number of times the user selects the
' correct race result from the resultlistbox, and the number
' of times the user selects an incorrect race result
Dim randomgenerator As New Random
Dim whitenewlocation As Integer
Dim rednewlocation As Integer
Dim raceresult As String
Dim userchoice As String
Dim finishline As Integer = finishTextBox.Left + 1
Static numbercorrect As Integer
Static numberincorrect As Integer
' save the user's list box selection, then disable the list box
userchoice = resultListBox.SelectedItem.ToString
resultListBox.Enabled = False
'calculate the new location of each picture box's right border
' don't allow the right border to go beyond the finish line
whitenewlocation = whitePictureBox.Right + randomgenerator.Next(0, 11)
If whitenewlocation > finishline Then
whitenewlocation = finishline
End If
rednewlocation = redPictureBox.Right + randomgenerator.Next(0, 11)
If rednewlocation > finishline Then
rednewlocation = finishline
End If
'move each picture box toward the finish line
whitePictureBox.SetBounds(whitenewlocation - whitePictureBox.Width, 0, 0, 0, BoundsSpecified.X)
redPictureBox.SetBounds(rednewlocation - redPictureBox.Width, 0, 0, 0, BoundsSpecified.X)
'the following selection structure is processed only when at least
' one of the picture boxes is at the finish line
If whitePictureBox.Right = finishline _
OrElse redPictureBox.Right = finishline Then
'disable the timer
raceTimer.Enabled = False
End If
'sound a beep to indicate the end of the race
For x As Integer = 1 To 5
Console.Beep(100, 100)
Next x
'store the result of the race in a variable
If whitenewlocation = rednewlocation Then
raceresult = "Tie"
ElseIf whitenewlocation > rednewlocation Then
raceresult = "White car wins"
Else
raceresult = "red car wins"
End If
'display the race results
MessageBox.Show("Race Over!" & ControlChars.NewLine & raceresult, _
"Car Race", MessageBoxButtons.OK, MessageBoxIcon.Information)
'move the picture boxes back to the starting line
whitePictureBox.SetBounds(12, 0, 0, 0, BoundsSpecified.X)
redPictureBox.SetBounds(12, 0, 0, 0, BoundsSpecified.X)
'if the user did not want to guess the race results, then
'don't update or display the counter values; otherwise,
'compare the race results to the user's selection and update
' the appropriate counter, then display both counter values
If userchoice <> "no guess" Then
If raceresult = userchoice Then
numbercorrect = numbercorrect + 1
Else
numberincorrect = numberincorrect + 1
End If
correctLabel.Text = Convert.ToString(numbercorrect)
incorrectLabel.Text = Convert.ToString(numberincorrect)
End If
'enable the list box
resultListBox.Enabled = True
End Sub
End Class
沒辦法!非常感謝。我非常關注邏輯錯誤,所以我完全忽略了決策結構!這對我來說是一個巨大的學習曲線。非常感謝Stefan! – Wannabe 2011-03-17 10:41:17