性感码农,在线解答:有什么问题可以扫屏幕右方二维码加我微信或者在下方留言。

此项目的Demo和工具已经放在了GitHub上,有需要的朋友点击获取,建议配合Demo看博客。其中v0,v1,v2为工具,data.xlsx是excel配置示例表,data文件夹中的文件为导出的数据。

做游戏,难免会用到数据配置表。以RPG游戏类型为例,游戏中有大量的可配置数据,如英雄的各项数据(攻击,护甲,魔抗等等),装备的各项数据(血量,护甲等等),地图的各项数据等等。这些数据量非常的庞大,而且随时可能发生变化,这就要求开发人员不能把游戏数据都写死在代码中。推荐使用excel表配置数据,然后使用python工具导出成游戏可以读取的文件,这样方便策划配置各项数据,也方便我们导出读取。

废话不多说,直接开始介绍解决方案。

excel表配置规则

  1. 第一行备注;
  2. 第二行数据类型;
  3. 第三行数据的key;
  4. 支持配置数据类型:整型,浮点型,字符串,数组,哈希表;
  5. 支持导出数组表,哈希表。

如图所示,一目了然:

python工具

python读取excel表,需要使用到xlrd模块,所以先安装xlrd模块,使用以下命令:

//如果没有安装pip,则要先安装pip
sudo easy_install pip
//再安装xlrd
sudo pip install xlrd

工具的脚本内容GitHub自取,这里介绍几个重要的方法,掌握了以下几个方法,简单的excel表基本上都可以轻松读取:

//读取excel文件
data = xlrd.open_workbook(fileName)
//获取所有sheetName,返回值为数组
sheetsNames = data.sheet_names()
//根据sheetName获取数据
table = data.sheet_by_name(sheetName)
//获取一个sheet的某行或者某列所有数据,返回值为数组
table.row(rowNum)
table.col(colNum)
//表的行数和列数
print table.nrows, table.ncols
//读取某个单元格中的数据,数据会根据上面配置的类型进行转换
table.cell(rowNum, colNum).value

读取到数据,剩下的工作就是组字符串了。把你想要生成的数据格式生成一个长长的字符串,然后写入到文件中。这个过程非常灵活多变,所以什么格式的文件我们都可以生成。本例中只生成了js文件,若要生成json,lua等格式文件也不是什么难事,有需求的同学自行修改或者联系本人探讨。

选择哪个版本的工具

在GitHub中一共有三套工具,每套工具都会生成不同内容的文件,如下图中的数据:

v0导出的数据:v1导出的数据:
v2导出的数据:

根据以上三种数据内容,我总结三个工具的优缺点:

v0优点:数据直观,不需要二次解析,可以直接拿来使用;

v0缺点:当数据量特别大的时候,导出的文件会很大,因为有很多重复字符串(key重复)。

v1优点:去掉了重复的字符串,导出的文件小;

v1缺点:数据不直观,但在使用时数据又解析成了图一内容的格式。如果数据量特别大,则在第一次获取数据的时候,数据的解析可能会消耗一定的性能。

v2优点:v0+v1优点;

v2缺点:数据不直观,而且需要自己定义数据获取的方法(如下图方法)。

轻量数据推荐使用v0(比如像本博客中的excel中的数据量),中量数据使用v1,大量数据使用v2+自定义解析数据方法。

自定义数据解析模块使数据的读取更加灵活,我本人是比较推荐v2工具的。

大家根据自己的数据量需求选择相应的工具即可。

注意:

  • 博客中的脚本只支持excel表二层数据嵌套, 二层嵌套应该能满足大多数的需求了,如果嵌套多层(比如配置的hash或数组数值中再嵌套一层hash或数组),请自行修改脚本进一步,因为又出现重复字符串了。
  • 合并单元格的需求不大,所以对合并的单元格未做研究,使用本工具可能会出。
  • 如果有其他更变态的需求,请联系本人探讨。

发表评论

电子邮件地址不会被公开。 必填项已用*标注