俄罗斯方块旋转C ++

时间:2015-03-22 12:40:50

标签: c++ qt tetris

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

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

所以我唯一想到的就是要求形状,然后是位置。这会给我一些开关,或者如果在一个开关中... ...意味着很多要输入和检查编译器很多。

P.S。我的Stone结构看起来像这样:( Steine =德语为石头,Art =形状)

struct position
{
    int X;
    int Y;
};   

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

1 个答案:

答案 0 :(得分:1)

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

编辑:是的,就像你自己说的那样,最好是尝试用纸/油漆来检查它(关于旋转的中间点)。对于每种形状,您最终得到3x3或4x4。对于3x3,你围绕它的中间点旋转,例如4x4左右,1x1左右(索引从0变为3)。这有点像我9年前左右的Tetris。