#vb.net
#vb.net
Вопрос:
У меня проблема с моей игрой в блэкджек в vb.net . Этот код, который у меня есть, отлично добавит счет игрока, но когда дело дойдет до счета дилера, этого не произойдет. Для этого требуется только вторая карта, которая есть у дилера.
Он вызывается с помощью этого:
addScore("p") 'add player's score
addScore("d") 'add dealer's score
И это «addScore()»:
Public Function card(player As String, index As Integer) As Label
Try
If player = "p" Then
Return GroupBox1.Controls.OfType(Of Label).Where(Function(l) l.Name = "YouCard" amp; index.ToString()).Single()
ElseIf player = "d" Then
Return GroupBox1.Controls.OfType(Of Label).Where(Function(l) l.Name = "DealerCard" amp; index.ToString()).Single()
End If
Catch
Return Nothing
End Try
End Function
Public Sub addScore(ByVal player As String)
Dim currScore As Integer
Dim result As Integer = 0
'Add Score
For value As Integer = 1 To 7
If card(player, value).Text = "A" AndAlso (currScore 11) <= 21 Then
result = currScore 11
ElseIf card(player, value).Text = "A" AndAlso (currScore 1) <= 22 Then
result = currScore 1
ElseIf IsNumeric(card(player, value).Text) Then
result = currScore CInt(card(player, value).Text)
ElseIf card(player, value).Text = "" Then
result = result
Else
result = currScore 10
End If
If player = "p" Then
YouScore.Text = result
Else
DealerScore.Text = result
End If
Next
End Sub
Комментарии:
1.
currScore
всегда равно нулю, так как ему никогда не присваивается никакого значения. Какой в этом смысл?2. Все ли карты игрока и дилера на
GroupBox1
месте?3. Да, все они находятся в GroupBox1. Что он делает, так это раскрывает первую карту дилера, поскольку вторая карта всегда открывается… Затем он вызывает addScore («d»), чтобы получить счет дилера, но он всегда заканчивается второй картой дилера x 2. Таким образом, если у него есть 2 и 8, по какой-то причине получается 16.
4. Я использую весь код, который вы предоставили, и некоторые значения по умолчанию для карт, и я не вижу, чтобы это происходило. Ярлыки My YouScore и DealerScore отображают только последнюю карту. Должно быть, вы делаете что-то еще, чего не показали. Кроме того, в чем смысл
currScore
этого? Оно всегда равно нулю. Есть ли другое объявление в другом месте в виде переменной с тем же именем?5. Самое правильное, что нужно сделать сейчас, это нажать на галочку рядом с ответом от @Verdolino (он же Just One Guy). Это удалит это сообщение из списка оставшихся без ответа.
Ответ №1:
currScore
там не должно быть. Замените его на result
Public Sub addScore(ByVal player As String)
Dim result As Integer = 0
'Add Score
For value As Integer = 1 To 7
If card(player, value).Text = "A" AndAlso (result 11) <= 21 Then
result = result 11
ElseIf card(player, value).Text = "A" AndAlso (result 1) <= 22 Then
result = result 1
ElseIf IsNumeric(card(player, value).Text) Then
result = result CInt(card(player, value).Text)
ElseIf card(player, value).Text = "" Then
result = result
Else
result = result 10
End If
If player = "p" Then
YouScore.Text = result
Else
DealerScore.Text = result
End If
Next
End Sub