簡體   English   中英

C#:多維數組外觀?

[英]C# : Multidimensional array facade?

我有以下課程:

public class Layer
{
    public Tile[,] Grid; //50x50 positions filled with my own Tile struct
}

public class Level
{
    public Layer[] Layers; //An array of layers in the level
    public List<object> Objects; //And a couple of lists of say, characters or such in the level.
}

public class Area
{
    private Level[,] _activeLevels; //3x3 array of the current level and surrounding ones.
}

我想要的是能夠打電話給我。

Area.Layers[0].Grid[112, 64];

從級別[2,1]獲取網格[12,14]中的圖塊。

更多說明:

假設一個圖層有50 x 50的位置,我希望以下內容可以解釋我想要的內容。

“如果我打電話” =>“然后我真正想要”

Area.Layers[0].Grid[0,0] => Area.Level[0,0].Layers[0].Grid[0,0]
Area.Layers[0].Grid[0,10] => Area.Level[0,0].Layers[0].Grid[0,10]
Area.Layers[0].Grid[0,49] => Area.Level[0,0].Layers[0].Grid[0,49]

Area.Layers[0].Grid[0,50] => Area.Level[0,1].Layers[0].Grid[0,0]
Area.Layers[0].Grid[0,60] => Area.Level[0,1].Layers[0].Grid[0,10]

Area.Layers[0].Grid[0,112] => Area.Level[0,2].Layers[0].Grid[0,12]

-[下一部分已經回答,見下文]-


另外,我希望能夠打電話給我。

foreach (object o in Area.Objects)
      //dostuff

要從九個級別的所有對象上調用foreach。


誰能給我一些正確的方向,如何實現這一點的建議,或者簡單地將其編碼出來?

在第一個示例中不確定您想要什么,您可能需要檢查它是否正確。

您可以通過實現自己的IEnumerable遍歷1個迭代器中的所有對象:

public class Area {
        private Level[,] _activeLevels; //3x3 array of the current level and surrounding ones.

        IEnumerable<object> Objects {
            get {
                foreach (Level lvl in _activeLevels)
                    foreach (object o in lvl.Objects)
                        yield return o;

            }
        }
    }

同一對象可以在不同級別之間共享嗎? 在這種情況下,您可能要過濾重復項。

對於Area.Layers[0].Grid[112, 64]最好使用以下形式的Area.GetTile(0, 112, 64)形式的方法來實現:

public Tile GetTile(int layer, int overallX, int overallY)
{
    return _activeLevels[overallX / 50, overallY / 50]
            .Layers[layer]
            .Grid[overallX % 50, overallY % 50];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM