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

C# 開發智慧型手機軟體:推箱子遊戲(三)補充:Block.cs 優化後 byte 版本說明

     編輯:關於C語言

前言

承接上篇,本文補充說明尋路演算法優化後(第 5 篇),Block.cs 所有 ushort 型別參數與欄位改為 byte 的具體調整內容與原因。

為何原本用 ushort?

  • 單元格狀態需 3 bits (0~7)。
  • 尋路標記需儲存「距離+1」,最大 8191 → 需 13 bits。
  • 共 16 bits,故用 ushort。

優化後為何 byte 即可?

  • 標記值改為 **1~3 循環**,僅需 **2 bits**。
  • 3 bits 狀態 + 2 bits 標記 = 5 bits < 8 bits (byte)。
  • 剩餘 3 bits 可作未來擴充(如動畫幀、特效標記)。

具體修改清單

原始優化後說明
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[,] mapbyte[,] map全專案統一修改

Mark/Value 邏輯調整


// 優化前: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;

影響範圍與測試重點

  • FindPath.cs:標記邏輯改為模 3 循環,路徑重建依標記遞減 (3→2→1)。
  • 地圖序列化:DataFile.cs 讀寫 byte[,],檔案體積減半。
  • 設計器:Update、ManIn/Out、BoxIn/Out 參數型別變更,需重新編譯。
  • 回歸測試:驗證大地圖 (200x200) 尋路正確、記憶體佔用減半、存檔載入無誤。

結語

從 ushort 降級為 byte 看似微小,實則體現演算法與資料結構協同優化的威力。單一職責的 Block 類別讓此類重構安全、局部化。

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