Multidimensional array 在“环顾”此2D阵列时,如何适当避免范围错误?

Multidimensional array 在“环顾”此2D阵列时,如何适当避免范围错误?,multidimensional-array,dart,Multidimensional Array,Dart,我有一个2D数组结构来表示一个格子,这是我正在制作的游戏的一部分。游戏的一个方面是,基于对文本文件的分析,网格以某种随机方式填充。但从一开始,我就意识到,仅仅让它像这样随机进行,而不坚持某种有效性检查或预防机制,以阻止真正配置糟糕的网格形成,是行不通的。我想避免的主要问题是,太多的分片靠得太近而无法移动,这可能会将网格的大块部分与其余部分断开。 为了避免出现一些非常糟糕的网格,我提出的想法是,在生成过程中,使用类似这样的逻辑为每个网格正方形指定平铺值时进行检查 如果tileBeingInsert

我有一个2D数组结构来表示一个格子,这是我正在制作的游戏的一部分。游戏的一个方面是,基于对文本文件的分析,网格以某种随机方式填充。但从一开始,我就意识到,仅仅让它像这样随机进行,而不坚持某种有效性检查或预防机制,以阻止真正配置糟糕的网格形成,是行不通的。我想避免的主要问题是,太多的分片靠得太近而无法移动,这可能会将网格的大块部分与其余部分断开。 为了避免出现一些非常糟糕的网格,我提出的想法是,在生成过程中,使用类似这样的逻辑为每个网格正方形指定平铺值时进行检查

如果tileBeingInserted.isTraversable{ //一切都很好 返回true; }否则{ //我们可能有问题,附近有太多不可旅游的东西吗? //继续检查当前方块周围的所有方块。 } 明确地说,在当前正方形周围检查意味着在8个基本方向中的每一个方向上检查紧邻的正方形。现在,我的问题是,我正试图找出如何对其进行编码,这样它在任何时候都不会给出RangeError,或者至少在必要时捕获它并进行恢复。例如,您可以明确地将其中一个角方格视为最糟糕的场景,因为算法要检查的方格中只有两个在数组的边界内。当然,如果由于这个原因发生了一个RangeError,我只希望程序能够顺利进行,这样结构就不会出现问题

试一试{ //支票1 //支票2…8 }捕捉范围误差e{ }
是不可接受的,因为一旦测试了单个超出范围的方块,代码就会从检查块中消失。我想到了另一个选择,但因为它的混乱而不喜欢,那就是将每个支票单独包装在一个try-catch中,是的,我想这会起作用,但这是一些看起来很可怕的代码……所以有人能帮我吗?在避免我没有看到的范围错误的问题上,可能有不同的角度吗?

因此,我测试是否应该放置另一个不可移动的磁贴的代码形成如下:

bool\u tileFitsWellint tileTypeInt,int行,int列 { //…初始化一些东西,设置一些东西 ... 如果tile.traversable==true{ //在这种情况下,将放入一个新的可遍历磁贴,因此没有问题。 返回true; }否则{ //开始测试当前磁贴周围的磁贴 //测试NW相邻 如果行>0&&列>0{ 温度=tileAtrow-1,col-1; 如果!临时可遍历{ 删除计数++; } } //测试N相邻 如果行>0{ 温度=tileAtrow-1,col-1; 如果!临时可遍历{ 删除计数++; } } //测试NE相邻 如果行>0&&col<_网格[0]。长度-2{ 温度=tileAtrow-1,第1列; 如果!临时可遍历{ 删除计数++; } } //测试W相邻 如果col>0{ 温度=tileAtrow,列-1; 如果!临时可遍历{ 删除计数++; } } } 返回罢工次数<2; }
为了简单起见,每个初始if语句(检查行和列的语句)中的代码都有点伪代码。正如我在前面的评论中所解释的,我不需要检查其他4个基本方向上的分幅的原因是因为这些检查是在填充地图时完成的,这些位置上的分幅总是未初始化的,或者只是超出范围,取决于在给定时间调用函数检查的磁贴。

我是否正确理解您的问题-您试图避免这8次检查,还是与检查本身有关?他们为什么要扔?我想做检查,因为他们的想法是检查与当前已经初始化的方块相邻的方块是否也是不可移动的地形。例如,在尝试验证左上角的第一个正方形0,0时,检查将抛出if,最后检查类似于grid[-1][0]的内容。那将超出范围。我已经意识到的一件事是,我可能可以轻松地完成一半的工作,因为在插入过程中,4/8邻接总是未初始化或超出范围。不过,这仍然存在一些问题。您还可以检查参数以避免这些范围错误。谢谢。我想这很简单,我只需要把问题说出来一点。也许当我的代码对此进行了充分的推理后,我会用一个简化的或伪代码化的解决方案来回答。从概念上讲,这很简单,但我只需要小心地把细节弄清楚就行了。