2013-10-16 50 views
0

我目前正在Visual Basic中爲我在學校的項目製作二十一點遊戲。BlackJack Project - 無法將ace從11更改爲1

在大酒杯,當你有王牌(初始值11),其值變爲1時的卡的總價值爲> 21碼,這將只是把每一個ACE

我走10米堅持這一點。

這是我有(即不工作)的代碼:

Do While PlayerValue > 21 And counter <= noAcesPlayer 
     counter += 1 
     PlayerValue -= 10 
Loop 

在塞納里奧,我有:2,8,A,8(= 29) 但是,由於有一個Ace,並且總值大於21,則應該從中減去10(= 19) - 上述代碼不會執行此操作。

另一種情形將是10,8,A,A(= 40) 再次,兩個A應該變成1的,由於總值> 21,給20

任何幫助,將不勝感激。 :)

+0

您在兩個示例中獲得了什麼值,而不是正確的值?使用調試器時,'PlayerValue'和'counter'是否具有正確的初始值? – SolarBear

+1

我的猜測是'counter'或'noAcesPlayer'(我們都猜猜它們是什麼)沒有你認爲它的價值,所以循環從不輸入。使用一個斷點來檢查它們的值。 – Plutonix

+0

同意@Plutonix。你在循環之前/之後重置了「計數器」嗎? '計數器= 0' – Steve

回答

1

這裏有一個方法

Public Enum CardFace 
    None 
    Ace 
    Two 
    Three 
    Four 
    Five 
    Six 
    Seven 
    Eight 
    Nine 
    Ten 
    Jack 
    Queen 
    King 
End Enum 

此代碼應產生二十

Dim cards As New List(Of CardFace) From {CardFace.Ten, CardFace.Eight, CardFace.Ace, CardFace.Ace} 
    Dim total As Integer = 0 
    Dim numofAces As Integer = 0 
    For Each c As CardFace In cards 
     Debug.WriteLine(c.ToString) 
     If c = CardFace.Ace Then 
      numofAces += 1 
     Else 
      total += c 
     End If 
    Next 

    If numofAces > 0 Then 
     If total + 11 + (numofAces - 1) > 21 Then 
      total += numofAces 
     Else 
      total += 11 + (numofAces - 1) 
     End If 
    End If 
    Debug.WriteLine(total) 
+0

我會盡快嘗試。謝謝回覆。 :) –

+0

嗨,謝謝你!你給我的代碼非常有用(做了一些修改 - 沒什麼大不了)。輝煌。不要你太大了! –

+0

不是太棒了,只是模仿人們在想什麼時做的事情。 – dbasnett

0

值,以建立一個手牌的正確方式如下(在僞代碼):

Variables: total = 0, soft-flag = false 

For each card in hand: 
    Add card value to total. Faces are 10, aces are 1. 
    If the card you added was an ace, set soft-flag = true 

If total < 12 and soft-flag: 
    Add 10 to total 
Else: 
    set soft-flag = false 

就是這樣。只有一個循環遍佈卡片,沒有外部變量,並且剩下總值和一個標誌,指示總數是否很小。