用面向对象的方式实现 21 点小游戏(一):对象分析与类框架搭建
面向对象的第一步不是急着敲代码,而是先把游戏里有哪些“对象”分析清楚,再逐个搭建类框架。
一、先分析:游戏里有哪些对象
在动手写代码之前,先回顾一下 21 点游戏的组成:
- 玩家(Player):我们自己。
- 庄家(Dealer):和玩家对战的另一方。
- 单张牌(Card):比如红桃 9、方片 9,去掉大小王后每张牌都是一个独立对象。
- 牌组(Deck):一整副扑克牌,去掉大小王共 52 张。
所以整个游戏可以归纳为四个核心对象:庄家、玩家、单张牌、一副牌。
这里有一个设计上的小技巧:庄家和玩家在游戏中的行为逻辑其实是一样的——都要发牌、要牌、停牌。因此不必分别写两个类,而是抽象出一个统一的 Hand(一手牌) 类,通过传入不同的参数来区分这是庄家的手牌还是玩家的手牌。
二、搭建四个类的框架
分析清楚后,我们先定义出四个类,把骨架搭起来:
class Card:
"""一张牌"""
pass
class Deck:
"""一副牌"""
pass
class Hand:
"""一手牌(庄家和玩家共用)"""
pass
class Game:
"""控制整体游戏流程"""
pass
四个类的职责划分如下:
| 类名 | 职责 |
|---|---|
Card | 表示单张扑克牌 |
Deck | 表示一整副牌,负责洗牌、发牌等 |
Hand | 表示一手牌,庄家和玩家共用,通过参数区分归属 |
Game | 游戏主逻辑,负责调度以上各类 |

三、主逻辑放在哪里
整个程序的主流程会写在 Game 类中。在游戏推进的过程中,Game 会去调用其他几个类:从 Deck 中取牌、往 Hand 中加牌、通过 Card 判断点数等等。各个类各司其职,最后由 Game 把整个流程串起来。
小结
本篇完成了面向对象实现 21 点的第一步——对象分析与类框架搭建:
- 从游戏规则中提炼出四个对象:庄家/玩家(统一抽象为
Hand)、单张牌(Card)、一副牌(Deck); - 定义出
Card、Deck、Hand、Game四个空类,明确各自职责; - 确定主逻辑由
Game类统一调度。
框架搭好后,后续就可以逐个类去填充具体实现,在开发过程中不断完善。下一篇我们将从 Card 和 Deck 开始,把牌的逻辑真正写出来。
想系统学习这门课程?
你已阅读完本文。需要更完整的知识体系,可以继续了解「Vibe Coding 实战课程」。
查看课程详情