生成卡片组Python 3

2024-05-26 11:09:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编程一个(喝酒)游戏叫做:乘公共汽车。我现在的问题不一定是游戏编程,而是生成一副没有任何重复的牌。我在这个论坛里到处找,但是我发现的唯一的东西是如何生成随机卡,而不是如何排除重复。这是我现在拥有的生成卡片的代码:

    suitnum = ["spade","club","heart","diamond"]
    cardnum = [2,3,4,5,6,7,8,9,10,"jack","queen","king","ace"]

    suit1 = random.choice(suitnum)
    card1 = random.choice(cardnum)

现在,对于游戏中的每一轮,我以相同的方式生成一张新的牌,只是每一轮的花色和牌名不同。我把先前生成的牌放入每一轮(每一轮都是一个单独的定义),因为我需要它们。我现在的问题是这个代码允许重复发生。我想找到一种方法,基本上产生一个'洗牌'牌组在程序开始时,在每一轮能够参考该牌组和采取的顶牌。我认为这是处理这个问题最简单的方法。有人知道如何编写代码吗,或者有什么更简单的方法来解决我的问题吗?在


Tags: 方法代码游戏编程random论坛spadejack
3条回答

谢谢你的帮助,我想出了一个对我有用的方法。我创建了一个如下所示的def:

    def carddraw():
        suits = ["spade","club","heart","diamond"]
        faces = [2,3,4,5,6,7,8,9,10,"jack","queen","king","ace"]

        deck = []
        for suit in suits:
            for face in faces:
                deck.append((suit, face))

在每一张我需要抽一张牌的def中,我会参考牌组,要求一张牌,然后将它分成适合自己的面型(我在游戏中需要)。看起来像这样:

^{pr2}$

现在,每当我需要另一张不同定义的卡时,我只需将suite1和face1的变量名更改为suit2和face2等

生成卡片列表,然后每次取出一个随机元素:

import random

suits = ["spade", "club", "heart", "diamond"]
faces = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]

cards = []
for suit in suits:
    for face in faces:
        cards.append((suit, face))

然后,每次需要新卡时:

^{pr2}$

我建议您使用当前的suitnumcardnum数组生成一个实际的牌组,您可以从中随机挑选卡片。这样,你就可以在你从阵列中取出卡片时删除它们。在

deck = []
for suit in suitnum:
    for card in cardnum:
        deck.append(suit + ' ' + str(card))

selection = random.choice(deck)
deck.remove(selection)
suit1 = selection.split()[0]
card1 = selection.split()[1]

相关问题 更多 >