BlackJack Project - 无法将ace从11更改为1

问题描述:

我目前正在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

这里有一个方法

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

值,以建立一个手牌的正确方式如下(在伪代码):

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 

就是这样。只有一个循环遍布卡片,没有外部变量,并且剩下总值和一个标志,指示总数是否很小。