我通过旋转公式旋转每一件。更多细节,因为旋转角度为90,所以:
xNew = y;
yNew = -x;
但我的方法遇到了两个问题:
1)开箱即用:每种类型的棋子都适合4x4方形。 (在左下方0,0)但是通过这种旋转,在某些情况下,它们将不在此框中。例如,有一个带坐标的点(5,6)所以,请帮助我再次将这些坐标放入4x4框中,或者给我另一个公式。
2)在我的情况下:(同一行或同一列的4个方格),只有两个旋转的情况。但在上面的方法中,他们仍然有4件。那么,如何防止这种情况。
谢谢:)
答案 0 :(得分:3)
俄罗斯方块板是一种网格布局。一种非常简单的理解方式是,俄罗斯方块片段只是一组被填充的方块。在布尔意义上,一件作品可以被视为0
,或未填充,或1
。使用网格(或基于图块)方法可以防止您的区块超出范围,并且当您达到底部碰撞时,作为额外的奖励还可以简化碰撞代码。
伪码:您可以检查if (!grid[x][y]) block.move(direction)
其中grid[x][y]
是您要移入的空间,block.move(direction)
是一个可调整的任意函数你的作品并按指定的方向按一个网格空间进行地图绘制。从这个意义上说,你的游戏循环还可以使用block.move('down')
逐步删除该部分,并为下一部分else block.stop(), game.generateBlock()
。
使用网格方法,您可以轻松检查您的旋转部分是否超出if(x < 0 || x > gridWidth) block.move(direction)
范围,其中direction
的方向与其移动的方向相反外的边界。
继续基于网格的示例,你的作品实际上只是一个开/关模式,它们的旋转显示如下:
▇ ▇ ▇ ▇ ▇ ▇ ▇
▇ or ▇ ▇ ▇ or ▇ or ▇
▇ ▇ ▇
这个基本艺术作品所说明的是,由于通常是矩形的碎片,碎片不会围绕中心点旋转。然而,模式可以很容易地以布尔状态存储,并且您可以只跟踪哪个位置&#39;无论方向如何,它都在并编写代码来测试它。
由于每个部分都有有限数量的模式,因此它可以是(最多4个),并且简单地对它们进行硬编码可能符合您的最佳利益。这个答案提供了一些令您鼓舞的代码:{{3} }
如果您有机会进入3D游戏编程,我强烈建议您使用这些简单的变量进行研究和学习一点线性代数。由于每个部分都可以存储为矩阵,因此您可以将简单的变换应用于基础矩阵&#39;获得新模式。这可以很容易地伪造,或者你可以全力以赴。我强烈建议用这些简单的变量进行研究和学习一点线性代数,如果你有机会进入3D游戏编程的话。对于算法,请查看此问题:https://stackoverflow.com/a/8131337/571506
俄罗斯方块是一款记录极为明确的游戏,可以为您的工具箱添加许多技能。尝试尽可能多地使用提供的范例来计算,同时手动执行大部分编程,从长远来看,您会发现它很有用。
答案 1 :(得分:0)
我不明白问题2,但对于问题1,你需要做的不仅仅是旋转,你还必须在左/右/上/下移动它。