【发布时间】:2021-07-01 08:01:38
【问题描述】:
我正在尝试在 python 上创建一个垄断交易游戏,但在初始化对象列表时遇到了一些麻烦。每个卡类都有一个种类,即卡的类型和值。我想创建一个包含不同数量的不同卡片的列表
到目前为止,我的代码如下所示:
class Card:
def __init__(self, value,kind):
self.value = value
self.kind = kind
def __str__(self):
return "{} : {}".format(self.value,self.kind)
def __repr__(self):
return str(self)
def show(self):
print(self)
class Deck:
def __init__(self):
self.cards = []
self.build()
def build(self):
#money cards
self.cards.extend([Card(1,"money")] * 6)
self.cards.extend([Card(2, "money")] * 5)
self.cards.extend([Card(3, "money")] * 3)
self.cards.extend([Card(4,"money")] * 3)
self.cards.extend([Card(5,"money")] *2)
self.cards.extend([Card(10,"money")])
#action cards
self.cards.extend([Card("dealbreaker", "action")] * 2)
self.cards.extend([Card("justsayno", "action")] * 3)
self.cards.extend([Card("passgo", "action")] * 10)
self.cards.extend([Card("forceddeal", "action")] * 3)
self.cards.extend([Card("slydeal", "action")] * 3)
self.cards.extend([Card("debtcollector", "action")] * 3)
self.cards.extend([Card("birthday", "action")] * 3)
self.cards.extend([Card("doublerent", "action")] * 2)
self.cards.extend([Card("houses", "action")] * 3)
self.cards.extend([Card("hotels", "action")] * 2)
#property cards
self.cards.extend([Card("blue", "property")] * 2)
self.cards.extend([Card("brown", "property")] * 2)
self.cards.extend([Card("utility", "property")] * 2)
self.cards.extend([Card("green", "property")] * 3)
self.cards.extend([Card("yellow", "property")] * 3)
self.cards.extend([Card("red", "property")] * 3)
self.cards.extend([Card("orange", "property")] * 3)
self.cards.extend([Card("pink", "property")] * 3)
self.cards.extend([Card("lightblue", "property")] * 3)
self.cards.extend([Card("railroad", "property")] * 4)
现在我想知道是否有更好的方法来创建我的卡片列表而无需太多重复。我找不到循环和追加的方法,因为每张卡都必须有自己的类型和值,而且每张卡的数量也不同。
如果我遗漏了什么,请告诉我。有没有办法通过列表理解来做到这一点?任何帮助表示赞赏,在此先感谢!
【问题讨论】:
-
也许最好使用一个包含游戏中所有卡片类型的json类字典,即
cards = {"property": {"utility" : 0 }},这里的0是属性/实用卡片的数量.您可以将其存储为卡片组的一部分,即self.cards = cards {...}。这也意味着您可以将此字典重用于玩家或其他任何可以存储卡片的东西。
标签: python list object oop card