Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多维数组项生成器_C#_Multidimensional Array - Fatal编程技术网

C# 多维数组项生成器

C# 多维数组项生成器,c#,multidimensional-array,C#,Multidimensional Array,我目前正在自学c#通过创建一个基于文本的rpg,我决定通过在每次生成楼层时随机生成楼层地图(5x5个房间)来增加额外的挑战。 似乎一本字典,上面有一个键=地图上的位置和一个包含瓷砖细节的列表最适合(据我所知),我可以想到两种方法: 1) 字典的键是包含位置信息的多维数组。 2) 键是一个介于1和25之间的数字,位置信息包含在列表的开头 在这一点上,我试图找出一种方法,我可以将值写入其中,并将它们与之前生成的坐标进行比较。我找到了向量,但那些是可悲的C++,我已经想到了一个for循环,在一个if语

我目前正在自学c#通过创建一个基于文本的rpg,我决定通过在每次生成楼层时随机生成楼层地图(5x5个房间)来增加额外的挑战。 似乎一本字典,上面有一个键=地图上的位置和一个包含瓷砖细节的列表最适合(据我所知),我可以想到两种方法: 1) 字典的键是包含位置信息的多维数组。 2) 键是一个介于1和25之间的数字,位置信息包含在列表的开头

在这一点上,我试图找出一种方法,我可以将值写入其中,并将它们与之前生成的坐标进行比较。我找到了向量,但那些是可悲的C++,我已经想到了一个for循环,在一个if语句(在我的脑海中,工作与否之间),在同一个索引点中,通过两个列表迭代,一些奇怪的数组比较和其他想法。 主要是我想为比我更聪明的人着想,如果排除了一些可能性,也许我能找到答案。或者如果有人做了类似的事情,如果我能研究他们的代码,这也会有所帮助

房间将显示为一个文本块,地图将是这样一个数组

    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0
从简单开始

对于这个大小的问题,
列表
非常好,只要在列表中的每个值上都有一个X和一个Y

列表
字典
是一种优化,您可以稍后再做,您对键1-25的建议很好,您可以使用
%
/
来回转换为X和Y

使用该列表,您只需执行
rooms.Where(r=>r.X==X&&r.Y==Y)
即可获得您要找的房间

就我个人而言,我会把你的“世界”构造成一个图形而不是一个网格:每个房间都有一个字符串字典(或者一个枚举,或者一个类实例)到房间,字符串就是你想要移动的方向

class Room {
    public Dictionary<string, Room> Neighbors;
    ...

room1.Neighbors.Add("north", room3);
...
教室{
公共词典;
...
房间1.邻居。添加(“北”,房间3);
...

现在,您可以有像
向上
向下
向外
向内
,…

键的另一种可能是
元组
,即x和y坐标(例如
(2,3)
);多维数组作为键是一个错误的选择。或者是一个带有两个整数的简单结构。您的“房间”在屏幕上是如何显示的?您是根据屏幕像地图一样显示完整的5x5房间文本?还是按标题/描述显示房间中的每个位置?房间以5 x 5的网格显示,打印如下0000000000 00000房间本身是一个描述或发生的事件,我没有艺术技巧,如前所述,纯粹基于文本的编辑:似乎评论没有保留格式,所以我将其添加到问题中是的,目标是RPG,因此图形可能是更好的结构。另请参阅Eric Lippert的文章系列。