Zol*_*ete 3 c# syntax multidimensional-array
我是C#的新手,我想创建一个像这样的多维数组:
http://kids.parks.ca.gov/pages/22784/images/maze.gif
但是在8x8x4细胞中.
我想存放迷宫细胞.
{
{1,1,1,0}, {1,0,0,0}, {1,1,1,1}, {1,0,0,0}, {1,1,0,1}, {1,1,0,1}, {0,1,0,0}, {1,0,0,1},
...
{0,1,1,0}, {1,0,1,0}, {0,0,1,1}, {1,0,1,0}, {1,0,0,1}, {0,1,0,1}, {1,1,1,0}, {1,1,0,1},
}
Run Code Online (Sandbox Code Playgroud)
int[,,] table = new int[8,8,4]; // is this right?
table[0,0] = {0, 0, 1, 1}; // I want to fill it this way.
Run Code Online (Sandbox Code Playgroud)
我知道它没有明确回答这个问题,但在我看来,你是通过使用3D阵列来拍摄自己的.C#是一种OO语言,所以如果你认为OO真的有帮助.
而不是使用表示单元格的多维数组3d Maze(如果它真的是一个你想要的3d迷宫),为什么不创建一个List名为Cell的类,每个类都包含它们的位置和你需要的其他东西,如:
public class Cell
{
public Cell (int x, int y, int z)
{
X = x;
Y = y;
Z = z;
}
public int X { get; set; }
public int Y { get; set; }
public int Z { get; set; }
public bool IsExplored { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后你可以有一个List<Cell>你可以迭代的简单.您还可以删除x,y,z并创建一个Position类.
对于墙,您可以创建Enum并使用按位操作,或存储列表Enum.既然你是初学者,我会建议你的枚举列表.您必须在代码中添加此Enum,并将此属性添加到Cell类中:
public Enum WallPosition
{
Top,
Left,
Bottom,
Right
}
public List<WallPosition> walls { get; set;} //This goes into the Cell class
Run Code Online (Sandbox Code Playgroud)
这样,每个操作都会容易得多.例如,如果您需要探索#3列中的每个单元格,则可以执行此操作
foreach (Cell cell in yourCellList.Where(c => c.Y == 3))
{
cell.IsExplored = true;
}
Run Code Online (Sandbox Code Playgroud)
需要以不同方式渲染每个探索的细胞吗?
foreach (Cell cell in yourCellList.Where(c => c.IsExplored) { //Do stuff }
Run Code Online (Sandbox Code Playgroud)
等等.
不需要for具有3维的复杂循环,而foreach在我看来,简单的东西比a更具可读性
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
for (int k = 0; k < 4; k++)
Run Code Online (Sandbox Code Playgroud)
每次你需要访问你的表.
唯一丑陋的部分是填写你的列表(通过创建新的Cell实例),但它仍然比一个巨大的墙壁更可读{ { { 0, 1, 0, 1 }, {1, 1, 1, 0} [...]