2

RPSゲームのコードを完成させるのに苦労しています。手順は次のとおりです。メインボタン-コードをクリックします。私。以前と同じように、入力ボックスを使用して3文字のうちの1つをユーザーに入力するように求める必要があります。ii。カスタムメソッドからランダムな文字を取得します。iii。ユーザーの手紙とランダムなコンピューターの手紙の両方を他の方法に渡します。iv。trueが返された場合は、フォームに追加したラベルで勝ったことをユーザーに伝えます。そうでない場合は、そのラベルで負けたことをユーザーに伝えます。

私は1と2を正しく行ったと思いますが、3と4に問題があります。誰かが助けてくれますか!

これはこれまでの私のコードです

Public Class Form1

    Dim randomObject As New Random()

    Private Property user As String

    Private Property computer As Random

    Function GetRandomRPSLetter() As String
        randomObject.Next(1, 4)
        Dim computer As Integer = randomObject.Next(1, 4)
        If computer = 1 Then
            Return "r"
        ElseIf computer = 2 Then
            Return "p"
        Else
            Return "s"
        End If

    End Function
    Function GetRPSRoundWinner(ByVal user As String, ByVal computer As String) As String
        If user = "r" Then
            If computer = "r" Then
                Return False
            ElseIf computer = "p" Then
                Return False
            Else
                Return True
            End If
        ElseIf user = "p" Then
            If computer = "r" Then
                Return True
            ElseIf computer = "p" Then
                Return False
            Else
                Return False
            End If
        Else
            If computer = "r" Then
                Return False
            ElseIf computer = "p" Then
                Return True
            Else
                Return False
            End If
        End If
    End Function

    Private Sub Button1_click(ByVal sender As System.Object,
                                    ByVal e As System.EventArgs) Handles Button1.Click

        user = InputBox("Please input r, p, or s to play")

        GetRandomRPSLetter()



    End Sub
    Sub GetRPSRoundWinner()
        If GetRPSRoundWinner(True) Then Return
        Label1.Text = "You win"

    End Sub

    Private Function GetRPSRoundWinner(p1 As Boolean) As Boolean
        Throw New NotImplementedException
    End Function

End Class

今私はGetRPSRoundWinnerと呼んだ

Private Sub Button1_click(ByVal sender As System.Object,
                                ByVal e As System.EventArgs) Handles Button1.Click

    user = InputBox("Please input r, p, or s to play")

    GetRandomRPSLetter()

    GetRPSRoundWinner()



End Sub

誰かがそれらを比較する方法で私を助けることができますか?

本当にありがとうございました!

4

3 に答える 3

1
  • メソッドはではなくGetRPSRoundWinnerを返す必要があります。回すことで、この種のエラーが軽減されます。BooleanStringOption Strict On
  • GetRandomRPSLetterボタン クリック イベント ハンドラーでメソッドを呼び出しますが、そこから戻り値を取得して、それを使用してユーザーの入力をランダムに生成されたコンピューターの動きと比較することはありません。
  • どこからでも電話することはありませんGetRPSRoundWinner
  • メソッドには 3 つのオーバーロードがありますGetRPSRoundWinnerが、実際に役立つのはそのうちの 1 つだけです。
于 2013-02-19T21:42:23.147 に答える
0

私はいくつかの変更を加えましたが、それは私にとってはうまくいきます。あなたの関数が正しい勝者を得ているかどうかはテストしませんでしたが、次のように思います:

Public Class Form1

    Dim randomObject As New Random()

    Private Property user As String

    Private Property computer As Random

    Function GetRandomRPSLetter() As String
        randomObject.Next(1, 4)
        Dim computer As Integer = randomObject.Next(1, 4)
        If computer = 1 Then
            Return "r"
        ElseIf computer = 2 Then
            Return "p"
        Else
            Return "s"
        End If

    End Function
    Function ComputeWinner(ByVal user As String, ByVal computer As String) As String
        If user = "r" Then
            If computer = "r" Then
                Return False
            ElseIf computer = "p" Then
                Return False
            Else
                Return True
            End If
        ElseIf user = "p" Then
            If computer = "r" Then
                Return True
            ElseIf computer = "p" Then
                Return False
            Else
                Return False
            End If
        Else
            If computer = "r" Then
                Return False
            ElseIf computer = "p" Then
                Return True
            Else
                Return False
            End If
        End If
    End Function

    Private Sub Button1_click(ByVal sender As System.Object,
                                    ByVal e As System.EventArgs) Handles Button1.Click

        user = InputBox("Please input r, p, or s to play")

        Dim ComputerLetter = GetRandomRPSLetter()

        GetRPSRoundWinner(user, ComputerLetter)

    End Sub
    Sub GetRPSRoundWinner(userLetter As String, computerLetter As String)
        If ComputeWinner(userLetter, computerLetter) Then
            Label1.Text = "You win"
        Else
            Label1.Text = "You loose! "
        End If

    End Sub
End Class

コードを単純にコピーして貼り付けないでください。違いがわかりますので、よく読んでください。

于 2013-02-19T23:14:21.293 に答える
0

を使用する方法と、それが可能なEnum暗黙的な変換を利用する方法を示したかったのです。Integer

サンプルコードの結果は次のとおりです。

デスクトップ

コメント付きのメインモジュールのソース:

Private rnd As New Random()
''' <summary>
''' Contain values for rock, paper, scissors in a specific
''' numeric order for simplifying with win/loss table
''' </summary>
Public Enum GameHand
    None = -1
    Paper = 0
    Scissors = 1
    Rock = 2
End Enum
''' <summary>
''' Contain values for the result of the game
''' </summary>
Public Enum GameResult
    None = -1
    Loss = 2
    Draw = 0
    Win = 1
End Enum

''' <summary>
''' Compares two RPS hands and returns a win or a loss.
''' If the two hands are the same, or either one is None then the function returns 0
''' </summary>
''' <param name="hand">The human hand (input value)</param>
''' <param name="cpu">The computer hand (output value)</param>
''' <returns>Win, Loss or Draw</returns>
Public Function Play(ByVal hand As GameHand, ByRef cpu As GameHand) As GameResult
    ' Shall we play?
    If hand = GameHand.None Then Return GameResult.None
    ' Pick a random hand
    cpu = rnd.Next(0, 2)
    ' Is it a draw?
    If hand = cpu Then Return GameResult.Draw
    ' win/loss table
    '
    '      P   S   R    
    ' P |      L   W |  
    ' S |  W       L |  
    ' R |  L   W     |  
    '
    ' count how many step away is one hand from the other
    ' in the sequence P S R P S R P S ...
    Dim diff As Integer = (hand + 3 - cpu) Mod 3
    ' two steps is a loss, and one step is a win
    ' Return win or loss
    Return diff
End Function

Sub Main()

    Dim usr As String, win As Integer = 0
    Dim hand As GameHand, cpu As GameHand
    Do
        usr = InputBox("Enter game hand (r/p/s) or quit (q)", "Rock Paper Scissors").ToLower()
        ' Interpret user input 
        Select Case usr
            Case "r"
                hand = GameHand.Rock
            Case "p"
                hand = GameHand.Paper
            Case "s"
                hand = GameHand.Scissors
            Case Else
                hand = GameHand.None
        End Select
        'Play against computer and report back results.
        'Also report computer hand with `ByRef` parameter
        Dim result As GameResult = Play(hand, cpu)
        Console.WriteLine(String.Format("Play {0} against {1} with result {2}", hand, cpu, result))
        'Add wins and subtract losses
        If result = GameResult.Win Then
            win += 1
        ElseIf result = GameResult.Loss Then
            win -= 1
        End If
        ' Check for quit.
    Loop Until usr.Equals("q")
    Console.WriteLine("Player win-loss = " & win)

End Sub
于 2013-02-20T15:29:57.867 に答える