我需要一个alogrithm旋转块在俄罗斯方块,我已经尝试过看堆栈溢出,但所有的解决方案需要一些轴心点和什么不,我不知道如何找到,所以我想知道是否有人可以帮助我
我已经试过了从Tetris Piece Rotation Algorithm到
网格系统是:
x 1 2 3 4 5 6 7 8 9 10
y
10
9
8
7
6
5
4
3
2
1
阻止列表如下所示:
block = [[3, 5], [4, 5], [5, 5], [6, 5]]
其中[x,y]
我基本上只想俄罗斯方块旋转,像这样:https://tetris.fandom.com/wiki/SRS
我发现,要旋转网格中任何大小的工件,只需要两个图形操作。你知道吗
如果要按时钟方向旋转工件,首先反转组成工件的每个块的坐标。这意味着交换每个块的x和y坐标。你知道吗
在代码中,它可能看起来像这样
然后,在Y轴上镜像新操作的工件。这可以通过获取每个块的x坐标并将其设置为整个块的宽度(x坐标)来实现。你知道吗
代码可以如下所示:
其中
int pieceWidth = piece[RightEdge].X - piece[leftEdge].X;
如果你有困难找到左右边缘的一块,这应该工作良好
其中LEFT=0,RIGHT=1,UP=2,DOWN=3
在这种情况下,edges数组存储工件4条边上的每个块的ID。只需要右边缘和左边缘就可以找到宽度,但是在其他点上知道其他边缘可能很有用。你知道吗
在本例中,前面提到的分段宽度公式实际上如下所示:
如果你想逆时针旋转,只要做相反的。这意味着您首先在y轴上镜像工件,然后反转其坐标。你知道吗
我已经为这些图形化的翻译制定了一个小小的视觉表达:
Picture
在上图中,红色部分表示原始工件,蓝色过渡显示反转后的工件,绿色部分显示y轴上镜像后的上一个工件。你知道吗
上面的例子是顺时针旋转,而下面的例子是逆时针旋转。你知道吗
相关问题 更多 >
编程相关推荐