cocos2dx 制作单机麻将(六)
当项目做到这时, 会发现项目结构不是太美. 如果接着按照这样面向结构的方式写的话, 就会非常的乱. 这章我们来讨论如何用面向对象的方式写麻将.
标准的麻将(联网的) 会分为服务器模块, 客户端模块, 逻辑模块. 服务器模块必须由逻辑模块支持, 客户端模块很少用到逻辑模块,大多是从服务器发来的判断结果,必要时还是会用到逻辑模块. 因为逻辑模块需要共用, 所以里面都是调用的接口,返回服务器和客户端需要的结果值.
举个例子
客户端触发开始发生给服务端 > 服务端开始游戏 > 通过逻辑模块得到整理好的牌堆 > 服务端通过牌堆和规则计算拿到各个玩家的手牌 > 把手牌数据发到指定客户端 > 客户端根据发来的牌数据显示牌 > 用户打牌 > 客户端把用户想打的牌发送给服务端 > 服务端通过逻辑模块得出该牌能否打并计算是否有吃碰杠之类的操作, 如果能打(如果有操作牌也是这样) > 把这张能打的牌发给客户端 > 客户端得到该牌并显示出牌动画
所以客户端只负责接受需要绘制的消息, 那些逻辑一般都交给服务端. 客户端的逻辑一般就是判断服务器发来的是哪种消息, 根据不同消息绘制界面.
现在想想 服务端模块, 客户端模块, 逻辑模块 哪个最难?
最难的应该是逻辑模块, 其次是客户端, 最简单是服务端. 服务端最简单是因为他只负责发送数据,那些逻辑判断只要调用逻辑模块, 当然还要存储所有玩家的牌数据. 客户端的话因为也可能要绘制各个玩家牌,所以也要存储玩家的牌数据.
项目内容每增加一点, 服务端只要添加一个值来存储增加的内容, 而逻辑和客户端就要改很多东西.