前言
@审核 所有涉赌名称、术语已经去除。gitee链接也去掉了,恳请给与放行。
扑克的玩法非常多,常见的就有斗地主、跑得快、五十K、拖拉机等等。在国内的不同地方,同类游戏的玩法也有不同讲究。粗略估计,国内的扑克玩法,超过上百种。
要短期内开发出这么多款扑克游戏,需要先对大多数扑克游戏进行系统的分析,归纳总结,然后打造一条流水线,每一款游戏都使用相同的框架,使用通用的零组件,等等。
本文主要内容就是讲述这个设计过程。
1.算法库
扑克游戏的历史很悠久,能够广为流行的一个原因就是上手比较容易。就算在今天,如果说一个人没读过书就学不会打扑克,这没人会相信。所以我估计扑克游戏的算法,都是比较简单的。归纳一下,一般包括:
- 牌的大小(包括数字、花色等);牌的数目和分数;判断几张牌相同或连续;
- 还需要一些对一组牌进行操作的算法,比如取出、合并等等。
基于以上的分析,我们估计可以完成一套通用的扑克的算法库,能满足所有扑克游戏。最后实践证明,扑克算法库比预期稍微复杂一点,但仍在可接受范围内。
此外,我们很容易发现,很多流行的手游的玩法、功能层出不穷,开发团队频繁升级迭代。相反,扑克游戏的玩法相对固定,演化相对较慢。所以,在系统设计上,我们假定扑克游戏的数量有限,玩法有限,发展慢。这样的好处是流水线设计好之后,以后改动很小,维护工作量也比较小。
2交互UI库
扑克游戏可以归纳出3个核心要素:牌、规则、人(玩家)。对扑克游戏的一种高度抽象的描述是:按照一定的流程和规则,每个人通过选择选项、选择牌、选择数值,来争取获胜的一种游戏。
归纳了一下,玩家的行为包括以下3种:
- 对游戏流程中的选项,做出选择
比如斗地主中的叫地主、不抢,都是玩家自己要做的一种选择。出牌的时候选择不出,也是一种选择。后续会将“选项”称之为“命令”。
- 按照游戏规则,对牌进行选择。
比如选择要出的牌,分组摆牌等。
- 对数值(分数)进行选择。
比如叫分。
以上三种玩家的行为,决定了游戏客户端需要提供哪些业务级UI库,对应下面几种:
- 一组按钮
由玩家选择其中一个按钮;在业务层,称为命令选择器。
- 选牌或牌分组的UI
允许玩家在一组牌中选出符合要求的牌。牌分组UI则允许玩家将牌放入不同分组或按不同顺序排布。这2种在业务层都称为牌选择器</