c#如何将2D数组拆分为较小的2D数组(块)列表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#如何将2D数组拆分为较小的2D数组(块)列表?相关的知识,希望对你有一定的参考价值。

所以基本上,我正在制作游戏,我决定为大地图添加块,以便它不会滞后。我的想法是有一个主要的2D数组,包含我的地图的所有图块(整数),以及一个块列表(其他2D数组)。

static int[,] map;
static List<int[,]> chunks;

假设我的地图在瓷砖中是9x9,每个块在瓷砖中是3x3。我的列表中应该总共有9个块。我一直在考虑这个问题一个多星期了,我还没有找到解决方案。

即使是一点帮助也会做很多事情。

答案

你可以使用Buffer.BlockCopy和很少的逻辑实现这一点。检查以下代码

static void Main(string[] args)
        {
            int p = 1;
            int[,] array = new int[9, 9];
            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                {
                    array[i, j] = p++;
                }
            }
            GetChunkUsingBlockCopy(array, 3, 3);
        }

   static List<int[,]> GetChunkUsingBlockCopy(int[,] array, int row, int column)
        {
            int chunkcount = (array.GetLength(0) * array.GetLength(1)) / (row * column);
            List<int[,]> chunkList = new List<int[,]>();
            int[,] chunk = new int[row, column];

            var byteLength = sizeof(int) * chunk.Length;
            for (int i = 0; i < chunkcount; i++)
            {
                chunk = new int[row, column];
                Buffer.BlockCopy(array, byteLength * i, chunk, 0, byteLength);

                chunkList.Add(chunk);
            }

            return chunkList;
        }

希望这可以帮助 !如果发现合适,请不要忘记将其标记为答案。

另一答案

首先,封装是你的朋友。不要在游戏代码中直接使用多维数组,使用类。地图类可以让您在地图周围编写游戏代码,而无需考虑存储块的内部细节。使用块的类可以让您轻松处理块。

然后,您可以为您的块分配ID。将块存储在Dictionary中,其中ID是关键。映射应存储块ID。当您的地图被询问某个位置(x0,y0)的某个区块时,您可以计算该区块所属的区块,找到该区块的ID,从您的区块字典中获取该区块并询问该区块。

以上是关于c#如何将2D数组拆分为较小的2D数组(块)列表?的主要内容,如果未能解决你的问题,请参考以下文章

将列表拆分为较小的列表(分成两半)

python – 将列表拆分为较小的列表

如何将列表拆分为较小的列表?

尝试将列表拆分为较小的列表时出错

如何将 mysqldump 的输出拆分为较小的文件?

使用 PHP 将大型 KML 文件拆分为较小的文件