浅谈棋牌游戏开发框架架构

现在来和大家分享下怎么架构和实现框架来满足棋牌游戏需求的。一、原型符合棋牌项目框架,快速换皮,快速融合。多渠道多包体。自由拆装。一次开发核心玩法,快速自由迭代各种市场版本。二、架构设定解耦,复用性,拓展性多自由度、可分拆多项目开发,符合敏捷需求品质保证体系高效开发支撑公司大部分业务三、模块设计概要减少客户端对Cocos2d-x引擎的依赖程度和降低耦合度,将引擎必要的初始化、逻辑更新、渲染、资源管理等交给底层处理,是客户端逻辑开发不需要过于依赖引擎层,同时,为了避免客户端代码中
现在来和大家分享下怎么架构和实现框架来满足棋牌游戏需求的。

一、原型 符合棋牌项目框架,快速换皮,快速融合。多渠道多包体。自由拆装。 一次开发核心玩法,快速自由迭代各种市场版本。

二、架构设定解耦,复用性,拓展性多自由度、可分拆多项目开发,符合敏捷需求 品质保证体系高效开发支撑公司大部分业务

三、模块设计概要 减少客户端对Cocos2d-x引擎的依赖程度和降低耦合度,将引擎必要的初始化、逻辑更新、渲染、资源管理等交给底层处理,是客户端逻辑开发不需要过于依赖引擎层,同时,为了避免客户端代码中频繁、直接的调用平台相关诸多功能,将平台相关的功能封装在引擎封装模块内。这部分我们可以叫做BaseCore部分。

1、引擎封装模块 (EngineSystem) Cocos2d-xAPI的封装整合,绑定到Lua。关掉3D模块,另外不再使用扩展库。 达到可以随意切换Cocos版本,现阶段选择比较稳定的版本 自定义控件等绑定到Lua,跨平台特性处理、支付相关模块特殊处理、脚本加密解密处理, 必要的时候,可以将脚本层换成js绑定,然后将逻辑代码修改成Lua的,就可以支持H5了。

2、 UI系统(GUISystem) UI的一些基类,例如弹出框可以将如下属性封装成一个Dialog对象,派新类自然拥有这些属性了。可设置大小并且带有关闭按钮的一个基本视图,另外子类不再需要去设置dismiss了。还有类似于Toast的创建,以及一些基本控件完全可以架构一个工厂对象,从而省略很多的基本控件的构造代码。当然也可以在Lua中通过配置文件来配置基本UI。大雄游戏认为,健全的纹理管理规则及清理规则,纹理缓存在场景切换后不会移除。可以考虑逐帧加载,将纹理分级,公共资源可以不remove,先删除可能不再使用的帧动画资源等。 特别设计有限状态机管理纹理内存,动态控制空间。以及利用状态机的事件特性来控制动态跳转。

3、 网络模块(NetSystem) Socket采用TCP/ip协议,封装伯克利套接字接口,设计接受和发送队列,通过互斥信号锁来处理队列共享问题。因为join函数调用的地方会阻塞主线程,我们可以考虑用detach方式,完全是交给系统处理,另外可以考虑第三个线程来开辟世界聊天或活动的这种比较频繁的协议(视情况),并且将协议解析及Lua的table序列化放在C++层。暴露基本接口给Lua脚本层,在脚本层处理网络心跳、断网重连相关的逻辑。顺便我们要支持IPv6的处理,这里只需要将地址解析、Socket初始化函数做兼容。接受子线程跟UI线程同步使用Cocos2d-x提供的事件来处理,然后C++将这个数据POP到Lua层,Lua这边根据协议头回调函数,或者是通过事件的方式派发到具体的业务。对于一些通用的协议,Lua层设计成抢占方式,或者是添加一个tag来标记目前这条协议是处于模块。设计模式上考虑使用生产-消费模式,尽量让协议的读写跟业务内容解耦。协议层的封拆包全部用python脚本生成的lua文件自动化处理,发送跟接受都是接受一个table,省去客户端的部分工作。Http,我们可以封装,上传下载,以及我们日志上传相关的模块等。如果使用3.11以下版本,需要替换libcurl,针对苹果IPv6问题。结合日志模块,将协议交互写在一个文件方便查看 架构图如下:

4、数据管理模块(DBSystem) 类似于ORM的设计架构,调用者不需要关注实现细节,来处理一些数据、音效相关,如音量关闭,音量大小等类似数据的处理 一些可以缓存在本地的数据,如一些公告之类的文本信息。

5、更新模块(UpdateSystem) 资源热更新,用于部分Bug修改等。模块下载,大厅可以选择部分模块进行热更,下载完后,即可重新启动虚拟机,或reset Package。达到真正热更意义。

资源热更新: 通常我们会在游戏中会出现一些小Bug或者需要更换部分图片素材,或者部分配置文件。来适应运营策略的部分小版本更新。

模块化更新: 大厅合集中,下载相应的模块,然后再点击就可以玩相应的模块了。技术设计上,可以将资源热更下来,即刻reset Lua的Package。或者将下载的模块添加到搜索路径。

版本管理: 1、trunk维护一个BaseCore版本,有改动,其它所有包体都要考虑更新版本。作为一个大版本处理。后期项目多了,有改动可必须拉分支进行修改,然后同步到trunk。 2、业务模块在BaseCore没有改动的情况下,完全可以不用更新程序包,直接热更新即可。作为一个小版本。小版本可以在一个新迭代后拉一个脚本Tag版本。 3、SVN管理。需要严格控制版本的关系。并且做好记录。6、音频模块(SoundSystem) 统一音频解决方案,整个游戏中只有一套API 可以区分平台自动匹配资源名称,如android自动将后缀改成.ogg。iOS改成mp3等提供音频文件预加载

义乌市森焱网络公司专注开发棋牌游戏十一年,本着顾客第一,质量第一,售后第一的理念用心做好每一款游戏,森焱有你们才精彩!!!

  • 打赏
  • 分享
分享到...
义乌市森焱网络
请选择打赏方式
义乌市森焱网络
义乌市森焱网络 义乌市森焱网络
  • 微信
  • 支付宝