Vb.net 21点计划-Can';t使ACE从11变为1';s
我目前正在用Visual Basic为我在学校的项目制作一个21点游戏 在21点游戏中,当你有A(最初的值为11)时,当卡的总价值大于21时,A的值变为1。在代码中,每一张A只需要10张 我被困在这上面了 这是我的代码(不起作用):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
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