连连看算法笔记
這幾天都沒有更新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
本文轉自suifei博客園博客,原文鏈接:http://www.cnblogs.com/Chinasf/archive/2005/06/02/166570.html,如需轉載請自行聯系原作者
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: string与QString转换(str
- 下一篇: chkdsk工具怎么运行 “请运行Chk