Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有人能帮我在pygame中为扑克游戏创建一副牌吗_Python_Oop_Pygame_Poker - Fatal编程技术网

Python 有人能帮我在pygame中为扑克游戏创建一副牌吗

Python 有人能帮我在pygame中为扑克游戏创建一副牌吗,python,oop,pygame,poker,Python,Oop,Pygame,Poker,我想用pygame和OOP在python中制作一个扑克游戏。我之前在我的课程中做了一个基于文本的21点游戏,我尝试使用一些相同的原则来创建我的牌组,但它不起作用。我的问题是我想创建52个卡片对象,我想每个卡片对象都有三个属性(套装、等级和png文件) 类卡: 定义初始(自我、西装、军衔、图片): 西服 self.pic=pic self.rank=等级 舱面: 定义初始化(自): self.deck_comp=[] def创建组(自身): 对于套装: 对于等级中的等级: 对于甲板上的pic: 自

我想用pygame和OOP在python中制作一个扑克游戏。我之前在我的课程中做了一个基于文本的21点游戏,我尝试使用一些相同的原则来创建我的牌组,但它不起作用。我的问题是我想创建52个卡片对象,我想每个卡片对象都有三个属性(套装、等级和png文件)

类卡:
定义初始(自我、西装、军衔、图片):
西服
self.pic=pic
self.rank=等级
舱面:
定义初始化(自):
self.deck_comp=[]
def创建组(自身):
对于套装:
对于等级中的等级:
对于甲板上的pic:
自身甲板组件附加(卡片(套装、军衔、图片))
我觉得三个for循环是问题所在。在基于文本的21点游戏中,牌只需要有两个属性。对于这个游戏,我需要卡片对象有一张图片和一个值,这样我可以显示它们并比较它们

西服是四条西服线的列表 Rank是以字符串和
pic是一个包含52个.png文件的列表(卡片组中每个卡片一个)

将所有png名称保存在字典中,并在
卡片
类中分配一个图像,这不是更明智的做法吗

class Card:
    def __init__(self, value, suit):
        self.value = value
        self.suit = suit
        self.img = png_images[f'{value}{suit}']

class Deck:
        def __init__(self, shuffle_cards=True):
        self.cards = []
        self.shuffle_cards = shuffle_cards
        self.create()

    def create(self):
        for _ in range(number_of_decks):
            for val in (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14):
                for suit in ("Hearts", "Spades", "Clubs", "Diamonds"):
                    self.cards.append(Card(val, suit))

        if self.shuffle_cards:
            shuffle(self.cards)

将所有png名称保存在一个字典中,并在
卡片
类中分配一个图像不是更明智吗

class Card:
    def __init__(self, value, suit):
        self.value = value
        self.suit = suit
        self.img = png_images[f'{value}{suit}']

class Deck:
        def __init__(self, shuffle_cards=True):
        self.cards = []
        self.shuffle_cards = shuffle_cards
        self.create()

    def create(self):
        for _ in range(number_of_decks):
            for val in (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14):
                for suit in ("Hearts", "Spades", "Clubs", "Diamonds"):
                    self.cards.append(Card(val, suit))

        if self.shuffle_cards:
            shuffle(self.cards)

根据其中一本书中的示例:

import collections

Card = collections.namedtuple('Card', ['rank', 'suit'])

class Deck:
    ranks = [str(n) for n in range(2, 11)] + ['JQKA']
    suits = ['spades', 'diamonds', 'clubs', 'hearts']
    #  dictionary of dictionaries which maps ranks and suits to the picture
    pic_mapping = {
                    'spades': {
                                '2': 'spades2',
                                '3': 'spades3'
                                ...
                              },
                    'hearts': {
                                '2': 'hearts2',
                                '3': 'hearts3'
                                ...
                              },  


    def __init__(self):
        self._cards = [Card(rank, suit, pic_mapping[suit][rank]) for suit in self.suits
                                        for rank in self.ranks]
请注意,列表可以变成元组,也可以使用生成器构建。列表只是为了更好的可读性。 此外,您还可以重载
\uuu len\uuu
\uuu getitem\uuuu
以支持以下操作:

  • 索引[i]
  • random.选择(集合)
  • 切片
  • 迭代
  • 反向(收集)
您可以使用图像命名约定来遵循dict映射,而不是dict映射
此模式为{suit}{rank}并动态将其添加到卡对象。

基于其中一本书中的示例:

import collections

Card = collections.namedtuple('Card', ['rank', 'suit'])

class Deck:
    ranks = [str(n) for n in range(2, 11)] + ['JQKA']
    suits = ['spades', 'diamonds', 'clubs', 'hearts']
    #  dictionary of dictionaries which maps ranks and suits to the picture
    pic_mapping = {
                    'spades': {
                                '2': 'spades2',
                                '3': 'spades3'
                                ...
                              },
                    'hearts': {
                                '2': 'hearts2',
                                '3': 'hearts3'
                                ...
                              },  


    def __init__(self):
        self._cards = [Card(rank, suit, pic_mapping[suit][rank]) for suit in self.suits
                                        for rank in self.ranks]
请注意,列表可以变成元组,也可以使用生成器构建。列表只是为了更好的可读性。 此外,您还可以重载
\uuu len\uuu
\uuu getitem\uuuu
以支持以下操作:

  • 索引[i]
  • random.选择(集合)
  • 切片
  • 迭代
  • 反向(收集)
您可以使用图像命名约定来遵循dict映射,而不是dict映射
此模式为{suit}{rank}并动态地将其添加到Card对象。

我已经有一段时间没有这样做了,但是您可以为每个suit创建一个pickle字典

看看这个:

创建和尝试:


希望有帮助:)

我已经有一段时间没有做过类似的事情了,但是你可以为每件衣服创建一个pickle字典

看看这个:

创建和尝试:


希望有帮助:)

欢迎使用StackOverflow。你能告诉我们有什么问题吗?(您可以编辑您的问题并添加您看到的Python错误。)什么是
deck
?然而,我假设有一个西服/军衔对到图片的一对一映射,所以你可能想要西服的
,产品中的军衔(西服,军衔):self.deck_comp.append(Card(西服,军衔,deck[(西服,军衔)])
,而不是对每张图片进行迭代。是的,你肯定不想在图片上循环,只是适合和排名,分配一个正确的图片给每张卡。大概,您可以将图片文件命名为“card_s_8.png”等,这样您就可以根据等级和套装组合文件名。欢迎使用StackOverflow。你能告诉我们有什么问题吗?(您可以编辑您的问题并添加您看到的Python错误。)什么是
deck
?然而,我假设有一个西服/军衔对到图片的一对一映射,所以你可能想要西服的
,产品中的军衔(西服,军衔):self.deck_comp.append(Card(西服,军衔,deck[(西服,军衔)])
,而不是对每张图片进行迭代。是的,你肯定不想在图片上循环,只是适合和排名,分配一个正确的图片给每张卡。大概,你可以把图片文件命名为“card_s_8.png”等,这样你就可以把文件名从rank和suit组合起来。没问题。如果我的回答有帮助,你介意接受吗?是的,这是正确的方法。我也喜欢卡片值是数字而不是字符串。西装也应该是,但这不是什么问题。西装可以是字符串,因为它们不能直接比较。在扑克牌中,比较套装的唯一原因是检测5个相同的套装,但还有桥牌之类的游戏。甚至在扑克游戏中,也有一些东西,比如低牌为种马带来,这会比较套装。没问题。如果我的回答有帮助,你介意接受吗?是的,这是正确的方法。我也喜欢卡片值是数字而不是字符串。西装也应该是,但这不是什么问题。西装可以是字符串,因为它们不能直接比较。在扑克牌中,比较套装的唯一原因是检测5个相同的套装,但还有桥牌之类的游戏。甚至在扑克牌中也有一些东西,比如低牌为种马带来,这确实比较适合。