在 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);
}
}
| 議題 | 說明 | 對策 |
|---|---|---|
| 無目前目錄 | Directory.GetCurrentDirectory() 擲出 NotSupportedException | 所有檔案路徑以 BaseDirectory 為基準建構絕對路徑 |
| 編碼支援 | 舊版 CF 不支援 GB18030 | 統一使用 Encoding.GetEncoding("GB2312") |
| 檔案大小 | 行動裝置儲存空間有限 | 關卡資料採二進位 *.bxb (1 byte/格),步驟採 char 壓縮 |
PushBox.exe → 畫面顯示空白關卡。PushBox.cfg。text/*.bxa (文字關卡) 批次轉為 data/*.bxb (二進位) 並產生 steps/*.bxs (預設解法)。只需發佈 PushBox.exe 即可遊玩,內建預設關卡資料已編譯入組件資源;外部檔案僅供擴充。
PushBox.exe // 主程式 PushBox.cfg // 設定檔 (首次執行自動產生) data/*.bxb // 關卡二進位資料 steps/*.bxs // 通關步驟 (錄影/預設解法)