跳到主要内容

Python 扑克牌游戏开发:实现一手牌(Hand)类

在前面我们已经完成了单张牌(Card)和一副牌(Deck)的设计,接下来需要处理“一手牌”的逻辑。无论是玩家还是电脑(庄家),手中的牌在逻辑上都是完全一样的,因此我们只需要设计一个通用的 Hand 类即可。

本文属于扑克牌游戏开发的系列教程,重点讲解 Hand 类的初始化与加牌方法,并说明对象作用域在其中的应用。

目标​

创建一个 Hand 类,用来表示玩家或庄家手中的牌。该类需要具备两个基本能力:

  1. 初始化:能够保存一手牌(初始为空列表)。
  2. 加牌:能够向这手牌中追加一张牌。

由于玩家和庄家的手牌逻辑一致,我们不需要分别创建“玩家类”和“庄家类”,而是复用同一个 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),将传入的牌追加到当前这手牌的列表中。

image-20261028152925295

测试与结果​

代码编写完成后,Hand 类已经具备了初始化手牌和添加牌的能力。后续在游戏主逻辑中,玩家和庄家都可以各自实例化一个 Hand 对象,并通过 add_card 方法发牌,验证手牌列表是否正确追加。

小结​

本节完成了 Hand 类的核心设计:

  • 使用 __init__ 初始化 self.cards 空列表,保存一手牌。
  • 使用 add_card(self, card) 方法向手牌中追加一张牌。
  • 通过对象作用域的理解,明确了不同类中同名属性 cards 互不冲突。
  • 玩家与庄家共用同一套手牌逻辑,简化了代码结构。

下一步即可在游戏流程中调用 Hand 类,实现发牌与手牌展示。

课程推荐

想系统学习这门课程?

你已阅读完本文。需要更完整的知识体系,可以继续了解「Vibe Coding 实战课程」。

查看课程详情