zoukankan      html  css  js  c++  java
  • [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,跪谢

  • 相关阅读:
    c# linq查询的等于大于符号是什么意思?
    c# Socket tcpClient处理连接超时方式timeout
    不同网段服务器与客户端连接问题解决方法TCP/IP_C/S
    Http请求响应及SpringMVC相关注解解析
    Nginx部署项目,转发规则,负载均衡配置
    Linux redis设置后台启动
    Linux centos7安装Jdk nginx redis
    SpringCloud整合SpringSecurity JWT进行认证 ,鉴权
    C#中class与struct的区别概述
    列举ASP.NET 页面之间传递值的几种方式
  • 原文地址:https://www.cnblogs.com/123ing/p/3905158.html
Copyright © 2011-2022 走看看