这几天想进一步熟悉下cocos2dx,所以就做了一个地方性的单机扑克游戏,本来想直接download源码学习的,但发现貌似网上没有,或者是我找不到。
边做边改,开始也没想到具体框架,就一个大框架,现在完成后,再整理一下,发现基本模型没有偏差,所以框架性的bug几乎没有,只有一些逻辑性的bug。
整理一下框架,首先,要有一个独立的卡牌操作类, 包括以下方法:
初始化必要信息是必须的,如卡牌的序号,大小等,这些序号等影响到卡牌在界面上的排列,有利于规则检查的方便性。
该类主要功能是卡牌操作的检验,确保出牌的正确性。这个类最好是单例或者是静态方法。
玩家类主要作用是记录一个玩家的信息和玩家所具有的功能。 玩家状态包括是否托管,是否轮到自己出牌,是否出完所有牌等等。
状态里重要的一个是是否是主玩家,这里说的主玩家指的是显示手牌的玩家,我们当然不能把别人的手牌显示到界面上,还有再其他操作到时候都会判断玩家是否是主玩家,特别是界面上的不同相应。
方法主要是打开游戏时获取一些必要的记录信息,比如上次玩完后的积分等。
每一局游戏开始后,状态与手牌列表的重更新与重设定。
每次轮到该玩家出牌时的初始化,比如剩余出牌时间,上一轮出牌的清理等。
玩家类最重要等是卡牌操作,出牌操作会调用卡牌操作里等方法来检测是否合法,当然如果不是主玩家,会调用ai来出牌
如果玩家选择不出牌,要做的事就几乎没有了,但这里要判断如果是该玩家必须出牌的情况,比如上轮该玩家最大,大家都不出。
因为是单机游戏,所以少不了人工智能类,主要是如何出牌,情况包括很多,比如上一轮没人出牌,机器人如何出(一般是打一张最小牌)。ai类的设计看各人水平了,反正我做的是很菜的。
最后一个重要类就是游戏管理类了,记录当前局游戏的状态,如玩家列表,当前出牌的玩家,当前出的牌等等。
主要成员函数是游戏开始时做一些处理比如调用卡牌类洗牌,分牌,获取所有玩家状态等。
游戏进行时,记录当前出牌玩家,当前游戏状态,出牌状态,判断游戏状态(游戏是否该结束等)等。
游戏结束后,根据状态计算得分,清理桌面等。
以上其实是逻辑部分,界面部分也有相应类,我们知道编码的时候逻辑跟界面分开是最好的。界面类就不介绍了,是个躯壳,灵魂如果做的好,整个容还是方便的。
这个设计也可以改造成网游形式,把非主玩家调用人工智能类改成从服务器获取其出牌类型等就可以了。棋牌游戏市面上数不胜数,结构上来说相对比较简单,适合有一定基础的码农练手,希望能帮助到大家。