ExcelAndJSON的设计决策

简介:

很多人看到ExcelAndJSON的第一反映是,这东西我的公司里面也有,那么我为什么用呢?


做为开发来说,每一个工具的存在,都是为了加快游戏开发的速度。那么从无到有,从有到精。有和没有,好用和不好用的差别,每一个都比前一个情况能提升50%的效率。(按IPD理论,极限速度是提升100%的效率,这里取保守数字)。


ExcelAndJSON这个工具,前前后后设计思考大约有一年的时间。在之前的开发中,我们使用大量的类似工具,数量有四五个,如果考虑评估阶段的话,是十几个。


这些工具或多或少都有这样那样的问题。而每一个问题,都是开发中的一个大坑。下面我们来看ExcelAndJSON是如何对这些问题提供解决方案的。


一、为什么选择Python开发?


如果选择C++,那么是可以使用Qt的。但C++领域,一直没有好用的开源跨平台Excel解析库。要么是闭源的,要么是只支持老格式xls不支持新格式xlsx,还有就是不能够跨平台。而这些,恰恰都是ExcelAndJSON本身必须具备的特性。手游开发,决定了必须跨平台。开源项目决定了依赖库必须也是开源的。Office的不断更新,决定了必须支持新格式。所以,C++被淘汰出局。


如果选择JS,因为我的方向是全栈式,目前来说在Node.js领域,npm中我没有找到非常好用的Excel解析库。很多库都是直接把Excel读成一个巨型JSON对象,这种写法是我所不能接受的,太SB了。还有一个原因在于,考虑未来扩展性,Node.js领域一直没有好用的UI库。另外,如果在web开发里面去找,我个人不是很喜欢BS架构的工具。所以,JS被淘汰出局。


如果选择Java。Java目前在前端手机游戏开发领域,已经没落。在后端,快速开发方向面临新兴方案的冲击(RoR, Python,Node.js,Go),而且高性能方向又始终干不过C++。对于各个公司自行修改维护能否找到适合的人,是个问题(前端几乎没人做Java,后端可能有人做Java)。所以,Java也被淘汰出局。


如果选择Python。首先,Python是跨平台的。其次,Python的学习速度很快,3~5年经验的人,上手时间顶多3~5天。再次,Python对于文件,文本,命令行处理,支持的非常之好。最后,Python里面也有方便的图形化工具,例如Qt就提供了Python版本。


所以,选择Python。


二、数组的作用


如果没有数组,那么在遇到成序列的数据时候,比如设计怪物AI中的技能部分,表的结构就会是类似这个样子:

length skill1 skill2 skill3 skill4
4 火球 冰箭 魔法盾 顺移
3 突刺 半月 重斩
1 治疗



如果你使用过类似这样的JSON结构,那么你应该知道,在填写数据的时候,容易出错,输出数据的时候会很难看(不管是填充null作为空数据,还是不输出空白格,都一样难看。前者存在无用数据,后者丢失了表的结构,造成阅读困难),遍历代码写起来也很麻烦。


在JSON中,数组天生就可以获得其“元素个数”,并且可以方便的遍历。所以,我们要在工具层面支持数组,这样才能使用JSON的这个特性。


三、“引用”该怎么用?


还是举一个例子,在经营建造游戏中,对于建筑物属性的定义,每个建筑的解锁等级这是一个固定值,该建筑占用的地块面积也是一个固定值。但是该建筑不同等级的属性,则是完全不相同的。如果是一个资源产生建筑,那么会有不同的资源生成速度和资源上限,如果是一个出兵建筑,会有可造兵种类别,出兵时间。如果是一个防御建筑,会有攻击半径,伤害力等。这些不同结构的字段,是没有可能放到一个二维表中的。


一般采用的方式是,会有几种方案:

1.会有一个主要的表来存放所有建筑包含的相同的字段,然后那些不相同的字段信息放到其他表中,然后通过主键跳转来访问。

2.直接拆成多个表来填数据

3.使用一些不同的开关字段或分类字段,让同一个字段在不同开关状态下有不同的含义。现在游戏越来越复杂,这是最不建议的一种方式。


上面的3种方案,维护和修改成本都很高。


采用引用实现就很简单,还是多个表,然后在主要表上,插入其他表的引用即可。

s i i r r r
name unlock_lv area lv1 lv2 lv3
基地 1 4 基地.lv1 基地.lv2 基地.lv3
铀矿 3 4 铀矿.lv1 铀矿.lv2 铀矿.lv3
兵营 5 1 兵营.lv1 兵营.lv2 兵营.lv3


四、主表模式的意义是什么?


游戏开发中,前后端对于数据的需求是不一样的。前端需要的是一些显示数据,如资源名称,动作参数。后端需要的是一些计算数据,比如攻击力,防御力,伤害公式等。但是有一些数据,是前后端都需要的,比如:技能范围,技能类型等,这些数据既与前端的显示有关系也和后端的逻辑计算有关系。


那么这种情况下,按照传统方式,也会拆成若干表。一般是一张表前端用,一张表后端用。但问题在于,前后端都需要的数据该如何处理?在两个表之间同步是一个成本比较高的办法。


这就体现出主表模式的意义了。我们可以把这些数据都组织在一张表上:

name type effect atk
平砍 1 平砍.png 10
横扫千军 3 横扫千军.png 7
暴风雪 4 暴风雪.png 8



然后在输出的时候,在主表模式中,分成两个来输出:

skill->skill_fn name type effect
skill->skill_bn name type atk


最后


需求一直在变,工具要提供的是应对不同需求的灵活性。







 本文转自 老G 51CTO博客,原文链接:http://blog.51cto.com/goldlion/1407007,如需转载请自行联系原作者


相关文章
|
6月前
|
供应链
代采系统如何利用大数据分析优化采购决策?
代采系统可以利用大数据分析来优化采购决策
|
6月前
|
机器学习/深度学习 数据采集 数据可视化
数据驱动决策支持
数据驱动决策支持
99 3
|
4月前
|
Java jenkins 测试技术
探索软件测试的多维度视角
在软件开发的海洋中,测试如同航船的指南针,确保我们的方向准确无误。本文将深入探讨软件测试的多维度视角,从传统测试方法的局限性出发,引入自动化测试工具的优势,并结合具体案例分析如何有效运用这些工具来提升测试效率和质量。通过阅读,你将获得关于如何利用现代技术改进软件测试流程的实践知识,从而在软件开发的旅程中乘风破浪。
|
22天前
|
供应链 监控 搜索推荐
数据驱动方式如何帮助企业提高决策的准确性和效率?
【10月更文挑战第13天】数据驱动方式通过提供全面准确的信息、及时发现问题和机会、提高决策效率、实现精细化决策、降低决策风险、促进协同沟通以及增强适应性等多方面的作用,显著提高了企业决策的准确性和效率。在当今数字化时代,企业应积极拥抱数据驱动的理念和方法,充分利用数据的价值,为企业的发展和成功奠定坚实基础。你所在的企业是如何运用数据驱动方式来提升决策水平的呢?分享一下你们的经验和做法吧。
21 0
|
4月前
|
网络协议 Python
系统工程是一种跨学科的方法论,旨在通过分析和设计系统的各个组成部分、组织结构、信息流和控制机制,以实现系统的整体最优运行。
系统工程是一种跨学科的方法论,旨在通过分析和设计系统的各个组成部分、组织结构、信息流和控制机制,以实现系统的整体最优运行。
|
5月前
|
机器学习/深度学习 存储 人工智能
数据驱动决策:技术背后的智慧
在当今信息爆炸的时代,数据驱动的决策正在成为各行各业的关键。本文探讨了数据技术如何在现代商业环境中发挥作用,以及如何利用数据分析来优化决策过程,从而提高效率和准确性。
166 2
|
4月前
|
机器学习/深度学习 监控 数据挖掘
系统工程是一种跨学科的方法,用于理解和优化复杂系统的性能。在业务流程优化中,系统工程的方法可以帮助我们分析、设计、实施和监控业务流程,以实现效率、质量和成本等方面的改进。
系统工程是一种跨学科的方法,用于理解和优化复杂系统的性能。在业务流程优化中,系统工程的方法可以帮助我们分析、设计、实施和监控业务流程,以实现效率、质量和成本等方面的改进。
|
4月前
|
机器学习/深度学习 算法 定位技术
系统工程是一个跨学科的领域,它关注于如何设计、管理和优化复杂的系统。
系统工程是一个跨学科的领域,它关注于如何设计、管理和优化复杂的系统。
|
4月前
|
存储 安全 数据库
系统工程的思想和方法可以帮助我们更好地组织和管理这些活动,以实现企业的整体最优。
系统工程的思想和方法可以帮助我们更好地组织和管理这些活动,以实现企业的整体最优。
|
4月前
|
敏捷开发 大数据 测试技术
探索软件测试的多维视角:从自动化到性能评估
在数字化时代的浪潮中,软件测试作为保障产品质量的重要环节,其方法和工具正经历着前所未有的变革。本文将深入探讨现代软件测试领域的两大趋势——自动化测试与性能测试,揭示它们如何相辅相成,共同提升软件开发的效率和质量。我们将通过具体的案例分析,展示自动化测试在不同开发阶段的应用,以及性能测试在确保用户体验方面的关键作用。同时,文章还将对比传统测试方法,阐述这些新兴技术带来的改进和挑战,为读者呈现一个全面而立体的软件测试新图景。
下一篇
无影云桌面