Python 如何在两名玩家之间创建模拟21点游戏?

Python 如何在两名玩家之间创建模拟21点游戏?,python,simulation,blackjack,Python,Simulation,Blackjack,我一直在努力想如何将这个程序转换成两个玩家之间的程序,而不仅仅是经销商和我。它是否应该以某种方式循环,将循环的第一次迭代交给玩家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 =

我一直在努力想如何将这个程序转换成两个玩家之间的程序,而不仅仅是经销商和我。它是否应该以某种方式循环,将循环的第一次迭代交给玩家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)
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()

请注意,这不会对交易之间的卡进行求和。为此,您需要在主函数中创建一个变量,如p1或p2,并将其传递到交易卡中。不过我不太确定这是否是你想要的

我建议试试这样的方法:

def main():
    deck = create_deck()
    while True:

        num_cards = int(input('How many cards should I deal? '))

        deal_cards(deck, num_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函数是不必要的,因为它只返回一个不变的变量,所以被删除了。 2) 在牌堆上使用Random.shuffle,因此游戏并不总是一样的。 3) 添加了“如果名称==main”。
这是一个简单的公式,玩家1得到他们想要的尽可能多的牌,然后玩家2也得到同样的牌。您可以循环处理while循环,或者编写一些单独的函数来指定轮数。您还可以尝试在一名玩家获得发牌后打印许多新行字符,以便其他玩家看不到发给他们的是什么。

您还没有包括您询问的代码。。。您正在查看的这个示例的主要部分可能在
main()
函数中,不太清楚您的意思,“我一直在努力找出如何将这个程序转换为两个玩家之间的程序,而不仅仅是经销商和我。”这就是我所说的。这是一个问题-您具体的编程问题是什么?“我不知道如何让它工作”不是一个可以回答的问题。谢谢,这将为我指明正确的方向。如果我导入random,我能随机处理这些卡吗?请参阅了解如何随机处理我想知道如何在我的旧代码中实现random。由于某种原因,当我测试它时,它不会运行。我也没有考虑将每个玩家的值保存为单独的字典。谢谢这使它更容易理解。我测试了代码,由于某种原因,我无法访问玩家2,它只与玩家1一起运行,然后循环。如果第一个玩家要求发0张牌,它将转到第二个玩家。这就是检查“如果响应==0:break”。“响应”的输入可以更改为类似“您想要另一张卡吗(是/否)?”的内容,在“是”的情况下,玩家获得一张卡,在“否”的情况下,循环中断。