0

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

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

我需要旋转哪一块?有指导方针吗?谢谢

4

4 回答 4

9

俄罗斯方块 Wiki指定了这些所谓的墙踢的一种方式:

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

还有其他方式,例如俄罗斯方块指南规定的超级旋转系统指定的方式。该系统使用一组表格来确定可能的墙踢。

于 2010-04-20T17:44:30.573 回答
3

如果我正确理解您的问题,则没有正确答案。您是否可以“通过”其他部分取决于您的特定任务的指导方针;可以编写允许它的代码和不允许它的代码。

于 2010-04-20T17:34:27.007 回答
0

考虑到俄罗斯方块下落的那个领域是一个矩阵

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

  • 设置一个计时器,当您的最低块位于与同一列已经有一块的行相邻的行上时开始。
  • 如果用户试图在计时器结束之前移动该块,请检查行和列上是否有块可能是可移动块的块之一。如果它已经被填满,你不能移动它

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

  • 您可以将您的块视为 3x3 立方体并通过 2x2 块旋转它,即使该块不存在(例如在具有 L 格式的块上)。所以你只需要按照我在(1)的第二个按钮上说的做,应该没问题!恕我直言,这是一个更简单的算法。
于 2010-04-20T17:46:41.833 回答
0

首先,您可能想澄清问题中的术语。在第一段中,“一块”似乎是其他人可能称之为“瓷砖”的东西;即,每个四联牌由四个“片”或“牌”组成。但是在段落的末尾,您将其称为“块”。然后,在第二段中,“piece”似乎是“tetromino”的同义词:“the piece has landed”、“move his piece”。所以在你的问题中,你是什么意思?也许“四联牌应该围绕哪个瓷砖旋转?”

如果这确实是您的问题,那么答案是它是由实现定义的。如果您尝试不同版本的游戏,您可能会看到,在某些情况下,“I”块会在您进行两次旋转时左右或上下摆动(旋转图块固定在 tetromino 上),并且在其他则不会(旋转在两个中心图块之间切换,因此 CW 旋转将具有与 CCW 旋转相同的效果)。“S”和“Z”块同样会摆动或不摆动。但是,如果它们不摆动,您可能会发现,当它靠在左边墙上时,它可以旋转,但如果靠在右边,则不能旋转,即使情况应该是对称的。还有方形的,如果你留下一个固定的旋转瓷砖,当您很可能希望它(看起来)根本不旋转时,它将围绕一个角落旋转。我从来没有见过至少不能解决这个问题的实现!

于 2010-04-21T01:40:16.787 回答