Python 有人能帮我在pygame中为扑克游戏创建一副牌吗
我想用pygame和OOP在python中制作一个扑克游戏。我之前在我的课程中做了一个基于文本的21点游戏,我尝试使用一些相同的原则来创建我的牌组,但它不起作用。我的问题是我想创建52个卡片对象,我想每个卡片对象都有三个属性(套装、等级和png文件)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: 自
类卡:
定义初始(自我、西装、军衔、图片):
西服
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个相同的套装,但还有桥牌之类的游戏。甚至在扑克牌中也有一些东西,比如低牌为种马带来,这确实比较适合。