java多线程    Java入门    vsftp    ftp    linux配置    centos    FRP教程    HBase    Html5缓存    webp    zabbix    分布式    neo4j图数据库    

俄罗斯方块旋转算法研究

俄罗斯方块旋转算法??俄罗斯方块设计原理??俄罗斯方块java版下载

最近在阅读俄罗斯方块的算法。提到旋转算法。没有向下看了。自己想一想
我自己的想法如下
矩阵旋转算法

A1 A2 A3 A4

B1 B2 B3 B4

C1 C2 C3 C4

D1 D2 D3 D4
旋转以B2 B3 C2 C3 中间的点为旋转轴。
旋转以后矩阵变为
D1?C1?B1?A1

D2?C2?B2?A2?

D3?C3?B3?A3

D4?C4?B4 A4
1,1数据变成了 1,4

问题:旋转以后方块的位置发生重大移动。

原因。这个方块的重心其实是B2.

那么一根长条的重心在哪里
A1 A2 A3 A4

B1 B2 B3 B4

C1 C2 C3 C4

D1 D2 D3 D4

以矩阵为重心,顺时针旋转的话,长条会直接跑到右侧了。

长条我们希望旋转以后变成

A1 A2 A3 A4

B1 B2 B3 B4

C1 C2 C3 C4

D1 D2 D3 D4

可以得出长条的重心也在B2.这是一次旋转,如果再次顺时针旋转。以B2为重心就会发生问题。没有位置存放D2.

A1?A2?A3 A4

B1 B2 ?B3 B4

C1 C2 C3 C4

D1 D2 D3 D4

 

A1 A2 A3 A4

B1 B2 B3 B4

C1 C2 C3 C4

D1 D2 D3 D4

结论:

一个节省时间,提高程序效率的而且比较简单的办法就是把所有希望变化以后的矩阵,都写在一个数组里。

即总体数据为三维数据。每一个矩阵的形态也存在其中。而非人为旋转。

俄罗斯方块的旋转特性,尽量不要用算法控制,因为经过几次旋转就会发生位置偏移。如果每次记录偏移量,也是可以的。直接代码太过复杂,而且容易出错。所以建议写死在数组里。然后旋转就是更换数组的一个维度(旋转维度)


This entry was posted in JAVA, 日常随笔 and tagged , . Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/eluosi-xuanzhuan/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.

Leave a Reply