承接上篇,本文補充說明尋路演算法優化後(第 5 篇),Block.cs 所有 ushort 型別參數與欄位改為 byte 的具體調整內容與原因。
ushort。byte)。| 原始 | 優化後 | 說明 |
|---|---|---|
public static char GetChar(ushort block) | public static char GetChar(byte block) | 參數型別 |
public static bool IsOk(ushort block) | public static bool IsOk(byte block) | 參數型別 |
public static void Mark(ref ushort block, int value) | public static void Mark(ref byte block, int value) | ref 參數型別 |
public static int Value(ushort block) | public static int Value(byte block) | 參數型別 |
public static void Update(ref ushort block, byte pen) | public static void Update(ref byte block, byte pen) | ref 參數型別 |
public static void ManIn(ref ushort block) 等 | public static void ManIn(ref byte block) 等 | 所有 ref 參數 |
public static bool IsSlot(ushort block) 等 | public static bool IsSlot(byte block) 等 | 所有查詢方法 |
地圖陣列 ushort[,] map | byte[,] map | 全專案統一修改 |
// 優化前:value 可大至 8191,存入 bit 3~15
public static void Mark(ref ushort block, int value) => block |= (ushort)(value << 3);
public static int Value(ushort block) => block >> 3;
// 優化後:value 僅 1~3,存入 bit 3~4 (2 bits)
public static void Mark(ref byte block, int value) => block |= (byte)((value & 0x3) << 3);
public static int Value(byte block) => (block >> 3) & 0x3;
DataFile.cs 讀寫 byte[,],檔案體積減半。Update、ManIn/Out、BoxIn/Out 參數型別變更,需重新編譯。從 ushort 降級為 byte 看似微小,實則體現演算法與資料結構協同優化的威力。單一職責的 Block 類別讓此類重構安全、局部化。