Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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# 生成3x3x3“;块;随机大结构_C#_Random_3d - Fatal编程技术网

C# 生成3x3x3“;块;随机大结构

C# 生成3x3x3“;块;随机大结构,c#,random,3d,C#,Random,3d,我正在制作我的第一个3D游戏,但我只专注于其中一个部分。我从来都不擅长算法,甚至数学,所以我在这方面有点困难:( 无论如何,我想生成3x3x3(当然,如果算法在任何大小上都适用,那就太好了!)“结构”或者不管它叫什么。1个单元是一个块/立方体。我不希望它充满块,而是随机生成形状,这样一些部分会有块,一些部分会是空的。所有的块都应该至少连接到另一个块(不是对角的,而是“直的”) 我希望你明白我的意思:) 如果有帮助的话,我很快用颜料画了一幅小画。然而,我希望它是一个很多空,这将是伟大的,如果上半部

我正在制作我的第一个3D游戏,但我只专注于其中一个部分。我从来都不擅长算法,甚至数学,所以我在这方面有点困难:(

无论如何,我想生成3x3x3(当然,如果算法在任何大小上都适用,那就太好了!)“结构”或者不管它叫什么。1个单元是一个块/立方体。我不希望它充满块,而是随机生成形状,这样一些部分会有块,一些部分会是空的。所有的块都应该至少连接到另一个块(不是对角的,而是“直的”)

我希望你明白我的意思:)

如果有帮助的话,我很快用颜料画了一幅小画。然而,我希望它是一个很多空,这将是伟大的,如果上半部分将更频繁地比下半部分空


为什么不创建几个结构,然后使用随机数确定其中一个呢。如果你制作了7个不同的,用户/玩家几乎不会注意到任何形式的重复。
顺便说一句:如果忽略所有旋转对称的结构,就不会有那么多不同的结构符合您的标准。

您可以实现的示例算法:
-在3x3x3中选择一个随机位置
-从可能的直线选项中选择一个随机方向(删除那些会将您带出立方体的选项,)
-转到该位置(因此在3x3x3数组或类似的位置中将其设置为“1”)
-重新开始

可选:
*同时删除您已经访问过的选项
*首先为要填充的点的数量生成一个随机数,然后在有那么多点时停止算法。

*允许所有方向,只需输入多维数据集的“另一侧”(这可能会导致部分未连接到其他部分)

作为@FlyOn评论的扩展,我建议您将该问题视为一个规则系统。写/画出规则。问自己这样的问题:

  • 生成相邻位置时,到达该位置的有效3空间移动是什么

    (实体中的每个坐标块有6个面相邻坐标块、8个点相邻坐标块和12个边相邻坐标块。6+8+12+1=27=3^3)

  • 如何将随机生成限制为仅生成面相邻坐标,以便在随机生成后不必应用该规则

  • 如果您处于位置(0,0,0),并且随机选择的相邻块为(0,0,-1),则需要进行哪些测试来确定其是否有效

编写逻辑并编写一些单元测试风格的方法,用测试调用逻辑方法。当您使用不同的输入测试它们时,看看它们是否如您所期望的那样工作


3-space中的逻辑谜题非常有趣:)

您的帖子没有图像。Oded:我已经尝试手动制作,但代码中充满了if语句和随机的.Next()调用。我想不出通过循环或更干净的方法来实现这一点。你们真的应该发布你们的代码,并解释你们哪里有问题。你的评论只会让事情变得更加混乱。@Jaakko Lipsanen-我建议你着手编写代码,这样任何懂这门语言的人都能理解正在发生的事情。如果目前不是这样,那么这就是你应该做的,这样你就可以得到帮助。