第一次用C#寫游戲。在C#上寫算法果然是一個挑戰,時間復雜度太大的話造成的后果比C++明顯好多,于是總是盡量把東西做成O(n)或者O(nlogn)。這次就在上面實現了一個尋路算法。
這個尋路算法是這樣的:在16×16的方格上有一些終點,東西在格子上只能上下左右行動。每一個格子需要記錄到其中一個終點的最近的路的所有方向(就像三層循環的尋路算法一樣,最后給出矩陣的那個)。

算法如下:
1:把所有的GOAL加入隊列并標記。
2:記錄當前隊列的元素數量。
3:彈出一個元素,并將所有未標記的鄰居添加一個指向自己的方向,將這些鄰居不重復地放入隊列(可以再用一個不同的標記來檢查),標記這個元素(非鄰居)。
4:如果彈出的元素數量沒有第2步記錄的那么多,則轉3。
5:如果隊列數量非空,轉2。
6:結束。
執行這個算法,可以得到每一層分別是:

C#果然是用來做大作業的不二選擇啊,開發真是方便,而且不用顧及內存問題(因為一定占用非常多)。