0

我现在正在用 Qt C++ 编写俄罗斯方块。游戏快完成了,我唯一需要添加的是轮换。现在我正在努力解决的是旋转背后的理论。俄罗斯方块有 7 种不同的石头(I、S、Z、L、J、T、O)。不同形状的旋转是否有任何算法或类似的东西?

我不想做的是有一个用于 7 种不同形状的开关盒来处理旋转。此外,如果像 L 这样的形状被旋转,它有 4 个不同的位置,必须以不同的方式处理。

所以我唯一想到的就是询问形状,然后询问位置。这将授予我一些开关,否则如果在开关中...意味着要键入很多内容并检查编译器。

PS我的石头结构看起来像这样:(Steine =德国石头,艺术=形状)

struct position
{
    int X;
    int Y;
};   

struct Steine
{
    struct position* Position;
    int Art;
};
4

1 回答 1

1

您可以为每个形状使用布尔表示的二维数组。然后当你旋转一些特定的数组时,你旋转那个形状(也许初始化时的代码会生成所有的旋转)并检查是否有任何像素在俄罗斯方块边界之外,或者旋转的形状是否不应该旋转,因为它的一些像素会与先前形状中的一些已经存在的像素位于同一位置。

编辑:是的,就像你自己说的那样,最好是尝试在纸上/油漆上检查一下(关于旋转的中间点)。对于每种形状,您最终都会得到 3x3 或 4x4。对于 3x3,您围绕它的中点旋转,例如,对于 4x4,围绕 1x1(索引从 0 到 3)。这就是我 9 年前左右玩俄罗斯方块的方式。

于 2015-03-22T12:53:31.317 回答