2016-10-14 36 views
0

vb.netのブラックジャックゲームに問題があります。私が持っているこのコードはプレーヤーのスコアを完全に追加しますが、それはディーラーの得点になると、それはしません。それはディーラーが持っている2枚目のカードしかかかりません。ブラックジャック:ディーラーの手札を追加しない

これはこれで呼び出されます。

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にあります。それは、ディーラーの最初のカードを明らかにしています。なぜなら、2枚目のカードが常に公開されているからです...それからディーラーの得点を得るためにaddScore( "d")を呼び出しますが、もし彼が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 
関連する問題