2017-07-17 26 views
0

我在嘗試創建項目安排時遇到問題。我正在創建一個遊戲,該遊戲發生在由地形項目組成的棋盤上。棋盤上的每個地形都是自己獨特的物品,具有特定的屬性和關係。地形生成的一個重要部分要求每個空間都能夠引用其相鄰的磁貼,而且我也預見了後續對這種實現的最終需求,所以我現在想要克服它。關係意識

我遇到的主要問題是我在相對於整個事情不知道如何使矩陣中的每個成員知道對方和自己。有關它如何工作的一些見解,設計是雙層的。

首先是一個包含所有成員的普通集合。每個成員都包含在自己的通用項目中,其中包含原始數據以及項目在集合中的位置。

最重要的標準是,我不能有物體被通過大集合搜索有關。我需要讓每個項目都包含對所有相關鄰居的引用,能夠從該引用編輯其鄰居,並避免在更新這些項目時進行所有遞歸。

我基本上是試圖從數據庫中創建的東西幾乎等同於一對一的關係,使其只在一個地方存在,但其其他成員這就像在數據庫中記錄的比喻訪問。

回答

0

如果我正確理解你的問題,每個瓦片需要知道並能夠引用矩陣中的相鄰瓦片。想到的第一個解決方案是使用指針,但是因爲這是c#,所以堅持安全的方法可能會更好。

我對這個問題的解決方案是在類型Terrain的構造函數中包含一個數組Terrain的參數,以及一個整數參數以及該數組中的特定元素的位置。

如果你這樣做,那麼Terrain可以從相對於其自身位置的陣列的相鄰項目;當然,右邊的項目是它的位置+ 1,左邊的元素是它的位置 - 1. 上面的元素是位置減去遊戲板的寬度,下面的元素是位置加上游戲板的寬度。

+0

或者這不是一個有效的解決方案?你說它不需要搜索集合,但我不確定你是否意味着這個或其他東西... –

+0

不,這是一個不幸的解決方案,因爲雖然矩陣的每個成員都知道它自己的位置,它與其他項目的相對位置無關,因爲這是必須手動引用的方式。 你所描述的並不能解決問題的特定方面,除非每個圖塊都包含所有其他圖塊,但是每個圖塊的更新都會導致遞歸更新問題。它的孩子就像所有不包含自身的集合。任何時候,如果您更新它不包含它自己,那麼它們必須更新以包含它自己,堆棧將永遠不會解析 – Azeranth