Visual Basic 随机猜数游戏

问题描述 投票:0回答:2

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

表格如下:

这是我到目前为止的代码:

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
vb.net visual-studio loops visual-studio-2015
2个回答
2
投票

您的代码有很多错误:

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


0
投票
将 rand 设为新的 Random() Dim numberToGuess As Integer = rand.Next(1, 101) ' 1 到 100 之间的随机数 将 userGuess 调暗为整数 暗淡尝试作为整数 = 0

' 游戏循环 做 尝试 += 1 userGuess = CInt(InputBox("猜一个 1 到 100 之间的数字:"))

If userGuess < numberToGuess Then MsgBox("Too low! Try again.") ElseIf userGuess > numberToGuess Then MsgBox("Too high! Try again.") Else MsgBox("Congratulations! You've guessed the number in " & attempts & " attempts.") End If
当 userGuess <> numberToGuess 时循环

© www.soinside.com 2019 - 2024. All rights reserved.