首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何旋转整数的二维数组

如何旋转整数的二维数组
EN

Stack Overflow用户
提问于 2009-03-14 18:45:45
回答 7查看 17.5K关注 0票数 17

我正在编写一个俄罗斯方块的克隆程序,在我的游戏中,我将我的tetromino块存储为4x4的块数组。我现在需要能够旋转数组中的整数位置,这样我就可以得到一个旋转的俄罗斯方块。我不能简单地旋转纹理,因为我所有的碰撞检测等都是为了处理2D阵列而设计的。这个游戏是使用XNA用C#编写的。

我怎么可能将我的二维int数组顺时针/逆时针旋转90度呢?

下面是我的'L‘代码块的存储方式。

代码语言:javascript
复制
0 1 0 0
0 1 0 0
0 1 1 0 
0 0 0 0

谢谢你的帮助。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-03-14 18:51:27

如果它们是二维数组,则可以通过使用不同的数组访问顺序进行复制来实现旋转。

例如,对于顺时针旋转,请尝试:

代码语言:javascript
复制
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];
    }
}

逆时针方向是相似的。

票数 29
EN

Stack Overflow用户

发布于 2009-03-14 18:55:42

不要使用代码来旋转这些片段。只需存储不同块方向的数组,并在旋转块时循环它们。没有必要在俄罗斯方块游戏中动态旋转它们。

由于问题域是俄罗斯方块,您会发现旋转算法会导致不期望的效果,例如,长而细的四边形不能在两个位置之间交替(就像在真实情况下一样)。

票数 11
EN

Stack Overflow用户

发布于 2009-03-14 18:54:22

在经典的俄罗斯方块中,物体的排列很少。我只需要在4个位置中的每个位置为每个"tetromino“创建一个常量数组,并使用简单的逻辑根据输入选择合适的一个。

为什么要浪费CPU周期来轮换它呢?

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/646468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档