2013-08-19 63 views
0

我正在爲2D遊戲地圖繪製一個3x3的正方形網格。c#array多維或鋸齒狀

我想要創建一個具有行和列位置的數組,並且對於每個行和列位置,它具有4個0或1,表示是否將在該正方形的邊上繪製牆。

我想創建數組:

 int [,][,,,] Boxes = {{0,0}, {1,0,0,1}, 
      {1,0}, {1,0,1,0}, 
      {0,1}, {0,0,0,1}, 
      {1,1}, {1,1,1,0}, 
      {2,0}, {1,1,0,0}, 
      {2,1}, {0,0,0,1}, 
      {3,1}, {1,0,1,0}, 
      {0,2}, {0,0,1,1}, 
      {1,2}, {1,0,1,0}, 
      {2,2}, {0,1,1,0}}; 

然而,這似乎是不正確的。

我也試過這樣:

 int [][] Boxes = new int [2][4] 
     Boxes = {{0,0}, {1,0,0,1}, 
      {1,0}, {1,0,1,0}, 
      {0,1}, {0,0,0,1}, 
      {1,1}, {1,1,1,0}, 
      {2,0}, {1,1,0,0}, 
      {2,1}, {0,0,0,1}, 
      {3,1}, {1,0,1,0}, 
      {0,2}, {0,0,1,1}, 
      {1,2}, {1,0,1,0}, 
      {2,2}, {0,1,1,0}}; 

是否清楚,數組我試圖做的類型?

我會怎麼做呢?

感謝

+8

如果創建一個具有內部「行」,「列」和「牆」的「位置」對象,機會可能會更大,更清晰和不可怕。然後你的問題簡化爲你迭代的'Position'數組。 –

+0

你試過類型'int [2,4]'嗎? –

+0

謝謝。我實際上希望數組是pictureBoxes,以便能夠插入圖片,而且還可以在代表牆的正方形邊緣畫一條線。我原本是這樣的:'PictureBox [,] Boxes = new PictureBox [4,4];'它確實繪製了網格,並使用了行和列以及框的寬度來確定繪製每個正方形的位置。我會嘗試你提出的對象方式。我會做'PictureBox [0,0] .row = 1;'' 'PictureBox [0,0] .walls = {1,0,0,1};'? – user2602079

回答

3

第一種方法的問題是int [,] [,,,]是四維數組的二維數組。 [,]指形式爲{{0,0},{0,0}}的數組,其形式爲{0,0}。逗號表示尺寸的數量,而不是元件的數量

你的第二種方法更接近。您正在創建一個正確維度的數組,但不能像這樣在數組內部初始化數組。它看起來更像是這樣的:

int [][] Boxes = new int[][] { 
     new int[] {1,0}, new int[] {1,0,1,0}, 
     new int[] {0,1}, new int[] {0,0,0,1}, 
     new int[] {1,1}, new int[] {1,1,1,0}, 
     new int[] {2,0}, new int[] {1,1,0,0}, 
     new int[] {2,1}, new int[] {0,0,0,1}, 
     new int[] {3,1}, new int[] {1,0,1,0}, 
     new int[] {0,2}, new int[] {0,0,1,1}, 
     new int[] {1,2}, new int[] {1,0,1,0}, 
     new int[] {2,2}, new int[] {0,1,1,0}}; 

這是非常坦率的,可怕的。

在這裏突出的一件事是你寫了new int [2][4]。 [2] [4]不是指大小爲2的數組,後跟大小爲4的數組。它指的是大小爲4的數組的大小爲2的數組,以及重要的區別。查看維度和長度之間的差異,因爲它似乎是您讓代碼運行的主要問題。

正如其他人所說,這種設計沒有很好地利用你所擁有的工具。如果您使用對象來封裝這些數據,而不是將多種類型的數據放入同一個數組中,那麼您的代碼可能非常清晰。這變得令人困惑並且非常容易出錯。

+0

謝謝,我可能不得不開始一個新的問題,我將如何使用對象的屬性,但我會嘗試自己,看看我如何去。我希望每個方塊都是一個圖片框對象,所以我可以插入一個圖片圖塊,然後爲該圖片框對象提供一個代表要繪製或未繪製的牆的數組{x,x,x,x}。我想給它一個專欄和一排。這聽起來可行嗎? – user2602079

+0

我並不完全清楚你的計劃是什麼,但根據我對它的解釋,這似乎是可行的。不過,最近對你的問題的評論意味着更好的東西。 –

+0

我不知道如何一旦我完成了這個操作,如何引用此數組上的項目。它不允許我說Boxes [0,0]了,因爲它不期待逗號 – user2602079

1

你可以這樣說:

int[,][] boxes = new int[3,3][]; 
boxes[0,1] = new [] { 0, 0, 0, 1}; 
boxes[1,0] = new [] { 1, 0, 1, 0}; 
// .. etc. 

但由於在評論中提到的,你可能要重新考慮你的設計。創建一些類會讓事情更清楚。