俄罗斯方块旋转

时间:2010-04-20 17:27:36

标签: rotation tetris modula-2

对于大学,我们应该写一个游戏(语言是模块2,你知道的机会很少)。 每个tetromino都是通过一个中心部分和3个相对部分来定义的, 现在谈到旋转时,我只需旋转相对块(线性代数)。

我问自己是如何处理用户在已经“落地”时所做的旋转,因为用户还有一点时间将他的馅饼快速移动到所需位置但是在整个俄罗斯方块版本中网络你可以“旋转”其他部分,但我似乎没有得到我的轮换。

我需要旋转什么?有指导方针吗? 感谢

4 个答案:

答案 0 :(得分:9)

Tetris Wiki指定了这些所谓的wall kicks完成的一种方式:

  

当一个玩家旋转一个棋子时,如果在旋转之后该tetromino通常占据的方格中没有空间,则会发生墙踢。为了补偿,游戏为tetromino设置了一定数量的替代空间。   [...]   最简单的墙踢法算法是尝试将tetromino一个空间向右移动,然后向左移动一个空格,如果两者都不能完成则失败

还有其他方法,例如由Super Rotation System强制执行的Tetris Guideline指定的方式。该系统使用a set of tables来确定可能的墙踢。

答案 1 :(得分:3)

如果我理解你的问题,那就没有正确的答案。您是否可以“浏览”其他部分取决于您的特定任务的准则;可以编写允许它的代码和不代码的代码。

答案 2 :(得分:0)

考虑到俄罗斯方块片落下的那个字段是一个矩阵

1)如果你想给用户一点时间来旋转它并使用你的算法

  • 设置一个计时器,当您的最低区块位于与同一列已有一条线的一条线相邻的一条线上时开始计时。
  • 如果用户在计时器结束之前尝试移动该部件,请检查线和列上是否有块可能是可移动块的其中一个块的位置。如果它已经填满你就无法移动它

2)如果你想给用户一点时间来旋转它并使用其他算法

  • 您可以将您的块视为3x3立方体并通过2x2块旋转它,即使该块上不存在(例如在具有L格式的片段上)。所以你只需要在(1)的第二个按钮上做我所说的,它应该没问题!这是一个更容易的算法恕我直言。

答案 3 :(得分:0)

首先,您可能想澄清问题中的条款。在第一段中,似乎“一块”是别人可能称之为“瓷砖”的东西;即,每个tetromino由四个“块”或“块”组成。但是在段落的末尾你称它为“块”。然后,在第二段中,似乎“片断”与“tetromino”同义:“这件作品已落地”,“移动他的作品”。所以在你的问题中,你的意思是什么?也许“tetromino应该围绕哪个瓷砖旋转?”

如果这确实是你的问题,答案是它是实现定义的。如果您尝试不同版本的游戏,您可能会看到,在某些情况下,“I”部分会在您通过两次旋转(旋转磁贴固定在tetromino上)时左右或上下摆动,并且其他它不会(旋转在两个中心瓦片之间切换,使得CW旋转将具有与CCW旋转相同的效果)。 “S”和“Z”件将类似地摆动或不摆动。但是,如果它们没有摆动,你可能会发现,当它靠在左墙上时,它就能旋转,但如果它是在右边,则不会旋转,即使情况应该是对称的。如果你用一个固定的旋转瓷砖留下它,那么正方形块会围绕一个角旋转,而你很可能希望它(看起来)根本不旋转。我从来没有见过一个至少没有处理过的实现!