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

C# 開發智慧型手機推箱子遊戲 (六) - Pub 靜態類與全域路徑管理

     編輯:關於C#

Pub 靜態類:專案的「全域常數中心」

在 Common/Pub.cs 中,static class Pub 集中管理:

  • 遊戲常數(關卡最大尺寸、動畫延遲、超出螢幕容許像素)
  • 檔案系統路徑(設定檔、關卡資料、通關步驟目錄)
  • 版本資訊解析(自動從 AssemblyVersion("2.1.*") 推算建置日期)
  • 通用輔助方法(尺寸轉字串、步驟陣列序列化、例外訊息整理)

關鍵程式碼節選與解說

static class Pub
{
    // ── 常數 ──
    public const int OverY = 4;                   // Y 軸允許超出螢幕像素
    public const int DefaultMaxLevelSize = 32;    // 關卡預設最大寬/高
    public const int DefaultStepDelay = 100;      // 移動動畫間隔 ms
    public const int DefaultReplayDelay = 300;    // 回放動畫間隔 ms
    public const int MaxDelay = 1000;             // 最大允許間隔

    // ── 路徑屬性(唯讀)──
    // Windows CE 無「目前目錄」概念,所有路徑必須為絕對路徑
    static string BaseDirectory => Path.GetDirectoryName(CodeBases);
    public readonly static string ConfigFileName = Path.Combine(BaseDirectory, "PushBox.cfg");
    public static string TextDirectory => Path.Combine(BaseDirectory, "text");   // *.bxa
    public static string DataDirectory => Path.Combine(BaseDirectory, "data");   // *.bxb
    public static string StepsDirectory => Path.Combine(BaseDirectory, "steps"); // *.bxs

    // ── 版本與建置日期 ──
    // AssemblyVersion("2.1.*") → Build = 2000/1/1 起的天數, Revision = 午夜秒數/2
    public static string GetVersionBuildString(Version v)
    {
        double days = v.Build + 2.0 * v.Revision / (TimeSpan.TicksPerDay / TimeSpan.TicksPerSecond);
        var dt = new DateTime(2000, 1, 1).AddDays(days);
        return $"{v.Major}.{v.Minor} (Build: {dt:yyyy-MM-dd HH:mm:ss})";
    }

    // ── 例外訊息遞迴展開 ──
    public static string GetMessage(Exception ex, bool isDebug)
    {
        var sb = new StringBuilder();
        for (var e = ex; e != null; e = e.InnerException)
        {
            sb.Append(isDebug ? e.ToString() : e.Message).Append(NewLine);
        }
        return sb.ToString();
    }

    // ── 步驟陣列 → 字串(反轉順序)──
    public static string ToString(Step[] steps)
    {
        var sb = new StringBuilder();
        foreach (var s in steps) sb.Append((char)s);
        var arr = sb.ToString().ToCharArray();
        Array.Reverse(arr);
        return new string(arr);
    }
}

Windows CE / .NET CF 特殊考量

議題說明對策
無目前目錄Directory.GetCurrentDirectory() 擲出 NotSupportedException所有檔案路徑以 BaseDirectory 為基準建構絕對路徑
編碼支援舊版 CF 不支援 GB18030統一使用 Encoding.GetEncoding("GB2312")
檔案大小行動裝置儲存空間有限關卡資料採二進位 *.bxb (1 byte/格),步驟採 char 壓縮

首次執行初始化流程

  1. 啟動 PushBox.exe → 畫面顯示空白關卡。
  2. 選單 資料 → 設定:建立 PushBox.cfg。
  3. 選單 資料 → 轉換:將 text/*.bxa (文字關卡) 批次轉為 data/*.bxb (二進位) 並產生 steps/*.bxs (預設解法)。
  4. 選單 資料 → 設計:進入關卡編輯器自訂關卡。

只需發佈 PushBox.exe 即可遊玩,內建預設關卡資料已編譯入組件資源;外部檔案僅供擴充。

部署清單

PushBox.exe          // 主程式
PushBox.cfg          // 設定檔 (首次執行自動產生)
data/*.bxb           // 關卡二進位資料
steps/*.bxs          // 通關步驟 (錄影/預設解法)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved