阵列形状旋转的组合

时间:2015-11-16 15:59:30

标签: c# arrays

我想创建一个元素(形状)的数组表示(例如在俄罗斯方块中)

为简单起见,我们假设此元素的长度始终为4。

所以在数组中可能有

[0][1][1][1]
[0][0][0][1]
[0][0][0][0]
[0][0][0][0]

如何计算此阵列的所有可能旋转? 我想创建一些东西,我可以“绘制”这些形状,并确定它是否有效(因此需要检查数组中的预定义元素,以及它的每个可能的旋转)

修改

感谢TheLethalCoder的链接 How do you rotate a two dimensional array?

我不仅需要旋转(虽然这已经是一些很好的帮助),而且还需要阵列中的每个可能位置。

更多我计划的方法:

背景将包含更大的数组(也是2D)

当我点击背景时,将其设置为初始点。此时,所有形状都将与输入匹配。 (因为所有要点都有一点)

当用户进入下一个点(左,右,从原点向上)时,我想重新计算哪些形状仍与输入匹配(因此任何定位和旋转)

1 个答案:

答案 0 :(得分:1)

基本上我建议做的是将形状放在阵列上,同时将它们设置在列表中供以后使用。此列表将属于Shape类,其中包含以下声明:

public class Shape
{
    public int[,] ShapeArray { get; set; }

    public int[,] Position { get; set; }
}

ShapeArray的示例,从您的问题中选择一个如下:

[1][1][1]
[0][0][1]

如果它更简单,Position可以简化为UpperLeftXIndexUpperLeftYIndexWidthHeight或基本上System.Drawing.Rectangle }。

然后,当检查用户对形状的输入时,只需与实际列表中的每个形状进行比较。如果有任何匹配你有自己的位置,你喜欢什么。

这种方法还通过仅需要匹配旋转而不是旋转和位置来简化匹配算法。有关旋转2D阵列的信息可以在How do you rotate a two dimensional array?

找到