Блэкджек: не добавит руку дилера

#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