這幾天都沒有更新blog,正在用休息時間編寫一個連連看的小遊戲,目前已經完成,還在測試階段,準備加如點背景音樂和效果.測試完成後再發布遊戲;
象連連看這類遊戲,就是最短路徑求解,演算法要求如下:
一個int 類型的2維數組,定義為
public const int TileRowCount = 19;
public const int TileColCount = 12;
int[,] Map = new int[TileRowCount,TileColCount];
Map[x,y] 的位置如果為 0 ,表示可以通過,如果為 1 表示障礙物
定義起點座標和終點座標,尋找可以通過的路徑;並返迴路徑經過的x/y位置,用100.
如 5 X 5 的矩陣:
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 1 0 0
0 0 0 0 0
設起點x/y座標為 0,0 ,終點座標為 3/3,那麼如(*表示起點,+表示終點)
* 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 1 + 0
0 0 0 0 0
最終路徑應該是:
0,0 1,0 2,0 3,0 3,1 3,2 3,3
繪製成圖的路徑應該是如下(路徑用.表示)
* . . . 0
0 0 0 . 0
0 0 1 . 0
0 0 1 + 0
0 0 0 0 0
這樣算1個折點.
也可以是
0,0 0,1 0,2 0,3 0,4 1,4 2,4 3,4 3,3
* 0 0 0 0
. 0 0 0 0
. 0 1 0 0
. 0 1 + 0
. . . . 0
這樣是2個折點
很明顯路徑1的方式要更優;
那麼查處路徑之後,還必須選擇最優路徑,並且要控制路徑的折點在0到2之間,這個是遊戲的規則.
關於理解連連看的演算法,可以看看這個文章,這種判斷式理論上來說是比較容易的,但我採用的是迷宮求解的演算法,最後是根據統計折點來判斷是否可以成功串連,這樣可以擴充難易度;
http://www.7880.com/Info/Article-3348a980.html