【发布时间】:2021-06-30 22:34:41
【问题描述】:
我对中级编程相当陌生,但已经玩过代码一段时间了。 目前我正在制作一个简单的纸牌游戏。 这个问题是我不确定在哪里使用我的函数或何时将它们设为类方法。
例如,这里有一个简单的函数,它向每个玩家发 5 张牌(从预定义的列表中),然后从牌组顶部翻出一张牌(实际上都是随机选择)。 卡片作为项目列表(3 个列表)返回。 我还创建了一个名为“Player”的类。
p1_hand = []
p2_hand = []
flip_card = []
def deal_deck():
count = 0
for i in range(0, 10, 1):
count += 1
if count % 2 == 0:
card = random.choice(deck)
p2_hand.append(card)
deck.remove(card)
else:
card = random.choice(deck)
p1_hand.append(card)
deck.remove(card)
if count == 10:
flip_card.append(random.choice(deck))
return p2_hand, p1_hand, flip_card
在这个例子中,它只是一个交易,所以我想知道为什么它需要是“Player”的一个类方法? 可能“Player”类除了记分、跟踪谁在发牌以及记分是多少之外根本没有做太多的事情?
简而言之,我无法将类理解为交互和执行动作的对象,我已经创建了其他类,它们最终像迷你数据库一样工作,而不是在方法中使用太多复杂性。
【问题讨论】:
-
我的直觉是创建一个名为 Game、Dealer、Deck、Card、Player 和 Hand 的类。 Dealer 类将有一个 Deck 数据成员。 Deck 会有一个 shuffle 方法。 Player 类将有一个 Hand 数据成员。 deal_deck 将成为 Dealer 类方法,并将 Card 对象从 Dealer's Deck 传输到每个 Player's Hand,然后传输到 Game 对象的 Flipped_Card 成员。
-
这可能是主观的;但对我来说,发牌是
Deck实例所做的事情,可能是通过告诉Player(或者更好,Hand)实例从自己身上抽一张牌。如果你有一种奇怪的交易,我会把它放在Game。具体来说,如果这是在游戏开始时发生的事情,我会让Game.__init__初始化一个Deck实例,然后告诉它发牌,然后告诉它显示最上面的牌。我不会像Player类方法那样处理:正如你所指出的,deaing 与抽象的“玩家性”并没有真正的关系,尤其是与翻牌无关。
标签: python function class methods scope