我正在编写一个俄罗斯方块的克隆程序,在我的游戏中,我将我的tetromino块存储为4x4的块数组。我现在需要能够旋转数组中的整数位置,这样我就可以得到一个旋转的俄罗斯方块。我不能简单地旋转纹理,因为我所有的碰撞检测等都是为了处理2D阵列而设计的。这个游戏是使用XNA用C#编写的。
我怎么可能将我的二维int数组顺时针/逆时针旋转90度呢?
下面是我的'L‘代码块的存储方式。
0 1 0 0
0 1 0 0
0 1 1 0
0 0 0 0
谢谢你的帮助。
发布于 2009-03-14 18:51:27
如果它们是二维数组,则可以通过使用不同的数组访问顺序进行复制来实现旋转。
例如,对于顺时针旋转,请尝试:
int [,] newArray = new int[4,4];
for (int i=3;i>=0;--i)
{
for (int j=0;j<4;++j)
{
newArray[j,3-i] = array[i,j];
}
}
逆时针方向是相似的。
发布于 2009-03-14 18:55:42
不要使用代码来旋转这些片段。只需存储不同块方向的数组,并在旋转块时循环它们。没有必要在俄罗斯方块游戏中动态旋转它们。
由于问题域是俄罗斯方块,您会发现旋转算法会导致不期望的效果,例如,长而细的四边形不能在两个位置之间交替(就像在真实情况下一样)。
发布于 2009-03-14 18:54:22
在经典的俄罗斯方块中,物体的排列很少。我只需要在4个位置中的每个位置为每个"tetromino“创建一个常量数组,并使用简单的逻辑根据输入选择合适的一个。
为什么要浪费CPU周期来轮换它呢?
https://stackoverflow.com/questions/646468
复制相似问题