Python 扑克牌游戏开发:实现一手牌(Hand)类
在前面我们已经完成了单张牌(Card)和一副牌(Deck)的设计,接下来需要处理“一手牌”的逻辑。无论是玩家还是电脑(庄家),手中的牌在逻辑上都是完全一样的,因此我们只需要设计一个通用的 Hand 类即可。
本文属于扑克牌游戏开发的系列教程,重点讲解 Hand 类的初始化与加牌方法,并说明对象作用域在其中的应用。
目标
创建一个 Hand 类,用来表示玩家或庄家手中的牌。该类需要具备两个基本能力:
- 初始化:能够保存一手牌(初始为空列表)。
- 加牌:能够向这手牌中追加一张牌。
由于玩家和庄家的手牌逻辑一致,我们不需要分别创建“玩家类”和“庄家类”,而是复用同一个 Hand 类。
代码实现
1. 定义 Hand 类与初始化方法
首先定义 Hand 类,并在 __init__ 方法中初始化一个空列表 self.cards,用于存放这手牌中的所有牌。
class Hand:
def __init__(self):
self.cards = []
关于命名冲突的说明:有同学可能会疑惑,前面
Deck类里也有cards,这里Hand类里又出现cards,会不会冲突?答案是不会。这涉及作用域的概念:每个self.cards都属于各自的对象实例。就像两个小朋友都叫“小明”,一个是三年一班的,一个是三年二班的,彼此互不干扰。
2. 实现加牌方法 add_card
接下来为 Hand 类添加一个 add_card 方法,用于向手牌中追加一张牌。该方法接收一个 card 参数,无论调用者是玩家还是庄家,都可以使用同一个方法。
def add_card(self, card):
self.cards.append(card)
通过 self.cards.append(card),将传入的牌追加到当前这手牌的列表中。

测试与结果
代码编写完成后,Hand 类已经具备了初始化手牌和添加牌的能力。后续在游戏主逻辑中,玩家和庄家都可以各自实例化一个 Hand 对象,并通过 add_card 方法发牌,验证手牌列表是否正确追加。
小结
本节完成了 Hand 类的核心设计:
- 使用
__init__初始化self.cards空列表,保存一手牌。 - 使用
add_card(self, card)方法向手牌中追加一张牌。 - 通过对象作用域的理解,明确了不同类中同名属性
cards互不冲突。 - 玩家与庄家共用同一套手牌逻辑,简化了代码结构。
下一步即可在游戏流程中调用 Hand 类,实现发牌与手牌展示。
想系统学习这门课程?
你已阅读完本文。需要更完整的知识体系,可以继续了解「Vibe Coding 实战课程」。
查看课程详情