旋转的动画还有一种优化方案,把所有要旋转的方块当一个整体,绕某个轴旋转,这样只需要更新下每个方块的世界矩阵即可,具体代码如下
这个类主要封装了俄罗斯方块中的**小方块,提供了各种函数来操作方块,比如move移动方块、clear清除方块、draw绘制方块等等。但其中的重点是方块碰撞的判断和旋转方块的算法:方块碰撞的判断可以先移动方块,接着遍历方块在地图上每一个块的位置,如果这里有块,就说明发生碰撞了;而旋转方块的算法,因为除了长条占四格以外,其它方块只占三格,所以我们采用最简单的方法,只旋转三格以内的块,具体做法是中心块不变,分别旋转十字中心和四个角,长条方块另外处理。这样简单的实现方法“小学生”也能看懂,于是就实现了Block类。
对于每一个下落的方块,将其旋转平移然后下落,然后计算整体方块的得分,选取整体得分最少的位置落下该方块,然后循环往复。
用python语言编写。设计不同形状的方块。方块可以通过上下左右键来实现旋转、下落、左移、右移。方块可以通过按“F”键直接快速下落到游戏框底部。当方块铺满一行时可以自动消除并加上相应的分数方块下端接触到游戏框下边框或方块时方块停止移动,方块上端接触到游戏框的上边框时结束游戏。游戏可以同时通过键盘和鼠标来操作。游戏可以通过按“S”键开始游戏,“P”键暂停和继续游戏,“R”键重新开始这个游戏。开始游戏和暂停游戏时界面会出现下一步所需操作的相应提示游戏界面具有游戏区、游戏操作说明区、下一方块区和分数区。
拾取的魔方中的一个方块的其中一个面,那么旋转只存在两种情况,一种是横着旋转,一种是竖着旋转。如果是垂直于x轴的面的话,那么只存在绕着y轴或者绕着z轴两种情况。