如何创建一个 21 点游戏作为两个玩家之间的模拟?
How do I create a blackjack game as a simulation between two players?
我一直在努力弄清楚如何将此程序转换为两个玩家之间的程序,而不仅仅是庄家和我。它是否应该以某种方式循环,将循环的第一次迭代提供给玩家 1,然后将另一个迭代提供给玩家 2?我不太确定如何让它发挥作用。
def main():
deck = create_deck()
num_cards = int(input('How many cards should I deal? '))
deal_cards(deck, num_cards)
def create_deck():
deck = {'Ace of Spades':1, '2 of Spades':2, '3 of Spades':3,
'4 of Spades':4, '5 of Spades':5, '6 of Spades':6,
'7 of Spades':7, '8 of Spades':8, '9 of Spades':9,
'10 of Spades':10, 'Jack of Spades':10,
'Queen of Spades':10, 'King of Spades': 10,
'Ace of Hearts':1, '2 of Hearts':2, '3 of Hearts':3,
'4 of Hearts':4, '5 of Hearts':5, '6 of Hearts':6,
'7 of Hearts':7, '8 of Hearts':8, '9 of Hearts':9,
'10 of Hearts':10, 'Jack of Hearts':10,
'Queen of Hearts':10, 'King of Hearts': 10, 'Ace of Clubs':1,
'2 of Clubs':2, '3 of Clubs':3, '4 of Clubs':4, '5 of Clubs':5,
'6 of Clubs':6,'7 of Clubs':7, '8 of Clubs':8, '9 of Clubs':9,
'10 of Clubs':10, 'Jack of Clubs':10,
'Queen of Clubs':10, 'King of Clubs': 10,
'Ace of Diamonds':1, '2 of Diamonds':2, '3 of Diamonds':3,
'4 of Diamonds':4, '5 of Diamonds':5, '6 of Diamonds':6,
'7 of Diamonds':7, '8 of Diamonds':8, '9 of Diamonds':9,
'10 of Diamonds':10, 'Jack of Diamonds':10,
'Queen of Diamonds':10, 'King of Diamonds': 10}
return deck
def deal_cards(deck, number):
hand_value = 0
if number > len(deck):
number = len(deck)
for count in range(number):
card, value = deck.popitem()
print(card)
hand_value += value
print('Value of this hand:', hand_value)
main()
您发布的代码只处理用户指定数量的牌(顺便说一下,它们不是随机发的),计算它们的价值,然后终止。如果你想让这个游戏不断地发牌,你必须在主函数中添加一个循环,像这样:
def main():
deck = create_deck()
while True:
num_cards = int(input('How many cards should I deal? '))
deal_cards(deck, num_cards)
请注意,这不会计算交易之间的牌数。为此,您需要在主函数中创建一个变量,如 p1 或 p2,并将其传递给 deal_cards。我不太确定这是否是你想要的。
我建议尝试这样的事情:
import random
deck = {'Ace of Spades':1, '2 of Spades':2, '3 of Spades':3,
'4 of Spades':4, '5 of Spades':5, '6 of Spades':6,
'7 of Spades':7, '8 of Spades':8, '9 of Spades':9,
'10 of Spades':10, 'Jack of Spades':10,
'Queen of Spades':10, 'King of Spades': 10,
'Ace of Hearts':1, '2 of Hearts':2, '3 of Hearts':3,
'4 of Hearts':4, '5 of Hearts':5, '6 of Hearts':6,
'7 of Hearts':7, '8 of Hearts':8, '9 of Hearts':9,
'10 of Hearts':10, 'Jack of Hearts':10,
'Queen of Hearts':10, 'King of Hearts': 10, 'Ace of Clubs':1,
'2 of Clubs':2, '3 of Clubs':3, '4 of Clubs':4, '5 of Clubs':5,
'6 of Clubs':6,'7 of Clubs':7, '8 of Clubs':8, '9 of Clubs':9,
'10 of Clubs':10, 'Jack of Clubs':10,
'Queen of Clubs':10, 'King of Clubs': 10,
'Ace of Diamonds':1, '2 of Diamonds':2, '3 of Diamonds':3,
'4 of Diamonds':4, '5 of Diamonds':5, '6 of Diamonds':6,
'7 of Diamonds':7, '8 of Diamonds':8, '9 of Diamonds':9,
'10 of Diamonds':10, 'Jack of Diamonds':10,
'Queen of Diamonds':10, 'King of Diamonds': 10}
def value(hand):
hand_value = 0
for i in hand:
hand_value += deck[i]
return hand_value
def main():
keys = list(deck)
random.shuffle(keys)
player1_hand = []
player2_hand = []
#dealing to player 1
while True:
print ("Player 1's hand is ", player1_hand, "The value is ", value(player1_hand))
response = int(input('How many cards should I deal to player1? '))
if response == 0:
break
else:
for i in range(int(response)):
player1_hand.append(keys.pop())
#dealing to player 2
while True:
print ("Player 2's hand is ", player2_hand, "The value is ", value(player2_hand))
response = int(input('How many cards should I deal to player2? '))
if response == 0:
break
else:
for i in range(int(response)):
player2_hand.append(keys.pop())
print (player1_hand, value(player1_hand))
print (player2_hand, value(player2_hand))
if __name__ == "__main__":
main()
一些变化:
1) create_deck 函数是不必要的,因为它只是 returns 一个不变的变量,所以它被删除了。
2) Random.shuffle 用于甲板上,因此游戏并不总是相同的。
3) 添加了'if name == main'。
这是一个简单的公式,其中玩家 1 获得他们想要的任意数量的牌,然后玩家 2 也这样做。您可以循环处理 while 循环,或编写一些单独的函数来指定轮数。您还可以尝试在一个玩家发完牌后打印很多换行字符,这样其他玩家就看不到发给他们的是什么。
我一直在努力弄清楚如何将此程序转换为两个玩家之间的程序,而不仅仅是庄家和我。它是否应该以某种方式循环,将循环的第一次迭代提供给玩家 1,然后将另一个迭代提供给玩家 2?我不太确定如何让它发挥作用。
def main():
deck = create_deck()
num_cards = int(input('How many cards should I deal? '))
deal_cards(deck, num_cards)
def create_deck():
deck = {'Ace of Spades':1, '2 of Spades':2, '3 of Spades':3,
'4 of Spades':4, '5 of Spades':5, '6 of Spades':6,
'7 of Spades':7, '8 of Spades':8, '9 of Spades':9,
'10 of Spades':10, 'Jack of Spades':10,
'Queen of Spades':10, 'King of Spades': 10,
'Ace of Hearts':1, '2 of Hearts':2, '3 of Hearts':3,
'4 of Hearts':4, '5 of Hearts':5, '6 of Hearts':6,
'7 of Hearts':7, '8 of Hearts':8, '9 of Hearts':9,
'10 of Hearts':10, 'Jack of Hearts':10,
'Queen of Hearts':10, 'King of Hearts': 10, 'Ace of Clubs':1,
'2 of Clubs':2, '3 of Clubs':3, '4 of Clubs':4, '5 of Clubs':5,
'6 of Clubs':6,'7 of Clubs':7, '8 of Clubs':8, '9 of Clubs':9,
'10 of Clubs':10, 'Jack of Clubs':10,
'Queen of Clubs':10, 'King of Clubs': 10,
'Ace of Diamonds':1, '2 of Diamonds':2, '3 of Diamonds':3,
'4 of Diamonds':4, '5 of Diamonds':5, '6 of Diamonds':6,
'7 of Diamonds':7, '8 of Diamonds':8, '9 of Diamonds':9,
'10 of Diamonds':10, 'Jack of Diamonds':10,
'Queen of Diamonds':10, 'King of Diamonds': 10}
return deck
def deal_cards(deck, number):
hand_value = 0
if number > len(deck):
number = len(deck)
for count in range(number):
card, value = deck.popitem()
print(card)
hand_value += value
print('Value of this hand:', hand_value)
main()
您发布的代码只处理用户指定数量的牌(顺便说一下,它们不是随机发的),计算它们的价值,然后终止。如果你想让这个游戏不断地发牌,你必须在主函数中添加一个循环,像这样:
def main():
deck = create_deck()
while True:
num_cards = int(input('How many cards should I deal? '))
deal_cards(deck, num_cards)
请注意,这不会计算交易之间的牌数。为此,您需要在主函数中创建一个变量,如 p1 或 p2,并将其传递给 deal_cards。我不太确定这是否是你想要的。
我建议尝试这样的事情:
import random
deck = {'Ace of Spades':1, '2 of Spades':2, '3 of Spades':3,
'4 of Spades':4, '5 of Spades':5, '6 of Spades':6,
'7 of Spades':7, '8 of Spades':8, '9 of Spades':9,
'10 of Spades':10, 'Jack of Spades':10,
'Queen of Spades':10, 'King of Spades': 10,
'Ace of Hearts':1, '2 of Hearts':2, '3 of Hearts':3,
'4 of Hearts':4, '5 of Hearts':5, '6 of Hearts':6,
'7 of Hearts':7, '8 of Hearts':8, '9 of Hearts':9,
'10 of Hearts':10, 'Jack of Hearts':10,
'Queen of Hearts':10, 'King of Hearts': 10, 'Ace of Clubs':1,
'2 of Clubs':2, '3 of Clubs':3, '4 of Clubs':4, '5 of Clubs':5,
'6 of Clubs':6,'7 of Clubs':7, '8 of Clubs':8, '9 of Clubs':9,
'10 of Clubs':10, 'Jack of Clubs':10,
'Queen of Clubs':10, 'King of Clubs': 10,
'Ace of Diamonds':1, '2 of Diamonds':2, '3 of Diamonds':3,
'4 of Diamonds':4, '5 of Diamonds':5, '6 of Diamonds':6,
'7 of Diamonds':7, '8 of Diamonds':8, '9 of Diamonds':9,
'10 of Diamonds':10, 'Jack of Diamonds':10,
'Queen of Diamonds':10, 'King of Diamonds': 10}
def value(hand):
hand_value = 0
for i in hand:
hand_value += deck[i]
return hand_value
def main():
keys = list(deck)
random.shuffle(keys)
player1_hand = []
player2_hand = []
#dealing to player 1
while True:
print ("Player 1's hand is ", player1_hand, "The value is ", value(player1_hand))
response = int(input('How many cards should I deal to player1? '))
if response == 0:
break
else:
for i in range(int(response)):
player1_hand.append(keys.pop())
#dealing to player 2
while True:
print ("Player 2's hand is ", player2_hand, "The value is ", value(player2_hand))
response = int(input('How many cards should I deal to player2? '))
if response == 0:
break
else:
for i in range(int(response)):
player2_hand.append(keys.pop())
print (player1_hand, value(player1_hand))
print (player2_hand, value(player2_hand))
if __name__ == "__main__":
main()
一些变化: 1) create_deck 函数是不必要的,因为它只是 returns 一个不变的变量,所以它被删除了。 2) Random.shuffle 用于甲板上,因此游戏并不总是相同的。 3) 添加了'if name == main'。 这是一个简单的公式,其中玩家 1 获得他们想要的任意数量的牌,然后玩家 2 也这样做。您可以循环处理 while 循环,或编写一些单独的函数来指定轮数。您还可以尝试在一个玩家发完牌后打印很多换行字符,这样其他玩家就看不到发给他们的是什么。