Vb.net 21点计划-Can';t使ACE从11变为1';s

Vb.net 21点计划-Can';t使ACE从11变为1';s,vb.net,visual-studio,project,blackjack,Vb.net,Visual Studio,Project,Blackjack,我目前正在用Visual Basic为我在学校的项目制作一个21点游戏 在21点游戏中,当你有A(最初的值为11)时,当卡的总价值大于21时,A的值变为1。在代码中,每一张A只需要10张 我被困在这上面了 这是我的代码(不起作用): Do当播放值>21和计数器21时,该值应减去10(=19)-上述代码不执行此操作 另一种情况是10,8,A,A(=40) 同样,两个A应该变成1,因为总值>21,即20 任何帮助都将不胜感激。:) 这里有一个方法 Public Enum CardFace N

我目前正在用Visual Basic为我在学校的项目制作一个21点游戏

在21点游戏中,当你有A(最初的值为11)时,当卡的总价值大于21时,A的值变为1。在代码中,每一张A只需要10张

我被困在这上面了

这是我的代码(不起作用):

Do当播放值>21和计数器21时,该值应减去10(=19)-上述代码不执行此操作

另一种情况是10,8,A,A(=40) 同样,两个A应该变成1,因为总值>21,即20

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

这里有一个方法

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)

构建21点手牌的正确方法如下(在伪代码中):

变量:总计=0,软标志=false
对于手中的每张卡:
将卡的价值加到总数中。面为10,A为1。
如果您添加的卡是ace,请设置soft flag=true
如果总数<12且软标志:
总数加10
其他:
设置软标志=假

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

在这两种情况下,您得到的是什么值,而不是正确的值?使用调试器时,
PlayerValue
counter
是否具有正确的初始值?我的猜测是,
counter
noAcesPlayer
(我们必须猜出它们是什么)没有您认为的值,因此从未进入循环。使用断点检查其值。同意@puropoix。您是否在循环之前/之后重置了计数器<代码>计数器=0
是的,计数器设置为零。更好的算法是:(A)将ACE视为1;(b) 每当一只手上有一张王牌时,设置一个标志——不需要记录有多少;(c) 如果最终总数小于12,并且设置了标志,则添加10。就这样。没有循环,只有一个简单的标志和快速测试。我很快就会尝试。谢谢你的回复。:)嗨,伙计,非常感谢你!你给我的代码非常有效(做了一些修改——没什么大不了的)。明亮的欠你一大笔钱!不是很聪明,只是模仿别人的行为,如果你仔细想想的话。我应该今天早上吃早餐的!:D保留ACE数和使用循环是不必要的。你只能加10次,或者根本不加。所以只需要使用一个标志和一个if-then。
    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)
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