Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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++_Arrays - Fatal编程技术网

C++ 如何创建一个一维数组来容纳多个二维数组?

C++ 如何创建一个一维数组来容纳多个二维数组?,c++,arrays,C++,Arrays,我一直在做一个游戏。这是一款基于文本的RPG冒险游戏。我希望让玩家使用简单的文本命令来导航世界。我设置它是为了将世界划分为多个区域或阵列。每个区域都是自定义数据类型位置,由二维数组组成。我将使用两个变量来跟踪玩家的位置,这实际上是区域网格上斑点位置的两个索引值。当玩家键入一个方向命令,如北、南、东或西时,将增加或减少这些值以移动玩家。当它们到达过渡区时,它将把它们移到另一个区域。我在想我可以有一个数组来容纳所有的区域。过渡区域只会提高或降低主阵列的索引,以过渡到下一个区域。我当然会让过渡空间有一

我一直在做一个游戏。这是一款基于文本的RPG冒险游戏。我希望让玩家使用简单的文本命令来导航世界。我设置它是为了将世界划分为多个区域或阵列。每个区域都是自定义数据类型位置,由二维数组组成。我将使用两个变量来跟踪玩家的位置,这实际上是区域网格上斑点位置的两个索引值。当玩家键入一个方向命令,如北、南、东或西时,将增加或减少这些值以移动玩家。当它们到达过渡区时,它将把它们移到另一个区域。我在想我可以有一个数组来容纳所有的区域。过渡区域只会提高或降低主阵列的索引,以过渡到下一个区域。我当然会让过渡空间有一个值来存储玩家将在下一个区域的网格上结束的位置。我只是想知道如何制作这个主阵列来容纳区域阵列。问问我有没有什么不知道的;我解释得不够好。先谢谢你

struct Location
{
    int type, destX, destY;
    // 1 = battlefield
    //  areas where random encounters will at some future date occur
    // 2 = town
    //  areas where hopefully the foolhardy adventurer will be able to speak
    // to merchants and towns folk
    // 3 = dungeon
    //  areas with long travel times and the promise of an end boss
    //  but more importantly really awesome loot
    // 4 = transition points
    //
    string name, desc;
};
这就是我的设想。 绿色森林 [][][] [][][] [][][] ^ 过渡区将使用存储值destX和destY将玩家移动到以下区域中的目的地 斯拉文 这个地方就是目的地 v [][][][][] [][][][][] [][][][][]
[]

关于您问题的标题,这是您在C++中创建二维数组的一维数组:

std::vector<std::vector<std::vector<Entity>>> v;
根据阵列的大小和访问顺序,您可以使用其他索引器,例如Morton/Z-Order索引

template <typename T, typename Indexer=LinearIndexer>
...
    T  operator() (size_type x, size_type y) const { return data_[Indexer()(x,y)]; }

...

surface<int, Morton> foo(102400, 102400);

您甚至可能对容器进行模板化,以允许像容器这样的特殊情况,这些容器可以及时从磁盘加载/保存到磁盘。

3维数组就是答案

int world[4][5][6];
4是区域数量,5和6是2D阵列。
如果您需要可变大小的区域,请使用指针并分配所需的数量。

您可以将所有矩阵缩减为一个大的一维数组。对于每个区域,您都知道其在阵列中的偏移量及其宽度和高度。区域内的导航很简单,东/西为+/-1,南/北为+/-region_宽度。当遍历区域边界时,需要特殊代码,以防止它,或跳转到另一个区域


我建议你把世界从一堆矩阵变成一张图。图中的一个位置至少有4个但可能有更多的出口槽。一个插槽将有一个除n、s、e、w之外的方向标识符,可以有上、下、门、楼梯和任何您喜欢的东西,可以是插槽的隐式已知或与插槽一起存储的显式标识符,还可以是该插槽指向的位置的标识符。该标识符可以是一个大1D数组中的位置索引。这种方法的缺点是更多的簿记。好处是你有更多的自由来创造你的世界。这张图表在特殊情况下很有吸引力。你可以有4个以上的出口,单向通道,或者像下水道这样让人难以置信的地方,在那里你认为你要往北走,但它会把你带到西部,或者类似的地方。CircleMUD和大多数其他MUD都使用图形解决方案。

您不能创建一个三维或更高维的数组吗?比如——城市、社区、地址?我真的在问!请不要向初学者推荐指针。即使是自称先进的C++程序员也会导致内存管理错误,尤其是在编写C++类时。7.9个数组,具有三个或更多个维度:C++不限制数组可能具有的维数。可以创建具有多个维度的数组,对多个集合中出现的数据进行建模。这不适用于游戏吗@phresnel@RobertoWilko:s/拥有多维数组/拥有多维容器/他就不能。。。typedef结构位置{…}@罗伯特威尔科:我基本上是通过看问题来回答的。其余的有点混乱。请注意,C++中不需要TyPulfStrut。我的坏,我不知道Type Debug!!在我意外提交之前,我正在引导一个结构数组。如果结构定义的位置比需要的少一个,但是结构数组的下标引用了最高的loc/pos,那么您可以说。。。位置loc[2]//loc[0]=这里,loc[1]=这里有一个购物中心,有areasentry、foodcourt等,还有Storesmay、Panda Express等。。有一个购物中心,面积为Swing1、wing2等,商店有便士、无薪鞋类等。。你能推荐一下吗?
template <typename T, typename Indexer=LinearIndexer>
...
    T  operator() (size_type x, size_type y) const { return data_[Indexer()(x,y)]; }

...

surface<int, Morton> foo(102400, 102400);
int world[4][5][6];