2010-04-20 115 views
0

对于大学我们应该写一个游戏(语言是modula2你知道它的一点小机会)。 每个tetromino通过一个中心部分和3个相关部分定义, 现在谈到旋转我只是旋转相关块(线性代数)。俄罗斯方块轮换

我自问自己是如何处理旋转时,用户做了这件作品已经“降落”,因为比用户有一点时间留下他的快速移动到所需的位置,但在全俄罗斯方块版本网页可以“旋转”其他部分,但我似乎没有得到它与我的轮换。

我需要旋转什么?有准则吗? 谢谢

+4

我不知道Modula-2,但我不认为需要线性代数来旋转俄罗斯方块。 – kennytm 2010-04-20 17:33:27

+0

我会争辩说其他版本已经损坏。在'真实'俄罗斯方块中,一旦棋子落地,你就没有最后一秒的旋转。 – meagar 2010-04-20 17:35:39

+0

@Kenny:虽然可能是这个特定项目的要求。 – Pops 2010-04-20 17:35:56

回答

3

如果我正确理解你的问题,没有正确的答案。是否可以“移动”其他部分取决于您特定作业的指导原则;可以编写允许它的代码和不允许的代码。

9

Tetris Wiki指定了一个办法,这些所谓的wall kicks完成:

当球员时在广场那里是四格拼板通常会在旋转后占据不存在空间旋转一块墙壁踹发生。为了弥补,游戏为tetromino设置了一定数量的替代空间。 [...] 最简单的墙球算法是尝试将tetromino向右移动一个空格,然后向左移动一个空格,如果两个都不能完成,则失败

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

+0

+1分享存在俄罗斯方块维基。 – Cheeso 2010-04-20 17:49:27

0

考虑到现场的俄罗斯方块件下降是一个矩阵

1)如果你想给一点时间,为用户旋转它,用你的算法

  • 组启动时定时器您的最低块位于与同一列已具有块的行相邻的行上。
  • 如果用户在计时器结束之前尝试移动该部件,请检查一行和一列上是否有可能成为可移动部件的一个块的位置的块。如果已经填写如果你想给一点时间,为用户使用其它算法

    • 旋转它,你可以考虑你的块作为你不能移动它

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

0

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

如果这确实是你的问题,答案是它是实现定义的。如果你尝试了不同的游戏版本,你可能会发现在某些情况下,当你通过两次旋转(旋转瓦片固定在tetromino上)时,“I”片段会左右摆动或上下摆动,其他人则不会(旋转在两个中心瓦片之间切换,使得CW旋转将具有与CCW旋转相同的效果)。 “S”和“Z”片段将类似摆动或不摆动。但是,如果它们不摆动,则可能会发现一块在靠近左侧墙壁时可以旋转,但即使情况应该是对称的,也不会在靠近右侧的情况下旋转。如果您将方块放在一个固定的旋转块中,它将围绕一个角落旋转,当您很可能希望它看起来完全不旋转时。我从来没有见过一个至少没有照顾到的实现!