随机生成3x3x3“块”大结构

时间:2011-10-03 18:31:14

标签: c# random 3d

我正在制作我的第一个3D游戏,但我陷入了一个部分。我从来没有对algortihms甚至数学都很好,所以我很难有这个:(

无论如何,我想生成3x3x3(当然,如果算法在任何大小上都会很棒!)“结构”或者它应该调用的任何东西。 1个单位是一个块/立方体。我不希望它充满块,但是随机生成形状,因此某些部分会有块而有些部分会是空的。所有的块应该连接到至少一个其他块(不是对角线,而是“直线”)。

我希望你明白我的目标:)

如果它有帮助的话,我很快就用油漆做了一张小照片。但是我希望它更加空洞,如果上半部分比下半部分更加空洞,那就更好了。

enter image description here

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

作为@FlyOn评论的延伸,我建议你将问题视为一个规则系统。编写/绘制规则。问自己这样的问题:

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

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

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

    < / LI>
  • 如果您处于位置(0,0,0),并且所选的随机相邻块是(0,0,-1),那么确定是否需要的测试是什么有效?

编写逻辑并编写一些单元测试样式的方法,用测试调用逻辑方法。当您使用不同的输入测试它们时,看看它们是否按预期工作。

3空间的逻辑谜题非常有趣:)

答案 2 :(得分:0)

您可以实施的示例算法:
  - 在3x3x3中选择一个随机位置   - 从可能的直接选项中选择一个随机方向(删除将带您进入立方体的选项)   - 转到那个位置(所以在你的3x3x3阵列中将它设置为'1'或类似的东西)
  - 重新开始
可选:
*还删除您已经被选中的选项 *首先为你想要填充的斑点数量生成一个随机数,然后在你有这么多的时候停止算法 *允许所有方向,只需进入立方体的“另一侧”(这可能导致零件不与其他零件连接)