0

我正在为 2D 游戏地图绘制一个 3x3 的正方形网格。

我想创建一个具有行和列位置的数组,并且对于每个行和列位置,它有 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}};

很清楚,我要制作的数组类型吗?

我该怎么做?

谢谢

4

2 回答 2

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 的数组,并且有重要区别。研究尺寸和长度之间的差异,因为它似乎是您在让代码工作时遇到的主要问题。

正如其他人所提到的,这种设计并没有很好地利用您拥有的工具。如果您使用对象来封装这些数据,而不是将多种类型的数据放在同一个数组中,您的代码可能会更加清晰。这会让人感到困惑并且很容易出错。

于 2013-08-19T22:42:35.193 回答
1

你可以这样做:

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

但正如评论中提到的,您可能需要重新考虑您的设计。创建一些类会使事情更清楚。

于 2013-08-19T22:41:12.930 回答