[置顶] mmog游戏开发之业务篇
这周不是很忙,因为我们的游戏开发了近一年,由于公司的业务调整,在游戏开第二服的时候,老板果断的把项目停到了。
感觉超级的不爽啊。因为这个游戏项目像我的孩子一样和我一样成长,里边的大概的业务逻辑都是偶实现的,比如
基础系统里的,任务系统,背包系统,公会系统,相关副本系统,商城系统,人物属性相关,运镖,怪物AI,技能相关,地图等等,差不多游戏里的所有业务我都有所涉及
那么对于一个业务是如何设计,如何少的产生bug,和一些漏洞呢。
任务系统
在这里我表述一下,如果是C语言的开发,那么任务系统,属于玩家一个的一个必须要序记住的的数据,因为,我们要在玩家身上找到。
好,那我们就记下来了任务ID,但是我们发现一个游戏系统有很多类型任务,比如
主线任务----主要特征表现在必须做的,不可以放弃的。一般主线任务,同一时刻只允许纯在一种
支线任务----同时可以做很多,同时可以接受很多
循环类型任务-----这个任务可以一天循环做几次。
等等。
因此在设计表的时候涉及到类型,次数也要涉及。还有完成条件,打怪的个数,等等能所有能涉及到的东西。
涉及协议相关的时候,我们要知道任务分为几种状态,可以接,接受状态,运行状态,放弃状态,完成状太。
那么,我们就要涉及到请求接受任务,任务在运行时,随时都可能变化的是刷怪个数,采集否,是否在某个地图等等条件,如果达到了,立即告诉前端,该任务是可以完成了,
如果玩家点击完成,那么我们将送一些奖励给玩家。做一些任务的变化等等。
这里这是大概的说一些基本的东西,很多东西都是需要慢慢的积累下来了。
背包系统
背包系统算是业务系统中比较复杂的了。为什么这么说呢,因为一旦设计不好,那么将会带来效率的问题。
尤其是在道具的堆叠,整理,移动,拆分,交换等等一些操作。
背包也算是玩家的一个重要数据,因此我们会在玩家内存上开辟一段内存。
背包开发当然一定会涉及到道具,那么道具怎么分呢,目前主要我们主要分成道具和装备两大类。
背包的一个个格子,我们就创建一个结构体,这个结构体里是我们使用共用体表示道具和装备。,基本的相同元素,包括全局唯一id,定义id,等,但是装备是具有其他属性的,比如洗练,打造相关。
当我们想加一个道具到背包中,我们就会提供一个接口,来创建一个格子实例,来判断是否能加入,如果判断可以,就直接加入,否则,告诉玩家失败。
设计协议,我们就要有几下,添加道具,道具移动,道具背包移动和背包的道具移动到仓库。消耗背包中道具,具体协议当然是根据需要变化的数据,保持前后端一直。
这里不在赘述。
地图/副本系统
该系统其实也算是游戏业务逻辑的比较复杂的了。
副本其实也是地图,只不过,副本是相对来说人少的,或者说个人的。对服务器压力来说相对比较小,因为对玩家视野,同屏压力较小。
但是我们主世界地图来说是不一样的,所有人都在主世界地图,我要看到其他人,同屏压力就非常大,对与前端也是很大。
那我们是如何设计呢,首先我们要知道二维地图,都是用小格子来表示,一般小格子都是40像素左右的矩形。我们又提出一个冬天区域有包含多少个字,每个格子都可以有那些玩家。
当一个玩家进入到某点,会进行搜索,把相关数据广播出去。同事,该动态区域也会记住玩家ID。其他玩家同事会看到其他玩家。
玩家身上也会记住事业内的道具的内存ID,玩家内存id,怪物内存id.等等。
副本呢,我们会在通过一个地图定义和一个副本定义表来在副本内存池中申请一段内存,那么在该副本的所有数据进行记录。进行一些玩法加载。
公会系统
公会系统唯一要注意的就是如何实现的权限控制。我么你是使用二维数组来进行权限的的控制。其他的就都是在公会内存中操作了,或者在公会的大类里搞来搞去代码了。
怪物AI。
其实怪ai,涉及到东西比较多了。
比如技能,视野。在整个世界里,每个怪物都要tick一遍,因为怪物所有做的东西都是服务器去控制的。玩家去做打怪,怪物就要做一些反应,比如低级怪就要被打,不去攻击玩家,而高级怪可能要去攻击玩家了。
在攻击的时候,根据怪物技能,攻击玩家,然后通过玩家的一些基本攻防的技能来计算伤害值等等。
在业务系统还有很多东西要描述了。在这里不一一赘述了。如果是C++那么就每个都是一个类,然后对这些类操作。
欢迎访问我的博客,跟多文章访问http://blog.csdn.net/wallwind
[置顶] mmog游戏开发之业务篇的更多相关文章
- [置顶]unity常用开发套件
维京人骨骼动画制作(Unity 2D Animation资源包使用指南) 维京人骨骼动画制作2(Unity 2D IK资源包使用指南) -------------------------------- ...
- [置顶] SPL讲解(4)--Criteria操作篇
概念 以前一篇文章中,描述了实体Entity的操作,很明显,仅仅实体的操作是远远不够的.如:我们经常会根据查询条件从数据库中获取记录集并绑定到DataGrid上,会根据条件进行批量的Update和De ...
- [置顶] Java Web开发教程来袭
Java Web,是用Java技术来解决相关web互联网领域的技术总和.web包括:web服务器和web客户端两部分.Java在客户端的应用有java applet不过现在使用的很少,Java在服务器 ...
- [置顶] SPL讲解(7)--Query高级篇
SmartPersistenceLayer 2.0 之Query高级查询篇 总述 在看了前面的功能后,大家都会考虑到多表之间的查询怎么办.在这里,我想先讲一下查询在应用系统中的复杂性/重要性/可行性. ...
- [置顶] Django 微信开发(一)——环境搭建
Django 微信开发(一)——环境搭建 随着移动互联网时代的到来,微信——一个改变着我们生活的产品悄悄走近了我们的生活.我们不得不觉得自己很幸运,自己能在这个世界上遇到像QQ.微博.微信这样优秀的产 ...
- [置顶] Kendo UI开发教程: Kendo UI 示例及总结
前面基本介绍完Kendo UI开发的基本概念和开发步骤,Kendo UI的示例网站为http://demos.kendoui.com/ ,包含了三个部分 Web DemoMobile DemoData ...
- [置顶] 【GBT28181开发:SIP协议实践】之设备远程启动
下面学习的是设备远程控制的流程,和设备信息.设备目录.设备状态的流程差不多,主要是描述的协议字段不同,模拟SPVMN系统向源设备发送远程启动控制指令,记录下交互的消息,详细研究了下: 转载请注明出处: ...
- [置顶] (游戏编程-04)JAVA版雷电(奇迹冬瓜)
注:运行环境必须要JDK 先为大家送上游戏截图 接着在最后有代码下载的链接地址 1.游戏开始动画和主界面 关卡与boss 结束画面 代码下载地址 点击打开链接
- [置顶] Android 高级开发 源码 UI 缓存 网络
1.Android 源码剖析 性能优化 开源代码 2.Android UI效果源码 3.http://mzh3344258.blog.51cto.com/1823534/d-3 4.微信公众平台开发 ...
随机推荐
- MySQL查询表结构的SQL小结
mysql查看表结构命令,如下: desc 表名; show columns from 表名; describe 表名; show create table 表名; 示例: use testDB; # ...
- JAVA大数类练手
今天突然看到了OJ上的大数类题目,由于学习了一点大数类的知识.果断水了6道题......都是非常基础的.就当的练手的吧. 学到的只是一些大数类的基本操作.以后多做点这样的题,争取熟练运用水大数题... ...
- 浏览器编辑HTML
运行效果: 浏览器编辑HTML // test.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...
- Case Studies: Retail and Investment Banks Use of Social Media
The past couple of months have seen an increased acknowledgement of the role social media has to pla ...
- POJ 2253 Frogger(最小生成树)
青蛙跳跃,题意大概是:青蛙从起点到终点进行一次或多次的跳跃,多次跳跃中肯定有最大的跳跃距离.求在所有的跳跃中,最小的最大跳跃距离SF-_-(不理解?看题目吧). 可以用最小生成树完成.以起点为根,生成 ...
- .net web 点击链接在页面指定位置显示DIV的问题
做了一个网页,放了两个DataList ,一个显示科室,一个显示科室中的人员,由于科室太多,一屏显示不全,为了在页面刷新时记住上次浏览位置,所以给页面加了MaintainScrollPositionO ...
- c# 无损高质量压缩图片代码
/// <summary> /// 无损压缩图片 /// </summary> /// <param name="sFile">原图片</ ...
- jQuery与XML
jQuery与XML 快而强的遍历系统,华丽丽的选择器语法,这或许是jQuery 那么流行的原因.当然它还有详尽的文档.它主要是用来处理HTML的,但在这里妳会看到如何应用到XML. 使用jQuery ...
- Android Activity管理类
public class AppManager { private static Stack<Activity> activityStack; private static AppMana ...
- ruby编程语言-学习笔记5(第5章 语句和控制结构)
以下是2种表达方式一样. if expression code end if expression then #推荐这种形式 code end expression的值不是false或nil,则cod ...