【问题标题】:Visual Basic Random Number Guessing GameVisual Basic 随机数猜谜游戏
【发布时间】:2019-06-02 10:00:23
【问题描述】:

我需要一些帮助来完成课堂作业。我正在尝试创建一个必须有循环的随机数猜谜游戏。基本上,您输入一个数字作为猜测,程序将显示一条消息,告诉您猜测是太高、太低还是正确,它会循环直到您猜对为止。该程序还会计算您所做的猜测次数。

这是表格:

这是我目前的代码:

Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click
    Dim decNumber As Decimal
    Dim rand As New Random
    Dim decGuess As Decimal
    Dim intCount As Integer = 0

    decGuess = CDec(txtGuess.Text)

    Do
        decNumber = rand.Next(1, 100)

        intCount += 1
        lblCount.Text = intCount.ToString

        If decNumber < decGuess Then
            lblResponse.Text = "Too low, try again."
        ElseIf decNumber > decGuess Then
            lblResponse.Text = "Too high, try again."
        ElseIf decNumber = decGuess Then
            lblResponse.Text = "Correct."
        End If

    Loop Until decGuess = decNumber

End Sub

我不太确定代码中的错误是什么,但每当我点击“显示”时,猜测计数是一个非常高的数字,标签中显示的消息总是“正确”,所以我的问题是如何解决这个问题并正确编写循环?

更新:

Public Class Form1

Dim intNumber As Integer
Dim rand As New Random
Dim intGuess As Integer
Dim intCount As Integer

Private Sub btnNew_Click_1(sender As Object, e As EventArgs)
    lblResponse.Text = String.Empty
    txtGuess.Clear()
    lblCount.Text = String.Empty
    intNumber = rand.Next(1, 100)
End Sub

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

    intGuess = CInt(txtGuess.Text)

    If intNumber < intGuess Then
        lblResponse.Text = "Too high, try again."
    ElseIf intNumber > intGuess Then
        lblResponse.Text = "Too low, try again."
    ElseIf intNumber = intGuess Then
        lblResponse.Text = "Correct."
    End If

    intCount += 1
    lblCount.Text = intCount.ToString

End Sub

【问题讨论】:

  • 你正在做相反的事情。你输入一个数字,然后让计算机猜测它是哪个数字。电脑很不擅长。
  • Random.Next 返回一个整数,因此摆脱 Decimal 数据类型并使用 Integer。
  • 更新后的代码是正确的。您只需要在btnNew_Click_1 事件中设置intCount = 0。另外,由于发泄被称为btnNew_Click_1,请检查您现在是否有两个不同的事件。 You Button 可能连接到旧按钮或两者。
  • 谢谢@Jimi,我意识到问题与按钮的名称有关。

标签: vb.net visual-studio loops visual-studio-2015


【解决方案1】:

您的代码有很多错误:

1.你的随机数的定义

您在每个循环中生成随机数,这意味着您尝试猜测的不是固定数字,而是数字在变化。

即使您在循环之外定义随机数,每次单击按钮时数字都会改变。

您需要将其定义为子程序外部的全局变量,并且仅在您按下重置按钮时更改它

2. intcount的定义

每次单击按钮时,intcount 都会设置为 0,因为它是在按钮单击子例程中定义的,我认为这是不希望的。

3.您正在使用循环的事实

您根本不需要循环。除非您希望程序在每次按下按钮时都进入无限循环并崩溃并且您的猜测不正确,否则您应该删除循环并只使用其中的代码。

4.使用了错误的数据类型

decnumber 应该是一个整数,因为 random.next() 返回一个整数值(你也可以将它重命名为 ToGuess)

decGuess = CDec(textGuess.Text)

应该是

decGuess = CInt(textGuess.Text)

因为如果你输入一个小数,你将永远猜不到这个数字


程序总是输出“正确”的原因是因为不是你改变你的猜测,所以它与随机数相同,计算机通过改变随机数来“猜测”你的猜测,这样它最终会变成你的猜测,每次都增加 # 次猜测。

更新:

您的新按钮无法正常工作的原因是它无法处理其点击。假设您已调用新按钮 btnNew,请尝试替换:

Private Sub btnNew_Click_1(sender As Object, e As EventArgs)

与:

Private Sub btnNew_Click_1(sender As Object, e As EventArgs) Handles btnNew.Click

下次为按钮单击添加子例程时,请尝试在 Visual Studio 的设计视图中双击该按钮。这会自动生成点击子程序。

您遇到的另一个问题是您在表单加载时没有生成随机数。要解决这个问题,请在设计器视图中双击您的表单以生成加载子例程,然后以编程方式按下按钮

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    btnNew.PerformClick()
End Sub

另外,感谢jimi的评论,记得在按下btnNew时将intCount设置为0

【讨论】:

  • 好吧,这对我有很大帮助,我进行了更改,现在我只是对将 rand.Next 行放在哪里感到困惑?我最终在 Guess 按钮之前创建了一个重置​​/新游戏按钮,但我不确定在哪里放置代码以使两个按钮都工作。
  • 您可以将 rand.next 以及与生成随机数相关的任何变量放入重置按钮单击子例程中
  • 嗯,由于某种原因,我仍然遇到问题。我会把更新后的代码放在上面。
  • 计数有效,但每当我开始猜测标签时,无论您输入什么数字,都会显示“太高,再试一次”的消息。此外,当您单击“新游戏”时,它不会清除所有值
  • 很高兴能帮上忙!如果您能在达到 15 次代表后对我的回答进行投票,那就太好了 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
相关资源
最近更新 更多