不能使用Application.Restart()
與您的代碼的問題是這樣的:
Dim answer As DialogResult
MessageBox.Show("Would You Like To Play Again?", " Confirmation of Quit", MessageBoxButtons.YesNo)
If answer = vbYes Then
你永遠分配MessageBox
結果你answer
變量。試試這個:
Dim answer As DialogResult = MessageBox.Show("Would You Like To Play Again?", " Confirmation of Quit", MessageBoxButtons.YesNo)
If answer = vbYes Then
至於重置您的變量。
您有兩種選擇。首先,您正在嘗試執行手動重置它們。簡化的東西可以讓你使用初始化了一個方法裏面你的遊戲,始終都調用該方法啓動或重新啓動遊戲:
Sub InitGame()
lstNumberGuess.Items.Clear()
lblTotalCount.Text = String.Empty
lblAnswer.Text = String.Empty
txtUserGuess.Text = String.Empty
lblAnswer.BackColor = Color.FromKnownColor(KnownColor.Control)
shrtCounterTotal = 0
shrtSecret = shrtRandom.Next(1, 100)
'Set Focus Back to textbox
txtUserGuess.Select()
End Sub
所以重新啓動:
Sub DisplayPlayAgain()
'Disable Button That Allows User To Continue Play
cmdGuess.Enabled = False
'Display A Button Asking User To Play Again
Dim answer As DialogResult = MessageBox.Show("Would You Like To Play Again?", " Confirmation of Quit", MessageBoxButtons.YesNo)
If answer = vbYes Then
InitGame()
Else
'Or if No is selected, return to the form
End If
End Sub
你的另一種選擇是在自己的課堂上定義你的遊戲,並且每次你想要開始或重新開始遊戲時,只需創建一個新的課程實例。
例如,您可以將您的遊戲移動到自己的控件中,併爲遊戲完成時連接事件。父控制可以決定創建一個新遊戲,創建一個新的控件實例並加載它。
事情是這樣的:
Public Class GameFinishedArgs
Inherits EventArgs
Public PlayAgain As Boolean
Public Sub New(PlayAgain As Boolean)
Me.PlayAgain = PlayAgain
End Sub
End Class
Public Class Game
Inherits Control
Public Event GameFinished As EventHandler
Public Sub New()
lstNumberGuess.Items.Clear()
lblTotalCount.Text = String.Empty
lblAnswer.Text = String.Empty
txtUserGuess.Text = String.Empty
lblAnswer.BackColor = Color.FromKnownColor(KnownColor.Control)
shrtCounterTotal = 0
shrtSecret = shrtRandom.Next(1, 100)
End Sub
Public Sub Game_Load(Sender As Object, E As EventArgs) Handles MyBase.load
StartGame()
End Sub
Sub DisplayPlayAgain()
'Disable Button That Allows User To Continue Play
cmdGuess.Enabled = False
'Display A Button Asking User To Play Again
Dim answer As DialogResult
answer = MessageBox.Show("Would You Like To Play Again?", " Confirmation of Quit", MessageBoxButtons.YesNo)
RaiseEvent GameFinished(Me, New GameFinishedArgs(answer = vbYes))
End Sub
End Class
Public Class Form1
Inherits System.Windows.Forms.Form
Public Sub Form1_Load(Sender As Object, E As EventArgs) Handles MyBase.Load
LoadGame()
End Sub
Public Sub LoadGame()
Dim GameControl As New Game()
AddHandler GameControl.GameFinished, New EventHandler(AddressOf OnGameFinished)
GameControl.Top = 0
GameControl.Left = 0
GameControl.Anchor = AnchorStyles.Left Or AnchorStyles.Top Or AnchorStyles.Right Or AnchorStyles.Bottom
GameControl.Dock = DockStyle.Fill
Me.Controls.Add(GameControl)
End Sub
Public Sub OnGameFinished(Sender As Object, E As GameFinishedArgs)
Dim GameControl As Game = Sender
RemoveHandler GameControl.GameFinished, New EventHandler(AddressOf OnGameFinished)
If (E.PlayAgain) Then
LoadGame()
End If
End Sub
End Class
未重置變量返回到起始狀態就夠了嗎?究竟是什麼問題? –
沒有什麼魔法可以做。如果您希望將字段設置爲特定值,請將其設置爲特定值。就是這樣,就是這樣。唯一的另一種方法是將所有這些字段放入一個類中,以便在需要默認值時創建一個新實例。 – jmcilhinney
如果您重新啓動應用程序,重置變量將不起作用,因爲重新啓動時會再次發生。我假設你需要重新啓動你的應用程序啓動邏輯中的遊戲初始化邏輯。我會推薦的是從一個你可以從你的啓動邏輯和再次播放邏輯調用的方法中獲得這種方法,然後你不需要調用'Application.Restart()' – Fabulous