[置顶] 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.微信公众平台开发 ...
随机推荐
- [wikioi]合并果子
http://wikioi.com/problem/1063/ 这题是贪心+堆.主要想练习一下堆的写法.算法导论里的方法名是heapify()等,但大家经常用更直观的down(), up()方法(向上 ...
- RxJava开发精要5 – Observables变换
原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转 ...
- leetcode面试准备: Game of Life
leetcode面试准备: Game of Life 1 题目 According to the Wikipedia's article: "The Game of Life, also k ...
- JAVA线程优化
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- Form.KeyPreview 属性2
在使用.Net Framework编写窗体应用程序的时候,有时有需要响应窗体的按键消息. 当窗体上没有任何其他控件的时候,窗体是可以直接响应这些消息的. 但是当窗体上有其他控件时,会发现窗体再也不会响 ...
- Eclipse设置、问题解决方案
Eclipse设置: 1.如何把eclipse关闭提示调出来? 可以这样打开这个提示:选择 Windows --Preferences,在左边树上选择“General” --“Startup and ...
- POJ_1269_Intersecting_Lines_(计算几何基础)
描述 http://poj.org/problem?id=1269 给出两条直线,判断它们是平行,重合,还是相交,如果相交,求出交点. 分析 比较裸的一道题.学习了直线的写法(参数方程) #inclu ...
- jQuery append xmlNode 修改 xml 内容
jQuery append xmlNode 修改 xml 内容 http://blog.darkthread.net/blogs/darkthreadtw/archive/2009/04/29/jqu ...
- CONTAINING_RECORD 宏
Windows中提供了一个宏 #define CONTAINING_RECORD (address, type, field ) ((type *)( \ (PCHAR)(address ) - \ ...
- [Irving]SqlServer 拆分函数用法
drop function dbo.split 删除自定义函数 dbo.split 函数名 函数 dbo.splitcreate function dbo.split(@c varchar(100 ...