dcsimg
Results 1 to 9 of 9

Thread: Rock Paper Scissors Problem

  1. #1

    Thread Starter
    New Member
    Join Date
    Jan 2015
    Posts
    1

    Question Rock Paper Scissors Problem

    For some reason Rock ( button1 ) and paper ( button2 ) only display "You Win" and "Its a Draw" However scissors ( button3 ) Displays All 3 "You win", "You Lose" and "Its A Draw, I hope someone can help me find a solution ~David

    Public Class Form1
    Dim counter As Integer

    Dim rock As Integer = 1
    Dim paper As Integer = 2
    Dim scissors As Integer = 3

    Dim userValue As Integer

    'rock beats scissors-paper beats rock-scissors beats paper


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    counter = 1

    If counter = 1 Then
    userValue = rock
    End If

    Randomize()

    Dim computerValue As Integer = CInt(Int((3 * Rnd()) + 1))
    If userValue = computerValue Then
    Label1.Text = "Its a Draw"
    ElseIf userValue = 1 And computerValue = 3 Then
    Label1.Text = "You Win"
    ElseIf computerValue = 3 And userValue = 1 Then
    Label1.Text = "You lose"
    End If

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    counter = 2

    If counter = 2 Then
    userValue = paper
    End If

    Randomize()

    Dim computerValue As Integer = CInt(Int((3 * Rnd()) + 1))
    If userValue = computerValue Then
    Label1.Text = "Its a Draw"
    ElseIf userValue = 2 And computerValue = 1 Then
    Label1.Text = "You Win"
    ElseIf computerValue = 2 And userValue = 1 Then
    Label1.Text = "You lose"
    End If

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    counter = 3

    If counter = 3 Then
    userValue = scissors
    End If

    Randomize()

    Dim computerValue As Integer = CInt(Int((3 * Rnd()) + 1))
    If userValue = computerValue Then
    Label1.Text = "Its a Draw"
    ElseIf userValue = 3 And computerValue = 2 Then
    Label1.Text = "You Win"
    ElseIf computerValue = 1 And userValue = 3 Then
    Label1.Text = "You lose"
    End If

    End Sub
    End Class

  2. #2
    .NUT jmcilhinney's Avatar
    Join Date
    May 2005
    Location
    Sydney, Australia
    Posts
    104,704

    Re: Rock Paper Scissors Problem

    You need to learn to debug your code. Rather than just reading it, watch it in action. Place a breakpoint at the top of the code and then step through it line by line, viewing that values of your variables and other relevant expressions. That way, you can see exactly where what actually happens differs from what you expect to happen. If you still can't work out how to fix it then post back but at least you can tell us EXACTLY where the issue is.

  3. #3
    Super Moderator FunkyDexter's Avatar
    Join Date
    Apr 2005
    Location
    An obscure body in the SK system. The inhabitants call it Earth
    Posts
    7,525

    Re: Rock Paper Scissors Problem

    Your logic is wrong.

    In button 1 you have this:-
    ElseIf userValue = 1 And computerValue = 3 Then
    Label1.Text = "You Win"
    ElseIf computerValue = 3 And userValue = 1 Then
    Label1.Text = "You lose"
    Both of those if are actually the same, you've just got the elements in a different order.

    In button 2 you have this:-
    ElseIf computerValue = 2 And userValue = 1 Then
    ...which will never be true because you've just set userValue to 2


    As a general comment, you've got way more code than you need, too. You don't need the counter variable and you don't need the user variable. Each button should just do something like this (using pseudo code)

    Code:
    Call Randomize to reseed the random number generator
    Set ComputerVal = a random number from 1 to 3
    Select Case ComputerVal
       case 1 : Return Win/Lose/Draw
       case 2 : Return Win/Lose/Draw
       case 3 : Return Win/Lose/Draw
    End Case
    You don't need to stire userVal in a variable, you know what user selection you're dealing with because you're writing the event handler for that selection.
    You can depend upon the Americans to do the right thing. But only after they have exhausted every other possibility - Winston Churchill

    Hadoop actually sounds more like the way they greet each other in Yorkshire - Inferrd

  4. #4
    eXtreme Programmer .paul.'s Avatar
    Join Date
    May 2007
    Location
    Chelmsford UK
    Posts
    23,126

    Re: Rock Paper Scissors Problem

    try this:

    Code:
    Public Class Form1
        Dim rock As Integer = 1
        Dim paper As Integer = 2
        Dim scissors As Integer = 3
    
        Dim userValue As Integer
    
        Dim r As New Random
    
        'rock beats scissors-paper beats rock-scissors beats paper
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            userValue = rock
    
            Dim computerValue As Integer = r.Next(1, 4)
            If userValue = computerValue Then
                Label1.Text = "Its a Draw"
            ElseIf computerValue = 2 Then
                Label1.Text = "You Win"
            ElseIf computerValue = 3 Then
                Label1.Text = "You lose"
            End If
    
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            userValue = paper
    
            Dim computerValue As Integer = r.Next(1, 4)
            If userValue = computerValue Then
                Label1.Text = "Its a Draw"
            ElseIf computerValue = 3 Then
                Label1.Text = "You Win"
            ElseIf computerValue = 1 Then
                Label1.Text = "You lose"
            End If
    
        End Sub
    
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            userValue = scissors
    
            Dim computerValue As Integer = r.Next(1, 4)
            If userValue = computerValue Then
                Label1.Text = "Its a Draw"
            ElseIf computerValue = 1 Then
                Label1.Text = "You Win"
            ElseIf computerValue = 2 Then
                Label1.Text = "You lose"
            End If
    
        End Sub
    
    End Class

  5. #5
    Member
    Join Date
    Oct 2013
    Location
    Norway; Haugesund
    Posts
    39

    Re: Rock Paper Scissors Problem

    I've created a function for you @123Robo, which is similar to @.paul.'s code. It's even easier to use, and can be easily edited. I coded this as a practice, as I've yet not created a Rock, paper, scissor game. I thought I could share it with you and the rest of the community

    Code:
    Public Shared Function Rock_Paper_Scissors(ByVal [UserInput] As String) 'Call this function with either: "rock", "paper" or "scissor". Caps lock doesn't matter. Will result an error string if not one of these.
    
                Dim Result As String = Nothing 'The result to be shown
                Dim Possibilities() As String = {"rock".ToLower, "paper".ToLower, "scissor".ToLower} 'Holds the rock paper scissor variables
                [UserInput] = [UserInput].ToLower
    
                Dim WinMessage As String = "You win!" 'Displays selected text on win.
                Dim LoseMessage As String = "You lose!" 'Displays selected text on lose.
                Dim DrawMessage As String = "It's a draw!" 'Displays selected text on draw.
                Dim ErrorMessage As String = "Invalid userinput" 'Displays selected text if the userinput is wrong
    
                Dim newRandom As New Random
                Dim ComputerMove As String = Possibilities(newRandom.Next(0, 3)) 'Creates a random integer which is either 0, 1 or 2.
    
                If ComputerMove = [UserInput] Then 'Checks for possibilites
                    Result = DrawMessage 'Same as computer
                Else
                    If [UserInput] = Possibilities(0) And ComputerMove = Possibilities(1) Then
                        Result = LoseMessage 'User: Rock, PC: Paper
                    ElseIf [UserInput] = Possibilities(0) And ComputerMove = Possibilities(2) Then
                        Result = WinMessage 'User: Rock, PC: Scissor
                    ElseIf [UserInput] = Possibilities(1) And ComputerMove = Possibilities(0) Then
                        Result = WinMessage 'User: Paper, PC: Rock
                    ElseIf [UserInput] = Possibilities(1) And ComputerMove = Possibilities(2) Then
                        Result = LoseMessage 'User: Paper, PC: Scissor
                    ElseIf [UserInput] = Possibilities(2) And ComputerMove = Possibilities(0) Then
                        Result = LoseMessage 'User: Scissor, PC: Rock
                    ElseIf [UserInput] = Possibilities(2) And ComputerMove = Possibilities(1) Then
                        Result = WinMessage 'User: Scissor, PC: Paper
                    Else
                        Result = ErrorMessage 'Userinput did not match any of the possibilities
                    End If
                End If
    
                Return Result 'Returns the value back to caller
    
                'Code created by 'Frekvens1' for '123Robo' on VB Forums.
    
            End Function
    How do you run this code?

    Code:
    Label1.text = Rock_Paper_Scissors(YourVal) 'Replace 'YourVal' with either "rock", "paper" or "scissor". Upper letter works too. If another input is given, it will result in a error message. Which your label will display!
    I've also commented what the different lines of codes do, so you can see how the function works. I hope this solves your problem!

    - Frek
    Last edited by Frekvens1; Feb 2nd, 2015 at 09:27 AM. Reason: More Info

  6. #6
    Addicted Member
    Join Date
    Mar 2010
    Posts
    226

    Re: Rock Paper Scissors Problem

    You can just use pseudorandom number generator to reflect the real life. {Mersenne Twister}

  7. #7

  8. #8
    Super Moderator FunkyDexter's Avatar
    Join Date
    Apr 2005
    Location
    An obscure body in the SK system. The inhabitants call it Earth
    Posts
    7,525

    Re: Rock Paper Scissors Problem

    Good Catch.

    123Robo, try not to start duplicate threads. It actually lessens the chance that you'll get a solution because the information gets muddled across two places. I've deleted your other thread because it contained nothing useful that hasn't been repeated in this thread.
    You can depend upon the Americans to do the right thing. But only after they have exhausted every other possibility - Winston Churchill

    Hadoop actually sounds more like the way they greet each other in Yorkshire - Inferrd

  9. #9
    Bad man! ident's Avatar
    Join Date
    Mar 2009
    Location
    Cambridge
    Posts
    5,335

    Re: Rock Paper Scissors Problem

    Quote Originally Posted by FunkyDexter View Post
    Good Catch.
    it contained nothing useful that hasn't been repeated in this thread.
    I thought i had some valid bullet points

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Featured


Click Here to Expand Forum to Full Width