我需要一些帮助,我不知道如何展示他们在这个项目中赢得的球员和洞。
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语句,还是有些简单的东西我只是缺少?
答案 0 :(得分:0)
看起来你只是在学习,所以我会尽力帮助你。
首先,您没有说明Scores
和P1
到P4
的定义方式。看起来Scores
可能是List(Of String),而P1
到P4
是某种文本框或标签。我现在就做出这些假设。首先将输出发送到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
可以称为hole
,j
可以称为player
。这将有助于你保持正确。
intLow
可以被称为winner
,这意味着该变量包含获胜者的索引。 intLow
可能意味着得分较低或得分最低的玩家。这种含糊不清可能让你感到困惑。这肯定让我困惑。
有一些原生的.Net方法可以截断数字的小数部分并生成随机数。甚至有可能直接生成随机整数。您正在使用传统的方法,VB.net提供了与VB6的向后兼容性。这是20世纪90年代的技术。不熟悉VB6的程序员会看到你的代码会发现这很混乱,这就是为什么使用.Net框架的原生功能通常会更好。