写一个扑克牌游戏需要解决以下几个问题:
(1)每张牌如何编码
对于编码最简单的莫如从0-53(不设大小王的游戏中是0-51),不过为了计算花色和点数,我们编码的时候
一定是一个花色从小到大排,然后是下一个花色的从小到大。
比如是这样的顺序:红桃 A-K 方片A-K 黑桃 A-K 梅花 A-K
这样给定一张牌的编码通过下面的计算就可以得到花色和点数
花色值= 编码/13
点数=编码%13+1
(2)牌的组合规则(如3个A, 2个A都可以组合成一手牌)
在扑克牌游戏中,我们每次出牌有能出一张,两张,三张,甚至更多,也有可能放弃出牌,这样我们就不应该
把 一张牌 或 一个牌的集合直接作为出牌的单元,而是增加一个抽象的 “一手牌“ 即Hand类,Hand类抽象
了参加出牌逻辑运算的最小信息单元. Hand之间可以提供><=等逻辑比较操作,同时Hand还提供了诸如判断一张
牌能否加入此手牌中,比如在争上游游戏中现在是对A, 如果加一个A就变成一个A炸弹,但加一个2就不可以了。
(3)出牌规则(包括大小,输赢等判断)
由于出牌有一个大小,前后,积分的问题,所以必须抽象一个裁判类来做这些工作,Judge类决定了该哪一方
出牌,然后发消息通知这方,得到其出的牌 即一个Hand对象后,采用其内建的规则去做判断,(有的游戏还需要计分)