我试图创建一个简单的纸牌游戏,以更好地理解面向对象编程和类。
游戏如下:一副牌中有两张牌。然后第三张牌被发了。如果第三张牌在前两张牌之间,则玩家获胜。如果第三张牌等于前两张牌中的任何一张,或者不在设定的范围内,则玩家会输。
这就是我目前所拥有的:
class Deck(object):
def __init__(self):
self.deck = []
def PopulateDeck(self):
suits = ["Hearts", "Diamonds", "Clubs", "Spades"]
for suit in suits:
for rank in range(2, 15):
if rank == 11:
value = "Jack"
elif rank == 12:
value = "Queen"
elif rank == 13:
value = "King"
elif rank == 14:
value = "Ace"
self.deck.append(str(value) + " of " + suit)
class Card(object):
def __init__(self, rank, value):
self.rank = rank
self.value = value
self.card = self.rank + self.value
我在上课和面向对象编程上遇到了困难,我不确定这是否是一个好的开始,或者我下一步应该去哪里。其中大部分是通过阅读其他来源和例子而产生的。有谁能提供一些建议,告诉我还有哪些类可以用来运行我的游戏,以及这些类之间如何交互/继承?谢谢您。
这更多的是一个代码/方法审查。纸牌游戏是一种组合游戏,而不是继承游戏;
Deck
包含Card
s,但它本身不是Card
的一种类型,反之亦然。我认为你在复制
Card
中的信息。只需存储套装和等级,然后使用__str__
创建'x of y'
。您还可以实现rich comparison methods:现在例如
str(Card(13, 'Clubs')) == "King of Clubs"
。这样就不会在card
中复制rank
和value
。接下来,我认为
Deck
应该将population生成合并到__init__
;您可以为非标准组提供可选参数。我包含了两个实现;注释掉的版本是一个列表理解,使用itertools
在一行中完成相同的工作。我还提供了一个从self.deck
中选取n
不同随机卡的函数。现在这个游戏很简单了;由于比较方法的缘故,你可以每手发三张牌,然后自然地(使用
<
)比较牌。正如“托拜厄斯”在评论中所指出的+我的一些想法
Random documentation
我没有运行此代码,它可能包含错误。但这是你能做什么的例证。
相关问题 更多 >
编程相关推荐