2014-10-04 112 views
-2

目标:随机数猜谜游戏VB

这是一个猜谜游戏。该程序将生成一个介于1和500之间的随机数。用户将猜测该数字。

表单应该包含一个START按钮,一个用于保存所有有效猜测的列表框以及一个显示答案的标签。

单击START按钮后,用户将输入一个数字以响应InputBox()。

如果用户的猜测无效(不是数字,而是整数,超出范围),则显示相应的消息。

如果猜测有效但不是正确的数字(高或低),则显示相应的消息。

图像高quess对话框boximage低quess对话框

每当用户猜测范围内有效的数字猜测,猜测添加到窗体上的列表框。允许猜测显示在列表框的多列中。

如果用户成功猜到了号码,则显示相应的消息。包括他们采取了多少猜测。计数仅作为猜测有效(在范围内,积分)数字猜测。

允许用户通过输入Quit来退出游戏以响应输入框。如果用户放弃,请告诉他们正确的号码

重要提示:在生成标签后立即在标签中显示随机数,以便我(和您)知道数字是在我(而且您在)测试它时进行的。如果你真的想玩游戏,你显然可以拿出来。

Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click 
    'Declare Variables 
    Dim strGuess As String 
    Dim random As New Random 
    Dim answer As Integer 

    'Start with empty Boxes 
    lstGuesses.Items.Clear() 


    answer = random.Next(1, 500) 
    lblAnswer.Text = CStr(answer) 

    Do 
     Try 

      strGuess = InputBox("Enter a numeric integer between 1 and 500. , Enter 'quit' to Quit.", "Guessing Game") 
      lstGuesses.Items.Add(strGuess) 

      If strGuess = CStr("quit") Then 
       MessageBox.Show("The number was " & answer & ". Click Start Game to play again.") 
       Exit Do 
      End If 

      If CInt(strGuess) < CInt(1) Then 
       MessageBox.Show("Invalid Guess. Enter an Integer Number between 1 and 500!") 

      End If 

      If CInt(strGuess) > CInt(500) Then 
       MessageBox.Show("Invalid Guess. Enter an Integer Number between 1 and 500!") 

      End If 

      If CInt(strGuess) = CInt(answer) Then 
       MessageBox.Show("Got it! You guessed " & lstGuesses.Items.Add(strGuess) & " times!") 
      End If 

      If CInt(strGuess) > CInt(answer) And CInt(strGuess) <= CInt(500) Then 
       MessageBox.Show("Guess is High") 
      End If 

      If CInt(strGuess) < CInt(answer) And CInt(strGuess) >= CInt(1) Then 
       MessageBox.Show("Guess is Low") 
      End If 

      If lstGuesses.Items.Contains("quit") = True Then 
       MessageBox.Show("The number was " & answer & ". Click Start Game to play again.") 

      End If 

     Catch ex As InvalidCastException 
      'Make user guess 
      MessageBox.Show("Invlid Guess. Enter a numeric integer between 1 and 500!") 
     End Try 

    Loop While CInt(strGuess) <> answer 

End Sub 

我的问题: 我一直在努力的一切,这是我还没有做出最好的。这个作业在4小时内到期,所以任何帮助将不胜感激。 我想输入单词“退出”来结束游戏。但是,如果输入的不是字母,还会显示错误消息。每当我输入一个字母并按下回车键,它就会发出我设置的警告,但之后它会崩溃。它不应该崩溃。它说崩溃是从: 循环虽然CInt(strGuess)<>回答 和问题是因为InvalidCastException并说从字符串转换为类型整数无效。我尝试做TRYPARSE,但仍然是同样的问题。任何人都可以告诉我如何让我在文本框中输入“退出”一词,以便退出游戏,但不会造成崩溃。

+1

向我们展示您如何“尝试TRYPARSE”并发布完整的错误消息,而不仅仅是来自消息的几个字。 – 2014-10-04 00:47:13

+6

'这个作业在4个小时内完成'软件开发101:项目的前半部分需要80%的时间。下半场占80%。下次开始。 – Plutonix 2014-10-04 00:49:01

+0

我投票结束这个问题作为题外话,因为它是一个代码高尔夫问题,因此属于https://codegolf.stackexchange.com。 – lxg 2017-03-05 22:05:40

回答

0

也许这不是最好的方法,但我认为这会有所帮助。

您需要做的是在用户在输入框中输入内容后在顶部创建一个新的if语句。

  If IsNumeric(strGuess) Or strGuess = CStr("quit") Then 
      Else 
       MessageBox.Show("Only Numbers") 
       GoTo Line1 
      End If 

这里选中 “如果则IsNumeric(strGuess)或者strGuess = CStr的(” 退出 “),然后点”
如果是做什么
如果没有显示一个MsgBox和使用goto语句 “转到1号线” “所以在上面你添加Line1:”

如果有人输入类似“a”的东西,他会去line1“所以开始做”,用户需要在输入框中输入新的东西。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

'Declare Variables 
    Dim strGuess As String 
    Dim random As New Random 
    Dim answer As Integer 

    'Start with empty Boxes 
    lstGuesses.Items.Clear() 


    answer = random.Next(1, 500) 
    lblAnswer.Text = CStr(answer) 

Line1: 
    Do 
     Try 

      strGuess = InputBox("Enter a numeric integer between 1 and 500. , Enter 'quit' to Quit.", "Guessing Game") 
      lstGuesses.Items.Add(strGuess) 

      If IsNumeric(strGuess) Or strGuess = CStr("quit") Then 
      Else 
       MessageBox.Show("Only Numbers") 
       GoTo Line1 
      End If 

      If strGuess = CStr("quit") Then 
       MessageBox.Show("The number was " & answer & ". Click Start Game to play again.") 
       Exit Do 
      End If 

      If CInt(strGuess) < CInt(1) Then 
       MessageBox.Show("Invalid Guess. Enter an Integer Number between 1 and 500!") 

      End If 

      If CInt(strGuess) > CInt(500) Then 
       MessageBox.Show("Invalid Guess. Enter an Integer Number between 1 and 500!") 

      End If 

      If CInt(strGuess) = CInt(answer) Then 
       MessageBox.Show("Got it! You guessed " & lstGuesses.Items.Add(strGuess) & " times!") 
      End If 

      If CInt(strGuess) > CInt(answer) And CInt(strGuess) <= CInt(500) Then 
       MessageBox.Show("Guess is High") 
      End If 

      If CInt(strGuess) < CInt(answer) And CInt(strGuess) >= CInt(1) Then 
       MessageBox.Show("Guess is Low") 
      End If 

      If lstGuesses.Items.Contains("quit") = True Then 
       MessageBox.Show("The number was " & answer & ". Click Start Game to play again.") 

      End If 

     Catch ex As InvalidCastException 
      'Make user guess 
      MessageBox.Show("Invlid Guess. Enter a numeric integer between 1 and 500!") 
     End Try 

    Loop While CInt(strGuess) <> answer 
End Sub 
+0

为什么'CStr(“quit”)'而不是''退出''? – Basic 2014-10-04 14:52:40

+1

@Basic Becaus我从他的代码中拷贝了它,我只是修正了他所要求的。它的工作如此,对我来说这是一个很好的enuf。 – Creator 2014-10-04 16:16:38