靜態類 Block 用來表示基本單元格: 空地、槽(箱子最終要存放的目的地)、牆、磚(在本程序中等同於“牆”,一般放在牆的外圍,使圖形看起來漂亮些)、箱子、工人。其中“箱子”和“工人”都可以位於“空地”或“槽”上,所以總共有八種狀態,用 0 到 7 表示,總共只需要三個二進位,可以放入一個字節中。在數據文件(*.bxb)中,每個基本單元格就是用一個字節儲存的,這在以後介紹的 Common/DataFile.cs 源程序文件中會看到。但是為什麼靜態類 Block 的大多數方法的參數都是 ushort 類型呢?這是為了尋找工人最短移動路線算法的需要,看了下一篇介紹 Common/FindPath.cs 源程序文件的文章就會明白了。
這個類還是比較簡單的,現簡要說明如下:
GetPenName 方法返回在設計關卡時所用畫筆的名稱。
Update 方法用來在設計關卡時更新地圖中的基本單元格。
GetChar 方法返回將數據文件(data/*.bxb)導出為文本文件(text/*.bxa)所用的字符。
GetByte 方法返回將文本文件(text/*.bxa)導入為數據文件(data/*.bxb)所用的字節。
IsOk 方法判斷表示基本單元格的字節是否合法,也用在數據導入時。
Mark 方法在尋找工人最短移動路線算法中用來標記已經搜索過的基本單元格。
CleanAllMark 方法在上述算法結束時用來清除地圖中的所有基本單元格的標記。
Value 方法返回上述算法搜索過程中所作的標記。
ManIn、ManOut、BoxIn、BoxOut 方法用來更新推箱子過程中地圖各基本單元格的狀態。
IsSlot、IsBlank、IsBox、IsMan 方法用來判斷各基本單元格的類型。
補充:尋找工人最短移動路線的算法已經作了改進,地圖使用 byte 存儲就行了,所以靜態類 Block 中的所有“ushort”都要修改為“byte”。請參見“使用 C# 開發智能手機軟件:推箱子(五)”中的說明。