需要帮助显示高尔夫游戏的输出

时间:2014-09-12 03:04:37

标签: vb.net visual-studio-2013

我需要一些帮助,我不知道如何展示他们在这个项目中赢得的球员和洞。

    Public Class GolfGame
    Private Sub btnPlay_Click(sender As Object, e As EventArgs) Handles btnPlay.Click
        Dim array(3, 8) As Integer
        Dim intLow As Integer = 0
        Scores.Items.Add(vbTab & "Hole 1" & vbTab & "Hole 2" & vbTab & "Hole 3" & vbTab & "Hole 4" & vbTab & "Hole 5" & vbTab & "Hole 6" & vbTab & "Hole 7" & vbTab & "Hole 8" & vbTab & "Hole 9")
        Randomize()
        For outer = 0 To 3
            For inner As Integer = 0 To 8
                array(outer, inner) = Int((8 * Rnd()) + 1)
            Next
            Scores.Items.Add("Player " & outer + 1 & vbTab & array(outer, 0) & vbTab & array(outer, 1) & vbTab & array(outer, 2) & vbTab & array(outer, 3) & vbTab & array(outer, 4) & vbTab & array(outer, 5) & vbTab & array(outer, 6) & vbTab & array(outer, 7) & vbTab & array(outer, 8))
        Next
        For i As Integer = 0 To 8
            For j As Integer = 0 To 3
                If array(j, i) < intLow Then
                    intLow = array(j, i)
                    If j = 0 And i = 0 Then
                        P1.Text = "Player 1 has won this hole."
                    ElseIf j = 1 And i = 0 Then
                        P2.Text = "Player 2 has won this hole."
                    ElseIf j = 2 And i = 0 Then
                        P3.Text = "Player 3 has won this hole"
                    ElseIf j = 3 And i = 0 Then
                        P4.Text = "Player 4 has won this hole."
                    End If
                End If
            Next

            intLow = 9
        Next
    End Sub
End Class

If语句似乎不在循环中工作。有什么想法来解决这个问题吗?输出应该只是一个大的if语句,还是有些简单的东西我只是缺少?

1 个答案:

答案 0 :(得分:0)

看起来你只是在学习,所以我会尽力帮助你。

首先,您没有说明ScoresP1P4的定义方式。看起来Scores可能是List(Of String),而P1P4是某种文本框或标签。我现在就做出这些假设。首先将输出发送到Scores,然后使用文本框代替。您需要确定如何显示输出并选择一个选项。

首先为每个球员/球洞组合分配1到8的随机整数。那部分看起来还不错。

然后你试图写一个算法来确定哪个玩家赢了每个洞。你所写的内容非常混乱,无法奏效。有很多问题。

    当你试图找到第一洞的获胜者时,
  • intLow为0。然后将其设置为9,用于孔2到9(外部1到8)。那不行。你需要保持一致。

  • intLow为0时,您的主If声明:

    If array(j, i) < intLow Then

    ...总是会失败,因为你在Scores中存储的值绝不会小于零。

  • 在后续迭代中,您的主If语句将始终成功,因为intLow已设置为9且最高分数为8.但是,到目前为止,i不会为0,所有内部If语句都将失败。

  • intLow包含错误的信息。你想存储赢得洞的球员,而不是低分。如果intLow包含赢得洞的玩家的索引,那么您可以轻松获得分数。

所以你的程序基本上什么都不做。您需要调整算法以正确确定哪个玩家赢得了一个洞。这样就可以了:

For i As Integer = 0 To 8
   intLow = 0
   For j As Integer = 1 To 3
      If array(j, i) < array(intLow, i) Then
         intLow = j
      End If
   Next j
   ' At this point, you know that player intLow+1 won hole i+1 with a score of
   ' array(intLow, i). Ties always go to the first player who made that score.
Next i

在本次修订中,请注意我们将玩家彼此进行比较,而不是像9这样的常数值。当确定列表中的最小值或最大值时,这是一种更好的做法。当然,高尔夫球洞的得分范围总是1-8,但是大多数最小值和最大值往往会随着时间的推移而变化。无论如何,您希望算法都能正常工作。

我会把输出部分留给你。这看起来像是一项任务,我可能已经给了太多了。

其他建议:

  • Scores是一个命名不佳的变量。它包含输出,因此Output可能是更好的名称。

  • array不具有描述性。它包含分数。重命名Scores后,array的一个好名称将为Scores

  • i可以称为holej可以称为player。这将有助于你保持正确。

  • intLow可以被称为winner,这意味着该变量包含获胜者的索引。 intLow可能意味着得分较低或得分最低的玩家。这种含糊不清可能让你感到困惑。这肯定让我困惑。

  • 有一些原生的.Net方法可以截断数字的小数部分并生成随机数。甚至有可能直接生成随机整数。您正在使用传统的方法,VB.net提供了与VB6的向后兼容性。这是20世纪90年代的技术。不熟悉VB6的程序员会看到你的代码会发现这很混乱,这就是为什么使用.Net框架的原生功能通常会更好。