2016-10-14 23 views
0

Ich habe ein Problem mit meinem Blackjack-Spiel in vb.net. Dieser Code, den ich habe, wird die Punktzahl des Spielers perfekt ergänzen, aber wenn es um die Punktzahl des Dealers geht, wird es nicht funktionieren. Es dauert nur die zweite Karte, die der Dealer hat.Blackjack: Keine Händlerhand hinzufügen

ist es mit diesem genannt:

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

Und das ist "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 
+0

'currScore' ist immer Null, da es nie einen Wert zugewiesen hat. Was ist der Sinn? – djv

+0

Sind alle Karten des Spielers und des Dealers in 'GroupBox1'? – djv

+0

Ja, sie sind alle in GroupBox1. Was es tut, ist die erste Karte des Dealers zu enthüllen, da die zweite Karte immer offengelegt wird ... Dann ruft es den addScore ("d") auf, um die Punkte des Dealers zu erhalten, aber es kommt immer mit der zweiten Karte des Dealers zusammen Wenn er eine 2 und eine 8 hat, kommt er aus irgendeinem Grund auf 16. – rsprodftw1

Antwort

1

currScore nicht da sein sollte. Ersetzen Sie es durch 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