如何创建一个二十一点游戏作为两个玩家之间的模拟?

问题描述:

我一直在努力弄清楚如何将这个程序转换成两个玩家之间,而不仅仅是经销商和我。它是否应该以某种方式循环,给循环播放器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() 
+0

你没有包括你询问的代码......你正在看的这个例子的肉和土豆可能在'main()'函数中 – Aaron

+0

不太清楚你的意思,“我已经一直在努力弄清楚如何将这个程序转换成两个玩家之间,而不仅仅是经销商和我。“这就是我所说的。 –

+0

这是一个问题 - 你的具体编程问题是什么? “我不知道如何使它工作”不是一个可以回答的问题。 – csmckelvey

我建议尝试这样的事:

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功能是不必要的,因为它会返回一个不变的变量,因此它已被删除。 2)Random.shuffle被用在甲板上,所以游戏并不总是一样的。 3)添加'if name == main'。 这是一个简单的公式,玩家1可以获得尽可能多的牌,然后玩家2也可以获得相同的牌。您可以循环处理while循环,或者编写一些单独的函数来指定循环次数。玩家完成发牌后,你也可以尝试打印很多新的线人物,以便其他玩家不能看到发给他们的东西。

+0

我想知道如何实现随机到我的旧代码。出于某种原因,当我测试它时,该东西不会运行。我没有考虑将价值作为单独的字典存储给每个玩家。谢谢。这使它更容易理解。 –

+0

我测试了代码,出于某种原因,我无法接触到玩家2,它只与玩家1一起运行,然后循环播放。 –

+0

如果第一个玩家要求发送0张卡片,它将转到第二个玩家。这是检查'如果响应== 0:中断'。 “响应”的输入可以改为“你想要另一张卡片(是/否)?”并且在'是'时玩家玩家获得一张牌并且在'否'循环中断。 – Sarthax

您发布的代码只处理卡用户指定的号码(它们不是由随机方式处理),总结自己的价值,而终止。如果你想这个游戏持续处理卡,您必须添加一个循环中的主要功能,是这样的:

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。我不太确定这是不是你想要的。

+0

谢谢,这将指向我正确的方向。如果我随机导入,我是否可以随机处理这些卡片? –

+0

请参阅http://*.com/questions/4809044/removing-items-randomly-from-a-dictionary关于如何随机处理 –