亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用C#開發智能手機軟件:推箱子(三)

2019-11-18 16:27:23
字體:
來源:轉載
供稿:網友

在這篇文章中,介紹 Common/Block.cs 源程序文件。

以下是引用片段:
  1 namespace Skyiv.Ben.PushBox.Common
  2 {
  3 /// 
  4 /// 基本單元格: 地 槽 墻 磚 箱子 工人
  5 /// 
  6 static class Block
  7 {
  8 public const byte Land = 0; // 地
  9 public const byte Slot = 1; // 槽
  10 public const byte Wall = 2; // 墻
  11 public const byte Brick = 3; // 磚: 等同于墻,一般放在墻的外圍
  12 public const byte Box0 = 4; // 箱子放在地上
  13 public const byte Box1 = 5; // 箱子放在槽上
  14 public const byte Man0 = 6; // 工人站在地上
  15 public const byte Man1 = 7; // 工人站在槽上
  16
  17 const string mask = "-+#%xX()"; // (*.bxa)文件用,依次代表以上各項
  18
  19 public static string GetPenName(byte block)
  20 {
  21 return "地槽墻磚箱箱人人"[block & 0x07].ToString();
  22 }
  23
  24 public static char GetChar(ushort block)
  25 {
  26 return mask[block & 0x07];
  27 }
  28
  29 public static byte GetByte(char block)
  30 {
  31 return (byte)mask.IndexOf(block);
  32 }
  33
  34 public static bool IsOk(ushort block)
  35 {
  36 return block <= Man1;
  37 }
  38
  39 public static void CleanAllMark(ushort[,] bb)
  40 {
  41 for (int i = 0; i < bb.GetLength(0); i++)
  42 for (int j = 0; j < bb.GetLength(1); j++)
  43 bb[i, j] &= 0x07;
  44 }
  45
  46 public static void Mark(ref ushort block, int value)
  47 {
  48 block |= (ushort)(value << 3);
  49 }
  50
  51 public static int Value(ushort block)
  52 {
  53 return block >> 3;
  54 }
  55
  56 public static void Update(ref ushort block, byte pen)
  57 {
  58 if (IsSlot(block) && pen == Block.Man0) pen = Block.Man1;
  59 if (IsSlot(block) && pen == Block.Box0) pen = Block.Box1;
  60 block = pen;
  61 }
  62
  63 public static void ManIn(ref ushort block)
  64 {
  65 block += (Man0 - Land);
  66 }
  67
  68 public static void ManOut(ref ushort block)
  69 {
  70 block -= (Man0 - Land);
  71 }
  72
  73 public static void BoxIn(ref ushort block)
  74 {
  75 block += (Box0 - Land);
  76 }
  77
  78 public static void BoxOut(ref ushort block)
  79 {
  80 block -= (Box0 - Land);
  81 }
  82
  83 public static bool IsSlot(ushort block)
  84 {
  85 return block == Slot || block == Box1 || block == Man1;
  86 }
  87
  88 public static bool IsBlank(ushort block)
  89 {
  90 return block == Land || block == Slot;
  91 }
  92
  93 public static bool IsBox(ushort block)
  94 {
  95 return block == Box0 || block == Box1;
  96 }
  97
  98 public static bool IsMan(ushort block)
  99 {
  100 return block == Man0 || block == Man1;
  101 }
  102 }
  103 }


  靜態類 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# 開發智能手機軟件:推箱子(五)”中的說明。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情图片区| 国产精品大片wwwwww| 亚洲欧美精品suv| 欧美另类暴力丝袜| 97精品久久久| 国产精品高清在线| 亚洲老板91色精品久久| 日韩av网址在线| 欧美日韩国产成人在线| 精品中文视频在线| 成人国产精品久久久久久亚洲| 视频在线观看一区二区| 国产精品免费久久久久影院| 亚洲欧美日韩久久久久久| 国产精品日韩欧美| 欧美性猛交xxxx偷拍洗澡| 欧美日韩国产va另类| 亚洲女人初尝黑人巨大| 国产精品99蜜臀久久不卡二区| 九九热视频这里只有精品| 亚洲xxxxx性| 欧美视频不卡中文| 欧美日韩国产第一页| 97久久伊人激情网| 国产99久久精品一区二区| 亚洲石原莉奈一区二区在线观看| 成人免费视频在线观看超级碰| 日韩精品中文字幕久久臀| 午夜精品久久久99热福利| 久久久国产精品x99av| 日韩欧美亚洲成人| 欧美中文字幕在线播放| 国产精品久久久久久中文字| 日韩国产高清视频在线| 少妇高潮久久久久久潘金莲| 亚洲专区国产精品| 日韩美女福利视频| 亚洲直播在线一区| 成人欧美一区二区三区在线湿哒哒| 亚洲国产又黄又爽女人高潮的| 国内精久久久久久久久久人| 91精品国产乱码久久久久久蜜臀| 国产一区二区丝袜| 亚洲精品福利资源站| 亚洲国产精品高清久久久| 国产va免费精品高清在线观看| 亚洲欧美一区二区三区情侣bbw| 日韩欧美一区视频| 日韩中文理论片| 91丨九色丨国产在线| 欧美性xxxx在线播放| 久久99国产精品久久久久久久久| 国产伦精品免费视频| 亚洲性猛交xxxxwww| 国产精品久久久久久久电影| 精品国产91乱高清在线观看| 日韩欧美国产骚| 久久精品这里热有精品| 日韩av免费在线观看| 欧美午夜宅男影院在线观看| 色综合老司机第九色激情| 久久国产加勒比精品无码| 成人444kkkk在线观看| 97在线观看免费高清| 日韩高清电影免费观看完整| 俺去啦;欧美日韩| 国产欧美欧洲在线观看| 成人黄色大片在线免费观看| 欧美韩日一区二区| 午夜精品久久久久久久久久久久| 欧美日韩一区二区免费在线观看| 97视频免费在线看| 中文日韩在线观看| 亚洲精品国产精品国自产观看浪潮| 国产精品日韩精品| 国产欧美精品日韩精品| 欧美日韩成人在线观看| 欧美一级淫片videoshd| 欧美乱妇高清无乱码| 国产91在线视频| 色伦专区97中文字幕| 最近2019年中文视频免费在线观看| 欧美日韩电影在线观看| 欧美激情久久久| 欧美大片欧美激情性色a∨久久| 尤物yw午夜国产精品视频明星| 中文字幕日韩欧美在线视频| 精品美女永久免费视频| 国产日韩欧美另类| 欧美最猛性xxxxx(亚洲精品)| 欧美性极品少妇精品网站| 成人高清视频观看www| 成人中文字幕+乱码+中文字幕| 激情成人中文字幕| 亚洲图片制服诱惑| 精品福利一区二区| 日韩免费av片在线观看| 亚洲免费小视频| 性欧美在线看片a免费观看| 国产精品美女无圣光视频| 日韩av快播网址| 在线成人激情视频| 九九热最新视频//这里只有精品| 亚洲精品一区久久久久久| 欧美亚洲日本网站| 国产成人精品视频| 国产精品久久久久久久久久ktv| 插插插亚洲综合网| 亚洲精品www| 中文字幕亚洲天堂| 国产精品户外野外| 欧美日韩高清区| 欧美午夜丰满在线18影院| 2021久久精品国产99国产精品| 日本久久91av| 久久综合免费视频| 热久久美女精品天天吊色| 91精品国产精品| 欧美情侣性视频| 欧美日韩中国免费专区在线看| 精品亚洲一区二区三区在线播放| 欧美日韩免费在线| 操91在线视频| 亚洲综合大片69999| 色午夜这里只有精品| 国产精品视频午夜| 欧美日韩国产成人高清视频| 国产伦精品一区二区三区精品视频| 欧美日韩国产限制| 色综合久久88色综合天天看泰| 97涩涩爰在线观看亚洲| 亚洲欧美成人精品| 日本91av在线播放| 亚洲人成77777在线观看网| 成人免费自拍视频| 精品美女久久久久久免费| 欧美激情在线观看视频| 国产性色av一区二区| 日韩在线免费高清视频| 国产69精品久久久久9999| 日韩精品极品视频免费观看| 欧美激情精品久久久久久免费印度| 在线亚洲国产精品网| 中文字幕在线看视频国产欧美在线看完整| 中文日韩在线视频| 久久综合五月天| 亚洲欧美精品suv| 欧美午夜www高清视频| 国产精品久久久久久av| 91网在线免费观看| 亚洲乱码国产乱码精品精| 欧美成人在线免费| 亚洲一区二区在线播放| 97视频免费在线观看| 久久精品中文字幕电影| 欧美丰满少妇xxxx| 国产区亚洲区欧美区| 国产精品扒开腿做爽爽爽男男| 日韩av免费在线| 成人激情电影一区二区| 久久久人成影片一区二区三区观看| 欧美精品成人91久久久久久久| 日韩欧美一区二区三区| 欧美国产极速在线|