上篇教程中,我们使用一个数组用以描述俄罗斯方块中的某一个形状,如:
在分析方块的数据结构时,我们指出,最宽的是横条,它有4个小方块的宽度;最高的是竖条,它有4个小方块的高度。我们选择最宽与最高的形状组成一个网格,而游戏中所涉及到的形状都可以放在这个网格中。
在这里,网格一词间接指明了它是一个二维对象。如果我们所使用的语言也具有描述这种网格的数据类型,那它也就可以用来描述俄罗斯方块的数据结构。在C语言中,这种网格数据称为二维数组。与之相对,我们以前使用的数组就称为一维数组。
一个二维数组可以理解为由行与列构成的一张表。这样,上面的shape可以定义为:
对于二维数组,我们可以使用双层循环进行遍历。
注意,这是我们第一次使用双层for循环结构,可能会让你有些措手不及。我们知道,在C语言中,用一对花括号{}可以形成一个语句块。在语句块中,你可以书写任何合法的语句,就是这么个道理。
双层循环结构,是由外向内执行的。它的行为与我们军训时队列报数是一个道理。第一排1,2,3,4...第二排9, 10, 11....
多维数组
2维或2维以上的数组可以称之为多维数组,C语言也是支持这些定义的。当然,维数越多理解就越复杂。对于多维数组的描述,使用组的概念会列加清晰,如3维数组 arr[2][3][4],我们可以读作:数组arr有两个大组,每个大组包含3个小组,每个小组包含4个元素。因为4后面没有维度了,所以它是元素数了。多维数组中元素的个数就是各个维度相乘的结果,或许把步骤写出来更清晰一些。
理解了这个概念之后,那下面这个4维数组就没有任何难度了。
领取 专属20元代金券
Get大咖技术交流圈