俄罗斯方块一维数组存储.doc_第1页
俄罗斯方块一维数组存储.doc_第2页
俄罗斯方块一维数组存储.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

俄罗斯方块的一维数组存储我写了一个俄罗斯方块,其和平时网上看到的有一点不一样,网上大多数是二维数组写成的,而我这个是用一维数组写的。如果你有兴趣的话,可以先不看下文,自己尝试一下用一位数组写一个出来。要想用一维数组表示二维数组的信息的话,么对以为数组里的每个元素就要特别对待,因为那每一个元素要存储二维数组里的每一行的信息。究竟如何存储呢?请看下面的例图:这个为内存的一个字节0 0 10 0 00 1这样的一个字节完全可以看成是一个一维数组,其存储的是0,0,0,0,0,0,0,1这些数字,这样只要把这些数字按一定方法分离出来就可以完全当作二维数组用。这些方法自己定。那么如何分离这些数字呢?看下面的例子: 0 0 1 0 0 0 0 1 = 33 7 6 5 4 3 2 1 0做按位与操作(&)0 0 0 0 0 0 0 1 = 1这就得到低位的1了,再把整个字节逐个向低位移()再和1按位与(&),例子:分离那个第五位上的那个1可以这样做:(335)&1,这样就把第五位的1分离出来了。现在回到俄罗斯方块,用一个二维数组也就是标志一下哪些地方有方块,哪些地方没方块,既然只一个标志有和无,就完全可以用1和0来存储,那么存储0和1的话,用二维数组实在是很浪费。而且数组的维数越高越不容易操作现在要做的设计好要表示的二维数组的长和宽了。我做的是16*25的,用的是一个UInt16类型的数组,一看名字就知道是无符号16位的整型,刚好用来存储长度是16的二维数组。其示意图如下:PnP.P2P1P0 这样就可以用来保存一个16*n的二维数组了,Pn表示第n行,既然设计好数组,那么如何保存进去呢?a 0 0 1 0 0 0 0 1 7 6 5 4 3 2 1 0做按位或操作(|)b0 0 0 0 1 1 0 0 要把b中的内容添加到a中去可以这样做,a|b:这样得到 0 0 1 0 1 1 0 1 这样就可以实现保存,只要小方块落下时,给对应的位置这样标志就可以了。 当行满的时候Pn的值是65535,也就是2的16次方减1,这个65535我就称为行满值。当然如果是int型的,那么如果你写的是32*n的数组就要注意了,此时行满的条件是Pn = 1,因为int是有符号的,不过在不同的环境中int占的长度不一定。在TC中是2个字节,所以编写的时候要注意。 一维数组保存二维信息的原理到此基本上讲完了,下面就自己要会灵活运用了,其比起来二维数组写的俄罗斯方块有如下优点:1、 节省存储空间。2、 判断行满是效率高,只要判断Pn是否等于我们设定的满行值,省去二维数组的每一行遍历是否都等于1。3、 在消行的时候更加方便,效率高Pn-1 = Pn就能消除Pn-1行了,省去二维数组第n行向第n-1行的赋值操作。 但是一个俄罗斯方块没有一定特殊的游戏法则是多么的无聊哈,要想用一维数组存储更多的信息应该怎么做呢?很简单,我们只要更改一下分离方法就可以进行跟多的信息保存了,比如一个方块是红色的,我要把这红色也保存到一位数组中去,我先设定好几种颜色对应的数字,比如红色对应2,黄色对应3,我们只要把这个2或3保存进去就行了,那个一个位是保存不了2的,我就必须加宽每个位。看这个例子: 1 0 0 1 0 0 1 1红色 黑色 无 黄色 这样用两位来保存一个位置的信息,则一个位置有4种信息,0时为空,1时为黑色方块,2时为红色方块,3时为黄色方块,此时的分离方法也要改,把要分离的两位移到低位,和3按位与。那么16位的UInt16就只能存储8*n的二维数组了。我可以加大其对应的类型,可以用int32,或者更高位的类型达到存储更多信息的目的。 当然,这个也是有个限度的,过多的信息存储时还是用二维好点。比如一个俄罗斯方块要存储16种颜色,8种音效,多种的积分法则,此时一位数组是远远办不到的。但是我们任然可以用按位操作达到节省存储空间的压缩,和一些高效率的运行。 声明一下:这里

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论