歡迎前往個人博客 駑馬點滴 和視頻空間 嗶哩嗶哩-《挨踢日志》
序言
在游戲開發(fā)過程中驶睦,需要提供一套配置數(shù)據的解決方案屹蚊。這套解決方案中,就包含了配表數(shù)據
有兩種配表的形式我比較認可:
- 提供一個數(shù)據的在線管理平臺,此平臺提供了一套數(shù)據維護的解決方案
- 使用Excel表格,對數(shù)據進行配置
對于1而言命浴,它對數(shù)據做了有效的保護,能夠配置用戶的權限贱除,對于有保密需求的公司而言生闲,是一個很好的選擇。不足之處是月幌,提供此套解決方案的成本過高碍讯。
對于2而言,基本沒有開發(fā)的成本扯躺,維護人員在掌握了配表規(guī)則后捉兴,可以非常方便的使用,缺點是缅帘,數(shù)據的訪問權限完全開放轴术。
若未特別聲明难衰,本文所指的配表數(shù)據就是指Excel的.xls
格式的配表數(shù)據钦无,以及將其轉換為程序所使用的.lua
格式的配表數(shù)據
圍繞著配表數(shù)據,本篇將從以下幾個要點進行講述:
.xls
配表的需求分析
-
.xls
配表的設計 -
.lua
格式的配表數(shù)據的格式設計 -
.lua
格式的配表數(shù)據的生成工具
.xls
配表數(shù)據的需求分析
我們先來看看配置人員是如何配置.xls
表格的:
- 導航到配置數(shù)據的文件夾路徑
- 新建一份.xls表格盖袭,對其命名
- 打開.xls文件失暂,能夠設置屬性字段、配置屬性數(shù)值
- 能夠建立不同的sheet鳄虱,每一個sheet能夠配置是否導出到
.lua
文件(.lua
文件是提供給程序使用的文件) - 使用導出工具弟塞,導出到
.lua
文件,提供給相關人員使用
從配置的過程拙已,我們分析并確定了我們需要完成的任務:
- 提供
.xls
配表的文件框架 - 提供
.xls
配表文件的命名規(guī)范 - 提供
.xls
配表文件的表格格式 - 提供
.xls
配表文件的導出配置 - 提供
.xls
配置文件導出到.lua
的工具
.xls
配表的設計
于是我們給出了我們的.xls
配表的設計方案:
- 配置人員在指定的文件夾
xls
下進行表格的配置 - 此文件夾下只有
.xls
文件决记,不允許出現(xiàn)子文件夾,文件命名為[module1][_module2].xls
倍踪,其中module1, module2為模塊標識系宫,如
文件夾 PATH 列表
卷序列號為 000E-EB46
C:.
└─xls
example_building.xls
object_monster.xls
object_role.xls
system_daily.xls
我們通過文件名索昂,就可以方便的知道:
object
模塊下有子模塊monster
、role
的配置.
system
模塊有子模塊daily
的配置.
-
.xls
配置格式
以example_building.xls
為例
id | name | use_money | use_food | is_init | defense | args1 | args2 | args3 | args4 |
---|---|---|---|---|---|---|---|---|---|
i | s | i | f | b | i | ai | af | as | ab |
編號 | 名稱 | 金錢消耗 | 食物消耗 | 是否初始化 | 防御 | 數(shù)組1 | 數(shù)組2 | 數(shù)組3 | 數(shù)組4 |
1 | house | 1000 | 2.33 | TRUE | 100 | 1;2;3 | 1.23;2;3.23 | sdf;23e;s | true;false;true |
2 | house2 | 123 | 336.2 | TRUE | 1;2;3 | 1.23;2;3.23 | 你好;你在哪 | true;false | |
3 | 456 | 222.33665 | FALSE | 130 | 3;2;5;; | 1.23;2;3.23 | 我在這里啊;你在那;呢 | false;true | |
4 | farm | 100 | 220 | FALSE | 200 | 2;3 | 1.23;2;3.23 | df;ssd;dd;dd | |
5 | house5 | 22.1 | 2343;6;6;;;7 | 3;6.3;6;;;7 | 1.23;2;3.23 | true;true | |||
6 | horse6 | 200 | FALSE | 333 | 2e;w;e;we | false;false;false;false |
Note:
第一行是屬性字段名扩借,可用的字符集為(英文字母+數(shù)字+下劃線)椒惨,滿足通常意義下的變量命名規(guī)范
第二行是類型聲明
第三行是備注——不導出到最后的數(shù)據中
- 導出設置
在.xls
文件中,我們將一個sheet命名為output_xxxx潮罪,那么在后續(xù)的導出工具中康谆,就會得到一個名為xxxx.lua
的文件,如果當前的.xls
中嫉到,有多個以output_開頭的sheet沃暗,那么就會導出多個對應的.lua
文件。
單個sheet的配置表.png
多個sheet的配置表:output_object_monster.png
多個sheet的配置表:output_object_monster_level.png
.lua
格式的配表數(shù)據的設計
這里給出一個生成的結果何恶,再解釋為何.lua
配置成如此描睦。
使用上圖中的object_monster.xls
,
通過生成工具导而,生成了如圖的數(shù)據結構:
我們導出的
object_monster.lua
不但完整的保存了配置數(shù)據忱叭,還擁有對數(shù)據內容的一些訪問接口,先來看看如何使用數(shù)據表
數(shù)據表加載
local CnfObjectMonster = require("object_monster")
打印表數(shù)據項個數(shù)
print(">>>> 數(shù)據項個數(shù)")
print(CnfObjectMonster.len())
輸出
>>>> 數(shù)據項個數(shù)
3
屬性訪問
local printMonster = function(monsterID)
local monsterName = CnfObjectMonster.name(monsterID)
local monsterResName = CnfObjectMonster.res_name(monsterID)
print(string.format(">>>> monster of id(%d), its name is %s, its resource name is %s", monsterID, monsterName, monsterResName))
local monsterSkillList = CnfObjectMonster.skill_list(monsterID)
print(">>>> 打印技能列表")
monsterSkillList.walk(print)
print(">>>> 技能列表長度")
print(monsterSkillList.len())
end
local monsterID = 10001
printMonster(monsterID)
輸出
>>>> monster of id(10001), its name is 哥布林小怪, its resource name is spine_small_goblin
>>>> 打印技能列表
1 101
2 102
>>>> 技能列表長度
2
訪問ID列表
local ids = CnfObjectMonster.getIDList()
for k, v in ipairs(ids) do
print(k, v)
end
輸出
1 10001
2 10002
3 10003
全表遍歷
CnfObjectMonster.walk(function(k, id)
printMonster(id)
end)
輸出
>>>> monster of id(10001), its name is 哥布林小怪, its resource name is spine_small_goblin
>>>> 打印技能列表
1 101
2 102
>>>> 技能列表長度
2
>>>> monster of id(10002), its name is 哥布林精英, its resource name is spine_elite_goblin
>>>> 打印技能列表
1 101
2 102
3 103
>>>> 技能列表長度
3
>>>> monster of id(10003), its name is 哥布林頭領, its resource name is spine_boss_goblin
>>>> 打印技能列表
1 101
2 102
3 104
4 105
>>>> 技能列表長度
4
我們可以看到:.lua
數(shù)據文件提供了非常便捷的屬性訪問接口今艺、遍歷接口韵丑,另一方面,對于真正的數(shù)據data
虚缎,被屏蔽了對它的增加撵彻、減少或者修改它的任一內容的操作。
這樣的數(shù)據結構实牡,既提供了讀取數(shù)據的接口陌僵,又屏蔽了針對數(shù)據的修改操作,十分令人滿意创坞。
.lua
格式的配表數(shù)據的生成工具
關于這份工具碗短,我使用的是:
在它的基礎之上,我進行了針對性的修改题涨。
結束
我們底層的數(shù)據框架搭建好了偎谁,工作和生活更加愉快起來了_~