rsprodftw1
rsprodftw1

Reputation: 45

Blackjack: Won't add Dealer's Hand

I have a problem with my blackjack game in vb.net. This code I have will add the player's score perfectly, but when it comes to the dealer's score, it will not. It only takes the second card that the dealer has.

It is called with this:

addScore("p")   'add player's score
addScore("d")   'add dealer's score

And this is "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" & index.ToString()).Single()
        ElseIf player = "d" Then
            Return GroupBox1.Controls.OfType(Of Label).Where(Function(l) l.Name = "DealerCard" & 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

Upvotes: 0

Views: 64

Answers (1)

djv
djv

Reputation: 15774

currScore shouldn't be there. Replace it with 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

Upvotes: 1

Related Questions