本文介紹 FindPath 尋路演算法的重大優化:標記值改為 1~3 循環、地圖儲存從 ushort 降為 byte,使搜索距離不再受限於 8192 步,記憶體使用減半。
| 指標 | 優化前 | 優化後 |
|---|---|---|
| 地圖元素型別 | ushort (16 bits) | byte (8 bits) |
| 單元格狀態位數 | 3 bits | 3 bits |
| 可用標記位數 | 13 bits (8191) | 5 bits (循環 1~3) |
| 最大搜尋距離 | 8191 步 | **無限制** |
| 記憶體佔用 | 基準 | **減半** |
// 優化前:標記值 = 距離 + 1,需大量位元
Block.Mark(ref map[y, x], distance + 1); // 使用高 13 位
// 優化後:標記值循環 1,2,3
int mark = (distance % 3) + 1;
Block.Mark(ref map[y, x], mark); // 僅需 2 位元 (值 1~3)
(當前標記 % 3) + 1,入佇列。

Seek 邏輯,標記值改為模 3 循環。ushort 參數/欄位改為 byte,Mark/Value/CleanAllMark 配合 2 位元標記。ushort[,] → byte[,]。巧妙的標記值循環設計,突破位元寬度限制,同時大幅降低記憶體佔用。此優化思想適用於所有記憶體受限環境的圖搜尋演算法。