我一直在尝试创建一个简单的二十一点游戏,用户选择卡片并决定是否击中或坚持,如果他们的牌超过21他们输了。但我不知道如何添加ace,以便程序将选择ace是1还是11。 请帮忙 这是我的代码
Module Module1
Sub Main()
Dim cards(4, 13) As Integer
Dim value As Integer
Dim value2 As Integer
Dim royal As String
Dim suit As String
Dim card1 As Integer
Dim card2 As Integer
Dim card3 As Integer
Dim card4 As Integer
Dim card5 As Integer
Dim card6 As Integer
Dim card7 As Integer
Dim answer As String
Dim total As Integer
Randomize()
value = (3 * Rnd()) + 1
value2 = (11 * Rnd()) + 1
'suits: 1= hearts
'2= diamonds
'3=spades
'4=clubs
cards(1, 1) = 2
cards(2, 1) = 2
cards(3, 1) = 2
cards(4, 1) = 2
cards(1, 2) = 3
cards(2, 2) = 3
cards(3, 2) = 3
cards(4, 2) = 3
cards(1, 3) = 4
cards(2, 3) = 4
cards(3, 3) = 4
cards(4, 3) = 4
cards(1, 4) = 5
cards(2, 4) = 5
cards(3, 4) = 5
cards(4, 4) = 5
cards(1, 5) = 6
cards(2, 5) = 6
cards(3, 5) = 6
cards(4, 5) = 6
cards(1, 6) = 7
cards(2, 6) = 7
cards(3, 6) = 7
cards(4, 6) = 7
cards(1, 7) = 8
cards(2, 7) = 8
cards(3, 7) = 8
cards(4, 7) = 8
cards(1, 8) = 9
cards(2, 8) = 9
cards(3, 8) = 9
cards(4, 8) = 9
cards(1, 9) = 10
cards(2, 9) = 10
cards(3, 9) = 10
cards(4, 9) = 10
'jacks
cards(1, 10) = 10
cards(2, 10) = 10
cards(3, 10) = 10
cards(4, 10) = 10
'queens
cards(1, 11) = 10
cards(2, 11) = 10
cards(3, 11) = 10
cards(4, 11) = 10
'kings
cards(1, 12) = 10
cards(2, 12) = 10
cards(3, 12) = 10
cards(4, 12) = 10
If value2 = 1 Then
royal = "2"
ElseIf value2 = 2 Then
royal = "3"
ElseIf value2 = 3 Then
royal = "4"
ElseIf value2 = 4 Then
royal = "5"
ElseIf value2 = 5 Then
royal = "6"
ElseIf value2 = 6 Then
royal = "7"
ElseIf value2 = 7 Then
royal = "8"
ElseIf value2 = 8 Then
royal = "9"
ElseIf value2 = 9 Then
royal = "10"
ElseIf value2 = 10 Then
royal = "jack"
ElseIf value2 = 11 Then
royal = "queen"
ElseIf value2 = 12 Then
royal = "king"
End If
If value = 1 Then
suit = "hearts"
ElseIf value = 2 Then
suit = "diamonds"
ElseIf value = 3 Then
suit = "spades"
ElseIf value = 4 Then
suit = "clubs"
End If
Console.WriteLine("your first card is the {0} of {1}", royal, suit)
card1 = cards(value, value2)
value = (3 * Rnd()) + 1
value2 = (11 * Rnd()) + 1
If value2 = 1 Then
royal = "2"
ElseIf value2 = 2 Then
royal = "3"
ElseIf value2 = 3 Then
royal = "4"
ElseIf value2 = 4 Then
royal = "5"
ElseIf value2 = 5 Then
royal = "6"
ElseIf value2 = 6 Then
royal = "7"
ElseIf value2 = 7 Then
royal = "8"
ElseIf value2 = 8 Then
royal = "9"
ElseIf value2 = 9 Then
royal = "10"
ElseIf value2 = 10 Then
royal = "jack"
ElseIf value2 = 11 Then
royal = "queen"
ElseIf value2 = 12 Then
royal = "king"
End If
If value = 1 Then
suit = "hearts"
ElseIf value = 2 Then
suit = "diamonds"
ElseIf value = 3 Then
suit = "spades"
ElseIf value = 4 Then
suit = "clubs"
End If
Console.WriteLine("your second card is the {0} of {1}", royal, suit)
card2 = cards(value, value2)
Console.ReadKey()
total = card1 + card2
If total > 21 Then
Console.WriteLine("You lose")
Console.ReadLine()
Else
Console.WriteLine("Do you want to hit or stick?")
answer = Console.ReadLine
If answer = "hit" Then
value = (3 * Rnd()) + 1
value2 = (11 * Rnd()) + 1
If value2 = 1 Then
royal = "2"
ElseIf value2 = 2 Then
royal = "3"
ElseIf value2 = 3 Then
royal = "4"
ElseIf value2 = 4 Then
royal = "5"
ElseIf value2 = 5 Then
royal = "6"
ElseIf value2 = 6 Then
royal = "7"
ElseIf value2 = 7 Then
royal = "8"
ElseIf value2 = 8 Then
royal = "9"
ElseIf value2 = 9 Then
royal = "10"
ElseIf value2 = 10 Then
royal = "jack"
ElseIf value2 = 11 Then
royal = "queen"
ElseIf value2 = 12 Then
royal = "king"
End If
If value = 1 Then
suit = "hearts"
ElseIf value = 2 Then
suit = "diamonds"
ElseIf value = 3 Then
suit = "spades"
ElseIf value = 4 Then
suit = "clubs"
End If
Console.WriteLine("your card is the {0} of {1}", royal, suit)
card3 = cards(value, value2)
Console.ReadKey()
total = card1 + card2 + card3
If total > 21 Then
Console.WriteLine("You lose")
Console.ReadLine()
Else
Console.WriteLine("Do you want to hit or stick?")
answer = Console.ReadLine
If answer = "hit" Then
value = (3 * Rnd()) + 1
value2 = (11 * Rnd()) + 1
If value2 = 1 Then
royal = "2"
ElseIf value2 = 2 Then
royal = "3"
ElseIf value2 = 3 Then
royal = "4"
ElseIf value2 = 4 Then
royal = "5"
ElseIf value2 = 5 Then
royal = "6"
ElseIf value2 = 6 Then
royal = "7"
ElseIf value2 = 7 Then
royal = "8"
ElseIf value2 = 8 Then
royal = "9"
ElseIf value2 = 9 Then
royal = "10"
ElseIf value2 = 10 Then
royal = "jack"
ElseIf value2 = 11 Then
royal = "queen"
ElseIf value2 = 12 Then
royal = "king"
End If
If value = 1 Then
suit = "hearts"
ElseIf value = 2 Then
suit = "diamonds"
ElseIf value = 3 Then
suit = "spades"
ElseIf value = 4 Then
suit = "clubs"
End If
Console.WriteLine("your card is the {0} of {1}", royal, suit)
card4 = cards(value, value2)
Console.ReadKey()
total = card1 + card2 + card3 + card4
If total > 21 Then
Console.WriteLine("You lose")
Console.ReadLine()
Else
Console.WriteLine("Do you want to hit or stick?")
answer = Console.ReadLine
If answer = "hit" Then
value = (3 * Rnd()) + 1
value2 = (11 * Rnd()) + 1
If value2 = 1 Then
royal = "2"
ElseIf value2 = 2 Then
royal = "3"
ElseIf value2 = 3 Then
royal = "4"
ElseIf value2 = 4 Then
royal = "5"
ElseIf value2 = 5 Then
royal = "6"
ElseIf value2 = 6 Then
royal = "7"
ElseIf value2 = 7 Then
royal = "8"
ElseIf value2 = 8 Then
royal = "9"
ElseIf value2 = 9 Then
royal = "10"
ElseIf value2 = 10 Then
royal = "jack"
ElseIf value2 = 11 Then
royal = "queen"
ElseIf value2 = 12 Then
royal = "king"
End If
If value = 1 Then
suit = "hearts"
ElseIf value = 2 Then
suit = "diamonds"
ElseIf value = 3 Then
suit = "spades"
ElseIf value = 4 Then
suit = "clubs"
End If
Console.WriteLine("your card is the {0} of {1}", royal, suit)
card5 = cards(value, value2)
Console.ReadKey()
total = card1 + card2 + card3 + card4 + card5
If total > 21 Then
Console.WriteLine("You lose")
Console.ReadLine()
Else
Console.WriteLine("Do you want to hit or stick?")
answer = Console.ReadLine
If answer = "hit" Then
value = (3 * Rnd()) + 1
value2 = (11 * Rnd()) + 1
If value2 = 1 Then
royal = "2"
ElseIf value2 = 2 Then
royal = "3"
ElseIf value2 = 3 Then
royal = "4"
ElseIf value2 = 4 Then
royal = "5"
ElseIf value2 = 5 Then
royal = "6"
ElseIf value2 = 6 Then
royal = "7"
ElseIf value2 = 7 Then
royal = "8"
ElseIf value2 = 8 Then
royal = "9"
ElseIf value2 = 9 Then
royal = "10"
ElseIf value2 = 10 Then
royal = "jack"
ElseIf value2 = 11 Then
royal = "queen"
ElseIf value2 = 12 Then
royal = "king"
End If
If value = 1 Then
suit = "hearts"
ElseIf value = 2 Then
suit = "diamonds"
ElseIf value = 3 Then
suit = "spades"
ElseIf value = 4 Then
suit = "clubs"
End If
Console.WriteLine("your card is the {0} of {1}", royal, suit)
card6 = cards(value, value2)
Console.ReadKey()
total = card1 + card2 + card3 + card4 + card5 + card6
If total > 21 Then
Console.WriteLine("You lose")
Console.ReadLine()
Else
Console.WriteLine("Do you want to hit or stick?")
answer = Console.ReadLine
If answer = "hit" Then
value = (3 * Rnd()) + 1
value2 = (11 * Rnd()) + 1
If value2 = 1 Then
royal = "2"
ElseIf value2 = 2 Then
royal = "3"
ElseIf value2 = 3 Then
royal = "4"
ElseIf value2 = 4 Then
royal = "5"
ElseIf value2 = 5 Then
royal = "6"
ElseIf value2 = 6 Then
royal = "7"
ElseIf value2 = 7 Then
royal = "8"
ElseIf value2 = 8 Then
royal = "9"
ElseIf value2 = 9 Then
royal = "10"
ElseIf value2 = 10 Then
royal = "jack"
ElseIf value2 = 11 Then
royal = "queen"
ElseIf value2 = 12 Then
royal = "king"
End If
If value = 1 Then
suit = "hearts"
ElseIf value = 2 Then
suit = "diamonds"
ElseIf value = 3 Then
suit = "spades"
ElseIf value = 4 Then
suit = "clubs"
End If
Console.WriteLine("your card is the {0} of {1}", royal, suit)
card7 = cards(value, value2)
Console.ReadKey()
total = card1 + card2 + card3 + card4 + card5 + card6 + card7
ElseIf answer = "stick" Then
Console.WriteLine("your final score is {0}", total)
Console.ReadLine()
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub
End Module
答案 0 :(得分:0)
使用如下规则:Aces值11,除非总数超过21,然后它们值1.您必须重新计算手中每个ace的总数,直到总数小于或等于21。不是一个真正的最佳策略,但足以学习如何编码。
答案 1 :(得分:0)
要记住的是,没有" CHOICE"将ace计为1或11.这是由手严格决定的。将所有的A数量计为1.然后,如果手牌包含一个或多个A,总数小于12,则添加10.即可。只有一个ace可以算作11,只有当它必须被计算在内时。
编程二十一点的真正棘手的部分是要记住你需要跟踪手的总数和一些额外的信息,以表明总数是否是"软"或不(如果你加上上面的10,它很软)。