0

我目前正在用 Visual Basic 为我在学校的项目制作二十一点游戏。

在二十一点中,当您有 ace(初始值为 11)时,当牌的总值大于 21 时,它们的值变为 1。在代码中,这只会为每个 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。

任何帮助将不胜感激。:)

4

2 回答 2

1

这是一种方法

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

此代码应产生 20 的值

    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)
于 2013-10-16T17:16:13.813 回答
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

而已。卡片上只有一个循环,没有多余的变量,剩下的就是总值和一个指示总值是否软的标志。

于 2013-10-19T23:36:33.830 回答