手游研发系列【1】—— csv解析方案

手游开发中大多通过csv配置文件,实现策划及运营人员修改游戏中可变的数据,比如战斗数值、副本数据、Boss数值、图标icon、音效等。

csv文件是用逗号分隔的纯文本文件,可以使用Excel打开进行编辑。

程序员在使用csv数据时,还需要将其转换为便于使用的某种数据格式。转换为什么格式?怎么转换?不同的项目,需求不同,实现方案也不同。

以笔者经历的几个手游项目总结如下:
一、没有csv文件的手游项目
这个比较特殊,需要修改的配置也相对较少,后端直接提供web界面给策划或运营来修改配置。

二、csv文件比较少,配置比较简单的手游项目
前端语言:Lua
csv支持的数据类型:字符串
转换csv的程序:PHP脚本

实现方案:策划或运营修改若干csv文件后压缩成zip,通过后端提供的web界面上传到服务器,由PHP脚本解析成json。游戏登录时会请求服务器,获得json格式的配置数据,实现配置同步。

三、csv文件非常多,配置比较复杂的cocos2d-x手游项目。
前端语言:Lua
csv支持的数据类型:byte、int、float、string及其对应的数组,map等
转换csv的程序:Python实现的工具集

实现方案:策划或运行修改csv文件后提交到SVN,发布版本时前后端会更新csv,各自导出Lua和PHP格式的配置文件。

具体实现的功能有:
1、将csv转换为json、Lua及PHP三种格式的文件
json是转Lua和PHP的中间文件。
将同一份csv转为Lua和PHP是为了保持前后端配置数据一致。

2、生成的Lua和PHP,支持是否格式化
开发环境可以格式化Lua和PHP后阅读起来很方便,但是生成的文件包含了很多tab符及空格符等,导致文件容量比较大。生产环境去掉格式化,最小化文件容量。

3、支持指定csv及指定csv的某些字段是否导出Lua或PHP
某些csv文件只有前端或后端需要,某个csv的某些字段只有前端或后端需要,通过这个功能,保证前端或后端不会导出无用的配置。

4、支持导出时忽略某些csv
某些csv文件非常大,导出非常慢,但是更新频率又非常低,所以开发环境中可以配置忽略某些csv,只有配置发生变更时再导出这些文件。

5、支持导出二维数组结构
通过配置csv中列名称,导出二维数组,满足特殊的设计需求。因没有三维及更多维数组需求,所以没有实现。(如果有三维或更多维数组需求,说明设计太复杂了,需要修改设计方案)

6、支持指定字段加密功能
比如战斗属性等关键数据,导出时按照指定算法进行加密,程序中使用时再解密。

7、支持导出指定csv文件或指定目录下csv文件的功能
随着项目的开发,csv文件越来越多,每次都导出所有文件会非常慢,也没必要导出没变化的文件。

8、支持跨平台
Python开发的工具集,天生跨平台!

PS:
有的项目直接使用excel作为配置文件,而不使用csv。通过编写VBA宏脚本实现excel转Lua或PHP。

​其实Python也有xlrd等excel解析的模块,本人更倾向用excel作为配置,用Python解析excel的方案。

扫描关注微信公众号:AppCoder
这里写图片描述

你可能感兴趣的:(手游,Cocos2d-x手游研发)