跳到主要内容

用面向对象的方式实现 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游戏主逻辑,负责调度以上各类

Card、Deck、Hand、Game 四个类的框架定义完成

三、主逻辑放在哪里​

整个程序的主流程会写在 Game 类中。在游戏推进的过程中,Game 会去调用其他几个类:从 Deck 中取牌、往 Hand 中加牌、通过 Card 判断点数等等。各个类各司其职,最后由 Game 把整个流程串起来。

小结​

本篇完成了面向对象实现 21 点的第一步——对象分析与类框架搭建:

  1. 从游戏规则中提炼出四个对象:庄家/玩家(统一抽象为 Hand)、单张牌(Card)、一副牌(Deck);
  2. 定义出 Card、Deck、Hand、Game 四个空类,明确各自职责;
  3. 确定主逻辑由 Game 类统一调度。

框架搭好后,后续就可以逐个类去填充具体实现,在开发过程中不断完善。下一篇我们将从 Card 和 Deck 开始,把牌的逻辑真正写出来。

课程推荐

想系统学习这门课程?

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

查看课程详情