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

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

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

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

在這篇文章中介紹經過改進后的 Common/FindPath.cs 源程序文件。也就是說,已經實現了“使用 C# 開發智能手機軟件:推箱子(四)”的第二個評論中的想法,將地圖 ushort[,] map 改為 byte[,] map 了。下面就是改進后的 FindPath 類:

以下是引用片段:
1 using System;
  2 using System.Drawing;
  3 using System.Collections.Generic;
  4
  5 namespace Skyiv.Ben.PushBox.Common
  6 {
  7 /// 
  8 /// 尋找最短路線
  9 /// 
  10 static class FindPath
  11 {
  12 static Size[] offsets = { new Size(0, 1), new Size(1, 0), new Size(0, -1), new Size(-1, 0) };
  13 static Direction[] directions = { Direction.South, Direction.East, Direction.North, Direction.West };
  14
  15 /// 
  16 /// 尋找最短路線
  17 /// 
  18 /// 地圖
  19 /// 出發點
  20 /// 目的地
  21 /// 最短路線
  22 public static Queue Seek(byte[,] map, Point from, Point to)
  23 {
  24 Queue moveQueue = new Queue(); // 路線
  25 int value; // 與離目的地距離相關的一個量,變化規律:  => 2 => 1 => 3 => 2 => 1 => 3 => 2 => 1
  26 if (Seek(map, to, out value)) // 找到了一條路線
  27 {
  28 Point here = from; // 出發點(即工人的位置)
  29 Point nbr = new Point(); // 四周的鄰居
  30 for (value = (value + 1) % 3 + 1; here != to; value = (value + 1) % 3 + 1) // 逐步走向目的地
  31 {
  32 for (int i = 0; i < offsets.Length; i++)
  33 {
  34 nbr = Fcl.Add(here, offsets[i]); // 開始尋找四周的鄰居
  35 if (Block.Value(map[nbr.Y, nbr.X]) == value) // 就往這個方向走
  36 {
  37 moveQueue.Enqueue(directions[i]); // 路線向目的地延伸一步
  38 break;
  39 }
  40 }
  41 here = nbr; // 繼續前進
  42 }
  43 }
  44 Block.CleanAllMark(map); // 清除所有標志,恢復現場
  45 return moveQueue; // 所尋找的路線,如果無法到達目的地則為該路線的長度為零
  46 }
  47
  48 /// 
  49 /// 尋找最短路線,使用廣度優先搜索
  50 /// 
  51 /// 地圖
  52 /// 目的地
  53 /// 輸出:搜索完成時標記的值
  54 /// 是否成功
  55 static bool Seek(byte[,] map, Point to, out int value)
  56 {
  57 Queue q = new Queue();
  58 Block.Mark(ref map[to.Y, to.X], 1); // 從目的地開始往回尋找出發點,目的地標記為1
  59 Point nbr = Point.Empty; // 四周的鄰居
  60 for (; ; )
  61 {
  62 value = Block.Value(map[to.Y, to.X]) % 3 + 1; // 與離目的地距離相關的一個量,用作標記,變化規律:
  63 for (int i = 0; i < offsets.Length; i++) // 1 => 2 => 3 => 1 => 2 => 3 => 1 => 2 => 3 => 
  64 {
  65 nbr = Fcl.Add(to, offsets[i]); // 開始尋找四周的鄰居
  66 if (Block.IsMan(map[nbr.Y, nbr.X])) break; // 到達出發點(即工人的位置)
  67 if (Block.IsBlank(map[nbr.Y, nbr.X])) // 可以走的路
  68 {
  69 Block.Mark(ref map[nbr.Y, nbr.X], value); // 標記,防止以后再走這條路
  70 q.Enqueue(nbr); // 加入隊列,等待以后繼續尋找
  71 }
  72 }
  73 if (Block.IsMan(map[nbr.Y, nbr.X])) break; // 到達出發點
  74 if (q.Count == 0) return false; // 無法到達出發點
  75 to = q.Dequeue(); // 出隊,繼續尋找,這是廣度優先搜索,因為前面已經把四周能夠走的路全部加入隊列中了.
  76 }
  77 return true; // 找到一條路線
  78 }
  79 }
  80 }

  上面的源程序已經對搜索算法作了很好的注釋。我們還是來看兩幅反映算法運行時地圖上各標記值的圖片吧:

  

c#開發手機游戲推箱子

c#開發手機游戲推箱子

  圖中,帶圓圈的紅色的數字“1”是“目的地”,也就是算法開始的地方,因為該算法是從目的地開始往回尋找出發點。在改進后的算法中,標記值始終是在“1、2、3”這三個數中循環,而不是象以前一樣一直增大。在圖中,算法按“紅、黃、綠、藍、粉紅、青”的順序從目的地往外搜索,直到遇到“工人”而返回成功,或者填滿能夠到達的空地而返回失敗。

  算法經過這次改進,搜索的距離就不象原來一樣受限于 8192 步。而且也將地圖所占用的內存空間減少到原來的二分之一。

  這次改進,除了仔細重寫了 FindPath 類以外,程序其余地方只是將所有的“ushort”替換為“byte”就行了,因為本程序只在涉及地圖的地方使用過“ushort”。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文有码在线视频| 日韩成人av一区| 日av在线播放中文不卡| 国产成人拍精品视频午夜网站| 另类色图亚洲色图| 亚洲黄一区二区| 美女福利精品视频| 2019亚洲日韩新视频| 亚洲国产精品电影在线观看| 日韩欧美在线国产| 性色av一区二区三区红粉影视| 黄色成人在线免费| 日韩在线视频免费观看| 国产精品久久久久久一区二区| 色婷婷av一区二区三区久久| 国产精品wwww| 欧美午夜宅男影院在线观看| 亚洲精品国精品久久99热| 精品久久久久久亚洲精品| 欧美成在线观看| 亚洲人成电影网站色…| 国产精品扒开腿爽爽爽视频| 久久久亚洲影院你懂的| 91精品视频在线免费观看| 欧美一区二区三区艳史| 中文字幕日韩欧美在线| 久久久精品久久| 久久国产加勒比精品无码| 国产精品成人av性教育| 国内免费久久久久久久久久久| 欧美精品少妇videofree| 亚洲午夜久久久久久久| 国产视频综合在线| 亚洲天堂视频在线观看| 久久久999成人| 国产一区二区三区视频免费| 欧美激情综合亚洲一二区| 亚洲第一页自拍| 国产精品青草久久久久福利99| 亚洲人成网7777777国产| 日韩亚洲精品视频| 中文字幕在线看视频国产欧美在线看完整| 国产精品国产福利国产秒拍| 日本精品一区二区三区在线播放视频| 欧美国产高跟鞋裸体秀xxxhd| 欧美人在线观看| 岛国视频午夜一区免费在线观看| 狠狠综合久久av一区二区小说| 一区二区三区 在线观看视| 亚洲日韩第一页| 欧美成人在线影院| 欧美激情影音先锋| 成人字幕网zmw| 亚洲美女久久久| 91精品国产91久久| 久久夜色精品国产欧美乱| 欧美激情视频免费观看| 日韩www在线| 黑人与娇小精品av专区| 欧美放荡办公室videos4k| 欧美日韩国产一区在线| 国产精品偷伦免费视频观看的| 国产精品亚发布| 国产精品久久久久久av| 亚洲va电影大全| 国产精品久久久久久亚洲影视| 国产欧美一区二区三区久久人妖| 91欧美激情另类亚洲| 日韩成人中文字幕| 欧美日韩亚洲国产一区| 性金发美女69hd大尺寸| 国产成人精品日本亚洲专区61| 亚洲成人教育av| 国产精品老女人精品视频| 大荫蒂欧美视频另类xxxx| 91天堂在线观看| 亚洲第一免费网站| 欧美在线观看网址综合| 亚洲人成电影在线| 91久久精品久久国产性色也91| 久久精视频免费在线久久完整在线看| 日韩欧美国产视频| 亚洲福利视频网站| 色哟哟亚洲精品一区二区| 91久久在线视频| 91国语精品自产拍在线观看性色| 精品久久久视频| 国产精品视频久久久| 久久色精品视频| 国产成人精品视频在线| 精品呦交小u女在线| 亚洲欧美日韩视频一区| 久久在精品线影院精品国产| 国产亚洲精品美女久久久久| 欧美性生交大片免网| 欧美另类高清videos| 95av在线视频| 欧美午夜xxx| 欧美国产日韩一区二区三区| 国产精品成av人在线视午夜片| 国产亚洲成精品久久| 中文字幕亚洲一区二区三区五十路| 欧美久久精品一级黑人c片| 亚洲男人的天堂网站| 亚洲国产成人精品女人久久久| 国产精品偷伦一区二区| 日本老师69xxx| 亚洲精品国精品久久99热| 日本亚洲欧美三级| 另类图片亚洲另类| 精品久久久一区二区| 欧美激情a在线| 亚洲国产中文字幕在线观看| 中文字幕精品网| 欧美激情视频一区二区| 国产做受69高潮| 欧美亚州一区二区三区| 日韩中文视频免费在线观看| 中文字幕欧美在线| 欧美日韩一区二区免费视频| 亚洲黄色av网站| 国产精品美女呻吟| 日韩精品高清在线观看| 国产精品自产拍在线观看| 欧日韩不卡在线视频| 亚洲开心激情网| 欧美国产高跟鞋裸体秀xxxhd| 国产一区二区三区在线| 精品高清美女精品国产区| 成人精品久久久| 欧美成人h版在线观看| 国产成人在线精品| 久久久亚洲国产天美传媒修理工| 久久久视频精品| 国产精品久久久久久av| 91在线观看免费| 欧美午夜宅男影院在线观看| 久久韩剧网电视剧| 国产一区二区三区高清在线观看| 欧美亚洲午夜视频在线观看| 成人激情综合网| 亚洲色图综合网| 国产精品综合网站| 青青草成人在线| 美女撒尿一区二区三区| 欧美日韩一区二区精品| 一区二区日韩精品| 久久精品2019中文字幕| 亚洲欧美一区二区三区久久| 欧美日韩在线第一页| 91精品视频在线| 成人激情视频在线| 538国产精品一区二区在线| 亚洲国产高清福利视频| 国产日韩欧美综合| 亚洲一二三在线| 欧美国产亚洲精品久久久8v| 日韩av在线影院| 日韩av在线一区| 欧美情侣性视频| 亚洲白拍色综合图区| 一区二区欧美日韩视频| 亚洲综合国产精品| 欧美成人精品影院|