I am creating a Rock-Paper-Scissors game. I need the code to loop until the player chooses to quit. How can I accomplish this.
Imports System.Random
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Label3.Visible = False
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a As New Random()
Dim b As Integer = a.Next(1, 3)
Dim played As Integer = 0
Dim won As Integer = 0
Dim lost As Integer = 0
Dim draw As Integer = 0
Dim percent As Single = 0.0
If b = 1 Then
Label3.Text = "Rock"
Label3.Visible = True
Select Case ComboBox1.SelectedIndex
Case ComboBox1.SelectedIndex = 1
MsgBox("Draw.")
draw += 1
Case ComboBox1.SelectedIndex = 2
MsgBox("Paper Covers Rock. You win!")
won += 1
Case ComboBox1.SelectedIndex = 3
MsgBox("Rock Crushes Scissors. You lose.")
lost += 1
End Select
ElseIf b = 2 Then
Label3.Text = "Paper"
Label3.Visible = True
Select Case ComboBox1.SelectedIndex
Case ComboBox1.SelectedIndex = 1
MsgBox("Paper Covers Rock. You lose.")
lost += 1
Case ComboBox1.SelectedIndex = 2
MsgBox("Draw.")
draw += 1
Case ComboBox1.SelectedIndex = 3
MsgBox("Scissors Cuts Paper. You win!")
won += 1
End Select
ElseIf b = 3 Then
Label3.Text = "Scissors"
Label3.Visible = True
Select Case ComboBox1.SelectedIndex
Case ComboBox1.SelectedIndex = 1
MsgBox("Rock Crushes Scissors. You win!")
won += 1
Case ComboBox1.SelectedIndex = 2
MsgBox("Scissors Cuts Paper. You lose.")
lost += 1
Case ComboBox1.SelectedIndex = 3
MsgBox("Draw.")
draw += 1
End Select
End If
played += 1
percent = won / played
PlayedText.Text = played.ToString
WonText.Text = won.ToString
LostText.Text = lost.ToString
DrawText.Text = draw.ToString
PercentText.Text = percent.ToString
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.Close()
End Sub
End Class
Your problem has to do with variable scoping. Since you defined the played
, won
, lost
, draw
, & percent
variables within the button click handler, the variables are new each time the button is clicked. You need to move these variables so that they are defined outside of Button1_Click
.
This page on MSDN describes how variable scope works: http://msdn.microsoft.com/en-us/library/1t0wsc67.aspx
Right now those variables are in "procedure scope", but you need to make them "module scope" in order for them to preserve their values across button clicks.