[英]Algorithm Help: Building game board, but need to know when square is locked in
我建立了一個由網格組成的游戲板,然后將網格隨機分配給“ Walls”到一個單元。 構建好單元后,如何檢查某個單元是否已“鎖定”,這樣我就不會再放置播放器了。
我已經考慮過這一點,在第一年前,我想出了四面都檢查牆壁的方法,但是很明顯,一個牢房可以被敞開的牢房包圍,然后再被牆壁包圍。
另一個是“逃逸到外部”算法,它基本上試圖找到通往外牆的路徑,這意味着它沒有被鎖定,但是如果該塊位於外牆上並且被塊包圍,則它將被鎖定。在。
通常如何處理? 如果任何代碼示例都重要,我將使用python。
謝謝!
您基本上需要一個泛洪算法。
http://en.wikipedia.org/wiki/Floodfill
編輯
我想我誤解了您對“鎖定”和“逃逸”的定義。
如果您的游戲板有限,則每個單元格都鎖定在某個空間中。 如果我對您的理解正確,那么您只是希望該空間足夠大。 好了,您可以使用洪水填充算法輕松計算其面積。
這實際上取決於游戲板的大小。 如果我們說的是小型電路板,則快速路徑查找算法可以為您提供每個單元之間的距離。 如果您不想將播放器放置在與其他播放器或其他功能過於靠近的位置,則可能有雙重用途。
第二種選擇是設計一種原則上不能創建鎖定房間的牆式發生器。 流氓類社區對生成不帶封閉房間的隨機(地牢大小)地圖的主題進行了大量研究 。
最后,如果您必須在巨大的地圖上找到適當的大空白空間,則使用詳細程度的方法可以為您提供幫助。 查找分布在地圖上的一組稀疏點的互連圖(這可能是地圖生成器的直接結果)。 這足以放置一個玩家。 但是,如果您需要有關特定點的更多詳細信息,則找到通往這些點之一的路徑可以告訴您房間是否被鎖定。在迷宮般的密集迷宮中,這可能不起作用。
我不確定您的游戲板到底是什么樣子,但是如果您有這樣的事情:
+----------------------+
| +-----+ |
| | c | |
| | | |
| +-----+ |
| |
| |
| |
+----------------------+
而且,您希望避免將字符放到c
上,因為它已“圍入”,即使它沒有被牆壁完全包圍,您也可以輕松實現左右手算法 -只是嘗試擺脫這種情況您正在檢查的迷宮,以查看是否使其回到相同的坐標。
也許以前的帖子就是您想要的。 在那篇文章中,我回答了如何計算可以放置點的網格上點的不同區域的數量。 您的問題是相似的,除了有“點”而不是牆。 該帖子中給出的算法將為您提供網格G的版本,其中
G[x1][y1] == G[x2][y2]
僅當玩家有可能從(x1,y1)到達(x2,y2)時,即,從第一個點到第二個點之間沒有障礙物的暢通無阻的路徑。
這是你想要的? 您是否需要其他詳細信息,還是要我根據您的特定問題修改代碼?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.