[Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html
在此补充一下Socket的验证机制:
socket登陆验证。会采用session会话超时的机制
做心跳接口验证
保持一个长连接
也为推送消息提供
======这段是一个以前同事给我的JAVA Socket验证机制的例子===========
socket通信一般是找不到头这些的,要自定义封装通信消息类
如开源框架netty,消息进出都有自定义加密和选择性压缩的
socket不想http一样能找到某个方法,他就监听ip的某个端口
通过解析消息类中的主题方法,抽象接口实现的
消息接收:
<ignore_js_op>

其他图就不上了,主要是一个概念的普及
===================================================
前言:
如果你有仔细分析学习笔记一中的代码,那么相信你对python以及Firefly已经有了一个大致的认识,那么剩余的不认识的也就没关系了,官方提供了开发手册,所以就不逐步深入出笔记了,该有的,会有人发的。
开始准备工作:
【目标】
现在,我们的目标是一个卡牌游戏,我选择了传统的斗地主来进行开发。
【开发前的准备】
任何一款游戏都会有策划书的,策划书我们就免了,因为斗地主谁都会,而且也有前辈的开源作品,所以我们的准备工作是,清楚斗地主的游戏规则,和程序的实现方案。
于是,翻了翻互联网资料,找到一个参考资料:
http://blog.csdn.net/cq361106306/article/details/7855582
虽然是JAVA版的,但是原理都是一样的,函数也差不多一样的,不一样的只是内置函数的写法和语法规范而已,要看懂肯定是没有问题的
【服务器架构】
首先,我们需要一个LoginServer,这是毋庸置疑的事情
然后,我们需要一个游戏主服务器mainGameServer
(也许,你会需要一个排行服务器)
最后,我们则需要一个聊天服务器chatServer(既然是网游,没有聊天系统不等于单机么?)
本身这个游戏不复杂,所以我们就这样设定吧。
【服务器架构图】
<ignore_js_op>

题外话:不知道大家有没有做过私服,出名的如传奇,诛仙,QQ西游私服。里面的结构大概也是如此,不说它到底是有用还是无用,存在即是合理。这点,在我还是小白的时候就深以为然,以前老听人家说GS报错,GS未启动,感觉好牛X好高端的样子,后来渐渐明白,其实就是GameServer。
好了,言归正传,既然架构图有了,游戏方案也有了,那么下一步就是数据建模了,数据结构一定要做好,因为这跟你服务器的性能和扩展息息相关。
在这里我用的工具是PowerDesigner这款软件进行建模,方便又实用,易管理,易查询
首先我们确定几个核心的表
User
-----userMain 用户主表,存放用户账号,密码,余额等重要信息 表类型:InnoDB,这么重要的表,你肯定要支持事务回滚来着。
-----userBase 用户基础表,存放一些只做查询用的字段,如头像,个人简介
Log
-----loginLog 用户登陆日志
-----actionLog 用户操作日志
-----rfloat 用户资金流水
-----gameLog 游戏记录日志
Main //暂时只有两个,因为业务逻辑暂时不忙管,只管游戏
-----sysMsg 系统消息表
----- userMsg 用户消息表//暂时弃用,因为还不涉及到用户短信,至于为什么要和系统消息分开,是因为消息表数据庞大
============================持续更新============================
度过了一个愉快的周末,继续更新
贴上数据模型的代码以及数据库模型文件
<ignore_js_op>

<ignore_js_op>

<ignore_js_op>

库建设完毕,现在开始一些基本模块的封装,在这里说一点,不是所有的模块都需要封装,看需求和维护而定,我个人需要封装是因为我封装后能让我开发效率提高,每个人情况不一样,底子也不一样,根据自身情况来。
在这里我把每个模块及其包含的内容列出来(持续更新):
模块名 | 方法名 | 方法说明 |
用户基础模块 userModel |
userLogin | 用于用户登陆时的方法 |
regUser | 注册用户的方法 | |
loginCheck | 检查用户登陆状态的方法 | |
heartCheck | 用户心跳检测的方法 | |
fundsCheck | 检查资金是否异常的方法 | |
loginUpdate | 登陆时更新用户登陆记录并写日志的方法 | |
sendSysMsg | 发送系统消息的方法 | |
sendUserMsg | 发送用户消息的方法 | |
readSysMsg | 读取系统消息并更新状态的方法 | |
readUserMsg | 读取用户消息并更新状态的方法 | |
userTalk | 用户在游戏中发言的方法 (这里我考虑是像QQ斗地主一样固定发言防止作弊, 还是不限制用户发言,个人觉得防作弊好一点) |
|
日志模块 logModel |
sysLog | 系统日志的方法(保存log日志的方法) |
userLoginLog | 用户写登陆日志的方法 | |
userActionLog | 用户写操作日志的方法 | |
gameResultLog | 游戏结果日志的方法 | |
rfloatLog | 写资金流水的方法 | |
游戏主模块 gameMainModel |
showUserCount | 在线用户统计的方法 |
pushMessage | 推送消息的方法 | |
joinGameQueue | 加入游戏队列的方法 | |
gameMatching | 匹配玩家并生成游戏空间,随机用户顺序的方法 | |
shufflingLicensing | 洗牌发牌的方法,并整理排序 | |
grabLandlord | 抢地主的方法 | |
landlordCards | 地主牌分发及公示的方法 | |
showCards | 出牌的方法 | |
doubledFunds | 炸弹倍数翻倍计算的方法 | |
cardAlarm | 报警的方法 | |
settleAccounts | 结算并将用户清除队列的方法 | |
系统模块 sysModel |
mysqlObject | 数据库模块,具体方法不再罗列,这里采取封装主从库 |
memcacheEx | memcached封装的模块,用于分布式集群 |
好了,关于学习笔记二卡牌游戏开发模型的设计就告一段落了,学习笔记三将开始对各个模块进行逐个封装。现在模型有了,开发思路就越发的清晰,当模块封装完毕之后,就是服务器端的开发了,我们一步步走,不一口气吃成一个胖子,所以,学习笔记三将持续很长一段时间逐个更新,因为毕竟我只有晚上才有时间去鼓捣,所以耐心等待吧,我没有已有代码参考,不能复制粘贴,所以速度会稍微慢一点
另外,诚请一枚AS攻城狮帮我完成笔记,有意思的圣兽请联系我QQ:251920948,跪谢
[Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计的更多相关文章
- [Firefly引擎][学习笔记一][已完结]带用户验证的聊天室
原地址:http://bbs.9miao.com/thread-44571-1-1.html 前言:早在群里看到大鸡蛋分享他们团队的Firefly引擎,但一直没有时间去仔细看看,恰好最近需要开发一个棋 ...
- [Firefly引擎][学习笔记四][已完结]服务器端与客户端的通讯
原地址:http://www.9miao.com/question-15-54981.html 传送门:学习笔记一学习笔记二学习笔记三 前言:学习笔记三是模块封装,这个在持续开发中会不断更新, 因为写 ...
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- JavaScript权威设计--jQuery,Ajax.animate,SVG(简要学习笔记二十)[完结篇]
1.$和jquery在全局命名空间中定义的唯一两个变量. 2.jquery是工厂函数,不是构造函数.他返回一个新创建的对象. 3.jquery的四种调用方式: <1>传递C ...
- 吴裕雄--天生自然python学习笔记:python 用pygame模块游戏开发
游戏开发在软件开发领域占据了非常重要的位直.游 戏开发需要用到的技术相当广泛,除了多媒体.图片.动 画的处理外,程序设计更是游戏开发的核心内容. Py game 是为了让 Python 能够进行游戏开 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- muduo学习笔记(二)Reactor关键结构
目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...
随机推荐
- DOS批处理命令-几个固定名称的变量
批处理中有一些变量的变量名称是固定的,具有特定的意义,接下来,我们来看看这些有特定意义的变量到底有什么意义. 1.%CD% 当前路径的路径名[盘符 + 路径] - 現在のディレクトリ文字列に ...
- lstm-思想
RNN(Recurrent Neural Network) 今天我这里讲到的RNN主要是上图这种结构的,即是Hidden Layer会有连向下一时间Hidden Layer的边,还有一种结构是Bidi ...
- ###《VIM实用技巧》
###<VIM实用技巧> #@author: gr #@date: 2015-11-20 #@email: forgerui@gmail.com <VIM实用技巧>阅读笔记. ...
- iOS学习——iOS视频和推荐网站
最近有人问有没有iOS学习的相关资料,就简单的把自己的知道的和资源共享一下: 个人感觉iOS开发人才饱和,培训泛滥,个人推荐后台升职空间大和web前端竞争小. [链接][Ronda收集整理]2014年 ...
- contentMode各种样式展示
我们用图片来展示下contentMode的各种样式. 原图size为1155 * 715imageView的size为335 * 607 一.UIViewContentModeScaleToFill ...
- CSS选择器介绍
一.元素选择器 E{...} 二.属性选择器 E[attr]{...}:指定该CSS对具有attr的元素起作用: E[attr=value]{...}::指定该CSS对具有attr的值为value的元 ...
- css笔记--web端小于1px设计的处理方法
HTML代码 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...
- 'WinMain' : function cannot be overloaded
Create a MFC Application (UNICODE), paste following code in one of your cpp file. int APIENTRY WinMa ...
- winform 与 html 交互 简单案例
本文主要简单的记录winform如何与html文件中的信息如何进行交互,即在winform中加载html界面,从而可以进行相互调用. 1.新建一个winform项目,若要在winform中加载html ...
- log4net基本日志使用笔记[windows application]
Ref: http://www.cnblogs.com/wangsaiming/archive/2013/01/11/2856253.html http://www.cnblogs.com/zhouf ...