尋路演算法:模仿Tower Defense Flash做了一個小遊戲

來源:互聯網
上載者:User

    第一次用C#寫遊戲。在C#上寫演算法果然是一個挑戰,時間複雜度太大的話造成的後果比C++明顯好多,於是總是盡量把東西做成O(n)或者O(nlogn)。這次就在上面實現了一個尋路演算法。

    這個尋路演算法是這樣的:在16×16的方格上有一些終點,東西在格子上只能上下左右行動。每一個格子需要記錄到其中一個終點的最近的路的所有方向(就像三層迴圈的尋路演算法一樣,最後給出矩陣的那個)。

    於是我用了寬度優先搜尋和一個隊列來搞定這個事情。一開始演算法寫錯變成O(n2)結果每一次處理都要1秒鐘。後來改正了之後結果瞬間給出。

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

    這個演算法可以在添加障礙物的時候重新計算,僅需障礙物在一開始就被標記就行了。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.