【问题标题】:tetris rotation俄罗斯方块旋转
【发布时间】:2010-04-20 17:27:35
【问题描述】:

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

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

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

【问题讨论】:

  • 我不知道 Modula-2,但我认为“旋转”俄罗斯方块不需要线性代数。
  • 我认为其他版本已损坏。在“真正的”俄罗斯方块中,一旦棋子落地,您就没有最后一秒的时间来旋转。
  • @Kenny:不过可能是这个特定项目的要求。
  • @meagar,实际上,在许多版本的俄罗斯方块中,在“锁定”之前有一段时间,您仍然可以旋转和移动技术上位于堆顶部的一块。事实上,在最新版本的官方俄罗斯方块游戏中,您可以在棋子落地后无限期旋转棋子以使其保持活力。
  • 为什么“你知道它的机会很小”? Modula-2 曾经相当流行/使用良好。 30 岁以上的人(而且 30 岁以上的程序员比 30 岁以下的程序员多 :-))很有可能在某个时候碰到过它......

标签: rotation tetris modula-2


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-17
          • 1970-01-01
          相关资源
          最近更新 更多