扑克牌算是老少皆宜的经典款游戏之一,玩法多样,但万变不离其宗,想要编写扑克牌类游戏,首先得整理清楚发牌的逻辑。
1. 游戏介绍
4名牌手打牌,电脑随机將52张牌(不合大、小王)发给4名牌手,并在屏幕上显示每位牌手的牌。
2. 面向对象程序设计
既然只做发牌,那么我们就只需要整理清楚发牌的过程中所牵涉到的对象即可。其实整个发牌的过程中,所牵扯到的只有牌,但分三种不同的情况显示,第一个是单张牌(Card),第二个是一整副牌(Poke),第三个是玩家手里的牌(Hand),三个对象类编写出来,我们就可以很清晰地完成整个发牌的过程。
3. 程序设计步骤
设计类:发牌程序设计出三个类:Card类、Hand类和Poke类。
Card类:Card类代表一张牌,其中,FaceNum字段指的是牌面数字1~13,Suit字段指的是花色,”梅”为梅花,”方”为方块,”红”为红桃,”黑”为黑桃。
Hand类:Hand类代表手牌(一个玩家手里拿的牌),可以认为是一位牌手手里的牌,其中,cards列表变量存储牌手手中的牌。可以增加牌、清空手里的牌、把一张牌给别的牌手等操作。
Poke类:Poke类代表一副牌,我们可以将一副牌看作是有52张牌的牌手,所以继承Hand类。由于其中cards列表变量要存储52张牌,而且要进行发牌、洗牌操作,所以增加如下的方法。
主程序:主程序比较简单,因为有四个牌手,所以生成players列表存储初始化的四位牌手。生成一副牌的对象实例poke1,调用populate()方法生成有52张牌的一副牌,调用huffle()方法洗牌打乱顺序,调用deal(players,13)方法分别给每位玩家发13张牌,最后示四位牌手所有的牌。
4. 代码实现
Card类:
1>定义牌面数字及花色
2>定义初始化构造方法
3>定义牌面花色+数字拼接字符串显示方法
4>定义翻牌方法
5>定义牌的顺序号
Hand类:
1>定义初始化构造方法
2>定义牌面花色+数字拼接字符串显示方法
3>定义清空扑克牌的方法
4>定义追加扑克牌的方法
5>定义给予扑克牌的方法
Poke类:
1>定义生成一副牌的方法
2>定义洗牌的方法
3>定义发牌的方法
主程序定义:
运行结果:
完成!是不是很简单呢?自己试试看吧~
注:本文基于64位windows系统(鼠标右键点击桌面“此电脑”图标——属性可查看电脑系统版本)、python3.x(pycharm自动安装的版本, 3.0以上)。
文中代码内容所使用的工具是pycharm-community-2020.1,实践中如有碰到问题,可留言提问。