首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Tetris -关于棋子旋转的思考

Java Tetris -关于棋子旋转的思考
EN

Stack Overflow用户
提问于 2013-04-03 22:29:45
回答 6查看 3.9K关注 0票数 10

我正在构建俄罗斯方块,并试图思考我应该如何旋转棋子。

它们是在一个块上旋转吗?或者他们应该变形..。又名互换头寸?

我想做这件事的方式是某种硬编码...like (伪代码):

代码语言:javascript
复制
if (rotateRight()) {

    if (Piece == "T") {
        if (Piece.getCurrRotation() == down (aka.. 180 degrees))
          move each Tile in Piece from the down rotation to the left rotation... each coordinate would be pre-specified for a given condition... aka lot's of hardcoding
     }
    if (Piece == "L") { etc...

     }
}
if (rotateLeft()) {
     perform same checks for the Left...
}

但这似乎是大量的代码,仅仅是为了找出

首先)当前块处于哪个旋转(每个块有4个可能的旋转)

其次)从那里...将其设置为基于该块的新硬编码坐标

每一块我都得这么做……这似乎是错误的思考方式。

还有其他想法吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-04-03 22:56:56

对于每个PieceType对象,我可能有1-4个Orientation对象。然后,每个方向将定义实际块的位置(相对于某个轴心)。例如

代码语言:javascript
复制
PieceType "L":

    Orientation 1:
    #
    #
    ##

    Orientation 2:
    ###
    #

    Orientation 3:
    ##
     #
     #

    Orientation 4:
      #
    ###

PieceType "I":

    Orientation 1:
    #
    #
    #
    #

    Orientation 2:
    ####

每个PieceType还可以保存有关每次可能的“方向改变”(即旋转)所需空间的信息。这些都是静态信息,所以在游戏中真的不需要移动方块。只需改变块的方向,让Orientation对象告诉你块的位置。

票数 1
EN

Stack Overflow用户

发布于 2013-04-03 22:36:39

如果您将这些片段存储为矩阵,则可以使用通用函数旋转该矩阵。假设您想将[1,1,1, 0,0,0,0,0,0,0,0]旋转90度到左-> [ 1,0,1,0,0,1,0,0]。这有帮助吗?

票数 1
EN

Stack Overflow用户

发布于 2013-04-03 22:45:39

您有两个选项(取决于存储形状的方式):

  • 通过重新定位形状块来执行旋转运行时(将形状点保留在矩阵中,并围绕中心旋转)。
  • Store 4(对于旋转不变的形状,为2甚至1)阶段,并且仅增加/减少形状所处的阶段。

在第一个版本中,你必须计算运行时间,找到形状的中心,等等。

在第二个版本中,你必须进行预先计算,并对形状进行硬编码。

我认为第二种方法更好,因为你有固定数量的部件和固定数量的阶段。但这取决于你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15790214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档