I am creating a random number guessing game. I have 6 options. 3 Game playing levels and 3 timer levels.

I have my form display with 6 radio buttons:
radRookie
radVeteran
radPro

radThirty
radFourtyFive
radSixty

You select your level and time.

Then you have a text box to enter your guess, then click guess.

I want to display an image above or below the text box to guess higher or guess lower.
I can get the images hidden until button click, but only one image displays and doesn't work properly.

I also cannot get the darn timer to work and count down while guessing. Any help please!?!

Public Class Form1

    Dim intGuess As Integer
    Dim aRandom As New Random
    Dim holdNumber As Integer
    Dim timercount As Integer

    Private Sub radRookie_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles radRookie.CheckedChanged
        holdNumber = aRandom.Next(0, 10)
    End Sub

    Private Sub radVeteran_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles radVeteran.CheckedChanged
        holdNumber = aRandom.Next(0, 100)
    End Sub

    Private Sub radPro_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles radPro.CheckedChanged
        holdNumber = aRandom.Next(0, 1000)
    End Sub

    Private Sub btnGuess_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuess.Click

        If Integer.TryParse(txtNumber.Text, intGuess) Then
            If intGuess > -1 Then
                If radRookie.Checked = True Then
                    If txtNumber.Text = holdNumber Then
                        imgHigher.Visible = False
                        imgLower.Visible = False
                        MessageBox.Show("You Win! The Number was " & holdNumber)
                    ElseIf txtNumber.Text < holdNumber Then
                        imgHigher.Visible = True
                    ElseIf txtNumber.Text > holdNumber Then
                        imgHigher.Visible = True
                    End If


                ElseIf radVeteran.Checked = True Then
                    If txtNumber.Text = holdNumber Then
                        imgHigher.Visible = False
                        imgLower.Visible = False
                        MessageBox.Show("You Win! The Number was " & holdNumber)
                    ElseIf txtNumber.Text < holdNumber Then
                        imgHigher.Visible = True
                    ElseIf txtNumber.Text > holdNumber Then
                        imgHigher.Visible = True
                    End If


                ElseIf radPro.Checked = True Then
                    If txtNumber.Text = holdNumber Then
                        imgHigher.Visible = False
                        imgLower.Visible = False
                        MessageBox.Show("You Win! The Number was " & holdNumber)
                    ElseIf txtNumber.Text < holdNumber Then
                        imgHigher.Visible = True
                    ElseIf txtNumber.Text > holdNumber Then
                        imgHigher.Visible = True
                    End If
                End If
            Else
                MessageBox.Show("Must enter a Valid Guess!")
            End If
        End If
    End Sub


    Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click

        radRookie.Checked = False
        radVeteran.Checked = False
        radPro.Checked = False

        radThirty.Checked = False
        radFourtyFive.Checked = False
        radSixty.Checked = False

        lblTimeRemain.Text = String.Empty

        txtNumber.Clear()

    End Sub

    Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
        Me.Close()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If radThirty.Checked = True Then
            Timer1.Interval = 1000
            Timer1.Enabled = True
            timercount = 30
            lblTimeRemain.Text = timercount.ToString()
            If timercount = 0 Then
                Timer1.Enabled = False
                lblTimeRemain.Text = "Done"

            Else
                timercount -= 1
            End If
        ElseIf radFourtyFive.Checked = True Then
            Timer1.Interval = 1000
            Timer1.Enabled = True
            timercount = 45
            lblTimeRemain.Text = timercount.ToString()
            If timercount = 0 Then
                Timer1.Enabled = False
                lblTimeRemain.Text = "Done"

            Else
                timercount -= 1
            End If
        ElseIf radSixty.Checked = True Then
            Timer1.Interval = 1000
            Timer1.Enabled = True
            timercount = 60
            lblTimeRemain.Text = timercount.ToString()
            If timercount = 0 Then
                Timer1.Enabled = False
                lblTimeRemain.Text = "Done"

            Else
                timercount -= 1
            End If

        End If
    End Sub
End Class

Here is my gui
guess_game

Recommended Answers

All 3 Replies

I see the issue with my image...but my timer is still jacked. I just don't know how to get the darn thing to work.

First of all, in your CheckChanged handlers, check to make sure the option button/radio button has a value of 1. If 0, then this indicates that the current button is losing a previous selection. If you don't do this, you will generate unnecessary random numbers and may set the random number to the wrong value, depending on what order the events happen.

In your btnGuess handler, you are duplicating code. You are doing the exact same thing no matter which level option is selected. You may want to check earlier in the sub that one of the option buttons is selected, if not give a MessageBox.Show letting the user know to pick a level first. Maybe leave the Guess button disabled until one of the level options is selected.

You assigned intGuess in TryParse. Comparing an Integer to another number is a lot faster and easier than comparing a string, like txtNumber.Text. Use intGuess instead. Also, intGuess is used only inside btnGuess_Click. Make the variable local to the function.

When you make one of the images visible, also make the other image invisible.

If intGuess < holdNumber Then
    imgHigher.Visible = True
    imgLower.Visible = False
ElseIf intGuess > holdNumber Then
    imgHigher.Visible = False
    imgLower.Visible = True
Else
    rem The guess is not less than, nor greater than.  Must be equal.
    Debug.Assert(intGuess = holdNumber)
    rem This happens least often, so put it in Else.
    imgHigher.Visible = False
    imgLower.Visible = False
    MessageBox.Show("You Win! The Number was " & holdNumber)
End If

Timer_Tick is called when the timer hits its event time, as defined by Interval. You are using this function to set up the timer instead. Move this type of code into new handlers for the timer options. Each one should setup the timer's interval, set the starting time (30, 45, 60 seconds) and start the timer, or you could start the timer when the user makes his/her first guess.

The kind of thing that should be in the Timer_Tick handler should be counting down the counter on the form and stopping the game when the user runs out of time.

You can try this to let your timer working:

 Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        If timercount > 0 Then
            timercount = timercount - 1
            lblTimeRemain.Text = timercount.ToString()
        Else
            Timer1.Enabled = False
            MessageBox.Show("Time Up")

        End If


    End Sub

    Private Sub btnGuess_Click(sender As System.Object, e As System.EventArgs) Handles btnGuess.Click

        If timercount > 0 Then
            timercount = timercount
            Timer1.Enabled = True

        End If

    End Sub

    Private Sub RadThirty_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RadThirty.CheckedChanged
        If RadThirty.Checked = True Then
            lblTimeRemain.Text = "30"
            timercount = 30

        End If
    End Sub

    Private Sub RadFourtyfive_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RadFourtyfive.CheckedChanged
        If RadFourtyfive.Checked = True Then
            lblTimeRemain.Text = "45"
            timercount = 45

        End If
    End Sub

    Private Sub RadSixty_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles RadSixty.CheckedChanged
        If RadSixty.Checked = True Then
            lblTimeRemain.Text = "60"
            timercount = 60

        End If
    End Sub
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.