没有数组的俄罗斯方块旋转
Tetris Rotation without arrays
我正在写一个俄罗斯方块克隆,它几乎完成了,除了碰撞。例如,为了移动 Z 块,我使用一种方法:
void PieceZ::movePieceDown()
{
drawBlock (x1,y1++);
drawBlock (x2,y2++);
drawBlock (x3,y3++);
drawBlock (x4,y4++);
}
为了旋转棋子,我使用二传手(因为坐标是私有的)。对于旋转,我使用 90 度顺时针旋转矩阵。例如,如果我想移动 (x1,y1) 并且 (x2, y2) 是我的原点,以获得新块的 x 和 y:
newX = (y1-y2) + x2;
newY = (x2-x1) + y2 + 1;
这在某种程度上是有效的,它开始于:
0 0 0 0
0 1 1 0
0 0 1 1
0 0 0 0
然后按计划旋转到:
0 0 0 1
0 0 1 1
0 0 1 0
0 0 0 0
然后它旋转到 S 件:
0 0 0 0
0 0 1 1
0 1 1 0
0 0 0 0
然后它只是在第二阶段和第三阶段之间交替。
我的计算是错误的,但我无法弄清楚在哪里,我只需要一点提示。
好的,
这是它应该如何进行(有点):
- 确定要旋转工件的位置(可以是上角或下角或中心),并将其称为
origin
- 计算新的 x
newX = y - origin.y;
- 计算新的 y
newY = -x + origin.x;
这应该有效(我从维基百科和旋转矩阵中得到了这个想法:https://en.wikipedia.org/wiki/Transformation_matrix)
相关文章:
- 与互斥锁相比,旋转锁可以保证上下文切换
- 绘制旋转的三角形
- 旋转模型矩阵时的形状失真
- 四边形的 2D 旋转
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- 发布旋转矩阵(openGL/glm)
- 顺时针迭代旋转 3 位数字
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 子轴围绕父轴而不是他自己的轴旋转
- 将使用太多的纹理插值器 - 带旋转的着色器
- SFML 向下移动时如何围绕屏幕中心旋转?
- 如何在OpenGL中正确旋转和缩放对象?
- 使用 C++在 OpenGL 中移动自动旋转的 3D 多边形
- 按时间自动旋转形状,同时在 OpenGL 中使用C++移动它们
- 如何使用增强::几何计算多边形的旋转固体体积?
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 没有数组的俄罗斯方块旋转
- 在运行时旋转俄罗斯方块