2016-10-14 5 views
0

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" & 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'는 절대 값이 지정되지 않으므로 항상 0입니다. 그것의 요점은 무엇입니까? – djv

+0

모든 플레이어와 딜러 카드가'GroupBox1'에 있습니까? – djv

+0

예, 모두 GroupBox1에 있습니다. 두 번째 카드가 항상 공개되어 있기 때문에 딜러의 첫 번째 카드가 표시됩니다 ... 그러면 딜러의 점수를 얻기 위해 addScore ("d")가 호출되지만 딜러의 두 번째 카드 x 2에 항상 표시됩니다. 그가 2와 8을 가졌다면 어떤 이유로 16이 올 것입니다. – rsprodftw1

답변

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 
관련 문제