首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java SLG 遊戲開發實戰:CSV 表格驅動資料載入與序列化存檔機制

     編輯:Java 相關知識

前言

SLG(模擬戰略遊戲)數據量龐大、類別繁雜,硬編碼極難維護。本文展示《Java 究竟怎麼玩》框架採用的 **CSV 表格 + 反射映射** 載入策略,以及 **序列化 + 混淆 + GZIP** 存檔機制,兼顧策劃協作效率與防改動需求。

為何選 CSV?

  • **策劃友善**:Excel 直接編輯、另存為 CSV,無需學 XML/JSON
  • **輕量直觀**:純文字、版控友善、diff 易讀
  • **避免過度設計**:XML 需 Schema/Parser,Properties 不支援表格,自訂腳本維護成本高

核心載入器:CSVConfigure


public static Object[] loadPropertys(String fileName, Class clazz) {
    List rows = loadPropertys(fileName); // 解析 CSV 為 List>
    Object[] results = (Object[]) Array.newInstance(clazz, rows.size());
    for (int i=0; i

使用範例:

Friend[] friends = (Friend[]) CSVConfigure.loadPropertys("friend.csv", Friend.class);

單一方法即可將任意 CSV 映射為任意 VO 陣列,新增資料類別只需補 CSV 與 VO,零修改載入邏輯。

存檔機制:Keep 工具類

1. 序列化管線

  1. 關鍵資料物件實作 Serializable
  2. ObjectOutputStream → 位元組陣列
  3. 字元位移混淆(addChange/backChange)
  4. URLEncoder 防特殊字元
  5. GZIP 壓縮 降低體積
  6. 寫入檔案

讀取時反向:解壓 → URLDecoder → 位移還原 → ObjectInputStream 還原物件圖。

2. 關鍵程式碼片段


// 壓縮
public static byte[] compress(byte[] buffer) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    GZIPOutputStream gzos = new GZIPOutputStream(baos);
    gzos.write(buffer); gzos.flush(); gzos.close();
    return baos.toByteArray();
}

// 存檔入口
public static void save(String fileName, String message) throws IOException {
    save(new File(fileName), new ByteArrayInputStream(compress(message.getBytes())));
}

實戰成果展示

  • 主選單、夥伴招募、道具購買/裝備、關卡選擇、戰鬥畫面五大模組
  • 資料檔:friend.csv、item.csv、stage.csv 等,策劃直接維護
  • 存檔檔案:經混淆壓縮後呈現亂碼,防止玩家直接修改金錢/屬性

擴充建議

  • 混淆升級為 AES/DES 對稱加密
  • 加入簽名驗證(HMAC)防篡改
  • CSV 支援多語系欄位(如 name_zh, name_en)
  • 載入器快取機制,避免重複解析

完整範例原始碼下載:CSDN 下載連結

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved