官术网_书友最值得收藏!

3.2.2 讓數據使用起來更加方便

使用什么形式的文件作為數據表并不重要,CSV也照樣能把游戲運行得很好,因為這些技術并不能決定游戲的性能,只要我們喜歡,什么形式都可以。很多時候,我們在選定數據存儲規則時,大都選擇自己喜歡的方式,只要符合團隊的做事風格即可,因為這能提升我們的工作效率,加快開發速度,團隊不用浪費時間去適應新的規則。

數據表的關鍵作用是連接游戲策劃設計師與其他部門,所以我們在制定數據導入/導出規則的時候需要考慮設計師的體驗因素。如何讓策劃在配置數據表的時候能夠有更好的體驗就成了關鍵。

為什么要好用呢?只有好用才能提高效率。前面提到的自動化就是提高效率的一種方法,還有比如一鍵轉化×××,這種形式也是提高效率的好辦法。

一鍵轉化Excel為其他格式是一個比較人性化的工具,不需要人工手動去轉化,通過工具就能搞定,只要數值策劃按照雙方約定的規則執行即可。這能大大提高數值策劃與程序員的協調性。如一個系統或一個模塊需要什么數值、需要什么類型的數值、數據表建立的流程,在你們約定的填表規則上,建立、讀取、轉化變得輕而易舉。在這種規則下,大家節省了溝通時間,彼此能默契合作,是多么高效和舒心。

只有自動化,或者只有一鍵轉化×××的功能,還是不夠。這些只是工具,我們要的是團隊間,特別是部門間、不同工種間的配合順暢無障礙。

如果只是單個表有了自動化,策劃設計人員可以自由地將Excel數據轉化成能讓程序員讀取的數據格式,但是策劃設計人員一直在對數據進行變動,特別是對字段的類型、字段的名字進行調整,今天這個字段定義為ID,明天這個字段成為time,或者插入一個新的字段,刪除舊的字段,或者新增一個數據表,或者刪除一個舊的數據表,等等,這會讓程序員很頭疼,每次更改都需要及時通知程序員,即使及時收到通知,也會遇到不少麻煩。

因此我們再次強調這種規則的好用性,將單個表變為多個表的自定義配置,所有策劃內容的數據表和導出規則都由策劃來指定填寫。

每次策劃設計人員增加Excel表時,都要跟程序員說:“你幫我把這個Excel表加入自動化和一鍵轉化×××的功能里?!背绦騿T就需要騰出時間和精力來為策劃設計人員服務。事實上,我們可以把這塊工作移交出去,策劃設計人員能夠自定義導出哪個Excel文件,以及Excel文件里的哪個工作簿。這樣策劃設計人員可以自主選擇和自主增加表的導出內容。

我們來看怎么做。一個可行的辦法是,在程序命令中預留幾個參數,參數指向某個需要導出的文件及sheet。那么在命令行里,執行這個程序且后面跟上參數就能導出數據。

但是批處理寫命令行也好,shell寫命令行也好,畢竟還是程序級別的。策劃設計人員并不能很好地控制表中的導出內容。比如要新增一個表,或者修改某個表的文件名,或者修改導出某個表文件里的sheet,這項工作還是需要通過修改命令行來完成的,或者修改批處理文件或shell文件。但策劃設計人員并不會修改,或者說這種命令形式并不直觀,怎么辦?

再次加入規則,讓自動化和一鍵轉化×××更加人性化。我們可以增加一個Excel表,表中填有具體要導出哪些Excel文件里的哪個sheet,這些sheet數據導出后的文件名是什么,以及生成文件后應該轉移到哪個文件夾中去。這樣策劃設計人員在定制數據時,就可以自行決定需要用哪些Excel和sheet,做到完全由策劃設計人員自行掌控。策劃設計人員完全能夠主導所有數據的導出工作和轉移工作。

圖3-1所示為策劃設計人員通過配表來自定義管理Excel的導出情況,雖然這樣方便了策劃設計人員,但程序員的麻煩還沒解決,如果策劃設計人員修改了字段名,插入了新的字段,刪除了舊的字段,又沒有及時通知程序員,或者忘記了自己做過的事情,怎么辦?徹查?不可以,效率太低,不可以讓這種事情發生。

圖3-1 導出配置表的自定義目錄

在Excel中生成數據時自動與程序的變量對齊,就能起到校驗和索引的作用,為此我們再來加一個讓Excel字段名與程序對應的規則。編寫一個程序,讓程序生成一段代碼,這段代碼里變量定義的數字與每個數據表上字段名的索引對應,將每個要導出的sheet里的頭行的列名作為變量名寫入程序變量定義中,以方便程序在讀取數據表時列名與數據表對齊,這樣不僅有了讀取數據表列的Key值,還無形中進行了表數據與程序索引的校驗。

如圖3-2所示,在role.xls文件中,sheet(工作簿)中的第一列字段為ID,第二列字段為Name,第三列字段為Age,那么通過生成程序,將表的列名自動生成為程序代碼,自動生成后就有了以下格式的索引對齊方式代碼:


public Class ExcelDefine
{
    public const int role_role_ID = 1;          // role表的role工作簿的ID列
    public const int role_role_Name = 2;        // role表的role工作簿的Name列
    public const int role_role_Age = 3;         // role表的role工作簿的Age列
}

// 獲取名字的例子
string role_name_str =RoleTable.GetStr(ExcelDefine. role_role_Name);
int table_role_id = RoleTable.GetInt(ExcelDefine. role_role_ID);

策劃設計人員在更改字段、新增字段、刪除字段后,會如何呢?比如將第一列ID更改為Identifier、第二列插入School、第三列Age刪除后(見圖3-3),生成了如下代碼:


public Class ExcelDefine
{
    public const int role_role_Identifier = 1;
    public const int role_role_School = 2;
    public const int role_role_Name = 3;
}

// 此時原來的代碼就會報錯
string role_name_str =RoleTable.GetStr(ExcelDefine. role_role_Name);
int table_role_id = RoleTable.GetInt(ExcelDefine. role_role_ID);

// 原來的代碼應該改成
string role_name_str =RoleTable.GetStr(ExcelDefine. role_role_Name);
int table_role_id = RoleTable.GetInt(ExcelDefine. role_role_Identifier);

圖3-2 示例表

圖3-3 策劃設計人員修改字段后

如此一來,數據表變換并轉換為具體的數據工具后,原來在程序中使用的ExcelDefine.role_role_ID、ExcelDefine.role_role_Age將失效報錯,而ExcelDefine.role_role_Name則自動轉入讀取第三列,無須修改。

有了這幾段程序,程序員不再需要知道策劃設計人員修改的數據是第幾列,因為在編譯時就會報錯,提示程序員表中的哪些字段進行了修改,你只需要向策劃設計人員詢問具體意見即可。

到此,我們有了自動化和一鍵轉化×××的工具,省去了不少人力,并且加入了規則,讓策劃設計人員完全可以自己控制Excel數據表的操作,又加入了檢查校驗和修復的功能,讓程序員在數據表銜接部分也能進行檢查和校驗。

主站蜘蛛池模板: 邢台县| 威海市| 乌拉特中旗| 富裕县| 巨野县| 西充县| 双江| 南投县| 德阳市| 达州市| 东明县| 安塞县| 陆河县| 宜都市| 清苑县| 富平县| 扎鲁特旗| 香格里拉县| 岳阳县| 塘沽区| 芦山县| 喜德县| 正宁县| 平定县| 黔东| 延安市| 武夷山市| 莲花县| 玛纳斯县| 海南省| 镇宁| 阿巴嘎旗| 米林县| 东宁县| 武宣县| 邢台县| 四会市| 宽城| 新民市| 卢氏县| 保山市|