我正在构建俄罗斯方块,并试图思考我应该如何旋转棋子。
它们是在一个块上旋转吗?或者他们应该变形..。又名互换头寸?

我想做这件事的方式是某种硬编码...like (伪代码):
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个可能的旋转)
其次)从那里...将其设置为基于该块的新硬编码坐标
每一块我都得这么做……这似乎是错误的思考方式。
还有其他想法吗?
发布于 2013-04-03 22:56:56
对于每个PieceType对象,我可能有1-4个Orientation对象。然后,每个方向将定义实际块的位置(相对于某个轴心)。例如
PieceType "L":
Orientation 1:
#
#
##
Orientation 2:
###
#
Orientation 3:
##
#
#
Orientation 4:
#
###
PieceType "I":
Orientation 1:
#
#
#
#
Orientation 2:
####每个PieceType还可以保存有关每次可能的“方向改变”(即旋转)所需空间的信息。这些都是静态信息,所以在游戏中真的不需要移动方块。只需改变块的方向,让Orientation对象告诉你块的位置。
发布于 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]。这有帮助吗?
发布于 2013-04-03 22:45:39
您有两个选项(取决于存储形状的方式):
在第一个版本中,你必须计算运行时间,找到形状的中心,等等。
在第二个版本中,你必须进行预先计算,并对形状进行硬编码。
我认为第二种方法更好,因为你有固定数量的部件和固定数量的阶段。但这取决于你。
https://stackoverflow.com/questions/15790214
复制相似问题