思考题答案(白色字体):{ 其实只要看a[0]的位置放的是原来a[?]的值就可以矩阵是怎么转的了?嘿嘿,现在你们还看不懂哦,所以写在了这里,坏啊。。。。} 选中查看,不要偷看哦!

本例子是我一年前在大学毕业实习期间做过的一个小游戏中一位年轻的老师讲过的,虽然自己当时也实现了算法,但是比这个算法复杂多了。本来都已经忘记怎么算了,前几天琢磨一下还是记起来了,所以想写写记下来省的以后又忘记了。

由于本人比较懒,画图困难,所以这里去掉长条。这里只演示一下3X3的图形变换的过程,4X4的可以照搬。

正文如下:

采用一个一维数组模拟一个3X3的数字矩阵a[9] = {0};其中很容易通过对下标除3取余得到一个3X3二维排列的矩阵形式如下:

      a[0] a[1] a[2]                0, 0, 0,a[3] a[4] a[5]    ----->>>    0, 0, 0,a[6] a[7] a[8]                0, 0, 0

如果对数组初始化成:

                  a[] = { 0, 1, 1,0, 1, 0,0, 1, 0 };

如果1表示显示颜色(小方块),0则不显示,

那么以上数组表示的就是俄罗斯方块中的(蓝色部分):

如果要把上述图形按照【逆时针】翻转成:

那么对应的数组的值则变成了:

                  a[] = { 1, 0, 0,1, 1, 1,0, 0, 0 };

你会用怎样的同一个方法来实现这样的连续翻转呢?

玩家按一下向上的方向键则变换一次,每按一次则变换一次。

其实这也是上一个数组a[]中相应的值进行一次【逆时针变换】即可,即:

    0, 1, 1            a[0] a[1] a[2]    逆        a[2] a[5] a[8]            1, 0, 00, 1, 0     ==     a[3] a[4] a[5]  ----->>>    a[1] a[4] a[7]     ==     1, 1, 10, 1, 0            a[6] a[7] a[8]              a[0] a[3] a[6]            0, 0, 0

-----------------------------------------------------------------------------------------

所以怎样实现这种变换才是关键问题,这里我们设置一个数组b[]记录逆时

针翻转后数组的下标序列 :

             b[] = { 2, 5, 8,1, 4, 7,0, 3, 6 };

那么我们设置一个新数组,

              int a_2[8] = {0};int i;for ( i = 0; i < 9; i++ ){a_2[i] = a[ b[i] ];             /* @1 */};

这样就得到了一个由a逆时针翻转后的新数组a_2[],然后:

              memcpy( a, a_2, sizeof(a_2) );

则a得到了自己逆时针翻转后的数组了,然后当玩家再按一次向上的方向键的时候再运行一次这个过程即可。

呵呵,写玩了,是不是有读到@1的时候有种从<昏昏欲睡>的感觉到精神为之<一震>的感觉?有木有,有木有啊?木有的

话我会失望的啦,其实我学编程就是超喜欢这种感觉哈~

最后留个思考题:如果把@1处改为:

              a_2[ b[i] ] = a[i]           /* @2 */

会是一样的结果么?懂的留下你的答案吧!最后预祝五一快乐啦~第一个技术贴。。。bingo#



玩过,但你知道么?俄罗斯方块的旋转算法。。。相关推荐

  1. 俄罗斯方块新增行算法:不拘一格编程序之二

    不拘一格编程序之二  俄罗斯方块插入新增随机行算法 作者:朱云翔   [题目]: 一个数组int a[10],要求为每个元素随机赋值0或者1,但是这10个元素不能全0,也不能全1. [说明]:俄罗斯方 ...

  2. java俄罗斯方块旋转,俄罗斯方块旋转算法研究

    发表于 2012-12-05 06:36:24 by 月小升 最近在阅读俄罗斯方块的 A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4 D1 D2 D3 D4 旋转以B2 B3 ...

  3. java俄罗斯方块消除算法_Java 俄罗斯方块消行算法

    Java 俄罗斯方块消行算法 2020-08-12 11:02 阅读数 9 /** * 消行得分 */ private int plusExp() { //获取地图信息 boolean[][] gam ...

  4. 4维俄罗斯方块 java_HTML5边玩边学(九)-俄罗斯方块之数据模型篇

    一.从数据出发还是从界面出发 要写一个俄罗斯方块小游戏,我们先来一块考虑一下下面几个问题: 1.用什么表示方块 2.怎么设置或者改变方块的颜色 3.怎么移动方块 4.怎么消除方块 请考虑一分钟后再继续 ...

  5. GITHUB排行榜C位出道-手把手教你玩转V语言版的俄罗斯方块

    最近 V 语言-一个GO语言最吸晴的项目,在千呼万唤之后,终于迎来开源,并正式发布了首个可用版本,其一经推出,便强势登顶 GitHub的榜首,引来各方热议.目前V已经可以实现自我编译迭代,笔者大致了解 ...

  6. python俄罗斯方块的消除算法_1.1.3python tkinter实现俄罗斯方块基础版-生成、移动、固定、消除...

    1.随机生成俄罗斯方块 这里需要导入python自带的随机库random 使用其中的choice方法,从俄罗斯方块形状列表中随机选出一个. 该方法源码说明如图 首先我们需要删除原来的位于game_lo ...

  7. pygame一步步玩转圆、矩形、图像、旋转、透明度alpha、colorkey操作(有完整案例)

    最近一直在专研pygame,略有心得,也分享了几篇文章,感谢各位朋友支持. 今天,玩转一个非常基础的知识,其实是多个知识点的汇聚,欢迎往下看. 文章目录 一.包含的基础知识点: (一)画圆 (二)画矩 ...

  8. c语言俄罗斯方块下沉的算法,俺用c语言写的一个天下算法最烂的俄罗斯方块程序...

    /*tc3下调试通过,编译前将turboc目录下的egavga.bgi考到源程序所在目录下. 另要在            */ #include /* 定义boland图形库*/ #include ...

  9. java游戏_java开发的七个金典游戏你小时候肯定玩过

    相信很多刚接触编程的同学,对于Java开发能做些什么.做过哪些游戏, 并不是特别清楚.那么今天小编就为大家分享下, 万能的Java开发过的那些经典游戏吧! 手机上的Java即J2ME(Java 2 M ...

最新文章

  1. 真正的 AI 内行盛会!智源大会带你刷新“世界第一”记录!
  2. 计算机音乐刚好遇见你乐谱,《刚好遇见你》曲谱_刚好遇见你乐谱
  3. 大数据学习——MapReduce学习——字符统计WordCount
  4. 【Android】Activity和PopupWindow都实现从底部弹出或滑出选择菜单或窗口
  5. Java中获取Date的昨天代码实现
  6. WPF界面UI设计开发心得
  7. html5的文档申明为什么是!DOCTYPE html?
  8. @开发者,第二届马栏山杯国际音视频算法大赛高分攻略请查收,心动大奖等你来战!...
  9. Python虚拟环境的搭建
  10. Activator.CreateInstance 方法 (Type) 的用法
  11. mysql对本地文件的读取_MySQL之文件读取
  12. 神经元模型图手工制作,神经元模型图手工模型
  13. Window8专业版免序列号激活工具下载地址
  14. 关闭网站服务器端口,cmd关闭端口的命令是什么_网站服务器运行维护
  15. 基于 HLS 创建 Golang 视频流服务器
  16. 大豆技术面分析_期货分析是看技术面还是基本面?怎么进行期货分析
  17. 2020年国赛A题目思路(高教杯全国大学生数学建模竞赛)
  18. 2个DIV制作十字架
  19. 高校bbs及科研论坛
  20. 秋招记录-中国银行软开(西安)

热门文章

  1. axure 调整中继器列宽_Axure中继器:柱状图灵活变幻的诀窍
  2. #入门#聊聊Spring AOP
  3. 中国大学慕课 大连理工大学 C语言程序设计 第11周 结构与共用体
  4. WPF自定义最大化最小化关闭按钮
  5. springboot整合atomikos实践—单体项目多数据源整合
  6. Cortana 在 Windows 11 上谢幕,“死”于生成式 AI 之手的第一款语音助手!
  7. 【Android】Audio音频输出通道切换 - 蓝牙bluetooth、外放
  8. 客户需要怎样的服务?
  9. SGX_SQLite【源码分析】
  10. wkt坐标互转geojson坐标(后端java)(地图数据篇.6)