5——使用数据表编写程序
Lua中的数据表(tables)很像变量。主要区别是数据表可以用来存储多个数据,而变量只能存一个。你把它想象成一个带有很多“抽屉”存放不同内容的容器就行了。你今后编写的游戏很可能会用到数个数据表。在Lua中使用数据表基本相当于其他编程语言中使用的数列(arrays)。本课我们还会顺便学一些别的内容。
假设我们要写一个小游戏,共有5类敌兵,2个玩家。为此我们要让程序知道这些角色的相关信息。你觉得玩家和敌兵需要什么信息呢?我相信你会有成堆的想法,不过既然你是初学,还是简单点好。首先敌兵得有生命值(health),这样才能被杀死。因此我们需要给程序提供信息以跟踪敌兵的生命值。我们还需要信息以区分我们使用的敌兵种类。对于玩家生命值自然也是不可少的。还要什么信息?比如玩家拥有的武器种类怎样!有了这些信息我们应该可以开始了。
现在开始数据表的学习。下文中的代码只有我们明确说明的才需要添加到你的程序中去。因为本课我会给出几个你并不需要的参考代码。
数据表的定义方式:
代码:
tablename = { }
首先是数据表名(任何你喜欢的名字),然后是等号,然后是左右(开闭)尖括号。这样就创建了一个空的数据表。要为数据表赋值,只要把数据放进括号里就行,用逗号隔开。这里有个例子:
代码:
myTable = { 12, 14, 16, 18, 20 }
记住它的用法跟变量完全相同。只是看起来有点不一样。现在叫你使用方法。数据表内的每个数据作为一个数列元素而被索引,这样我们只需使用数据表名加上内有索引号的开闭方括号就能调用该数据。没搞懂?!看看下例吧:
代码:
luckyNumber = myTable[1]
此处我们将数据表的第一个数据的值(12)赋予了变量luckyNumber。再回看一下我们刚创建的数据表,总共有几个数据在内?如果你说5就对了。第一个是12,第二个是14,依次下去。用上述方法我们可以轻松的调用里面的数据。索引以 1 起始,而不像某些语言那样以 0 开始。下面列出了该表所有可用的数据元素:
代码:
myTable[1]
myTable[2]
myTable[3]
myTable[4]
myTable[5]
到此我想你应该试着用数据表写自己的程序了。还记得第一课我们学过打印一行到屏幕吧?现在不用变量,而是创建一个数据表并使用print命令将其中一个元素打印出来。你也可以用多个打印语句让它打印数个或全部元素。但是记得要修改print命令的Y参数,不然就像我们之前说过的,打印结果会堆叠起来。你无需更改X参数,因为该参数只影响水平位置。程序不会自动打印到下一行,你必须告诉它这么做。你必须告诉程序向下多少个像素,以避免交叠或相距太远。就像你之前用变量打印时一样做法,只不过这次换成数据表元素:tablename[number]。去尝试一下吧,我发誓我会在这等你的!
好了,我希望你做的不错。我还想指出,你可以先创建空的数据表,稍后再在程序中为它赋值。下面是一个示例:
代码:
myTable = { } myTable[1] = "apple" myTable[2] = "orange" myTable[3] = "banana"
你一定注意到了,赋值除了数字,字符串也是可以的,只要你用引号括起来。
译者注:此处你也看到不同语句可以写在一行内,只要用空格分开就行了。当然这样不利于阅读,所以我建议最好还是分行写。
接下来我们再学一个更复杂点的数据表。你可以给数据表原属添加额外的属性,有时又被称为字典或类型。这是非常非常有用的,可以让你的代码齐整易读。让我们来看个例子。我将创建一个空数据表并在下一行引入这一方法。
代码:
shirt = { }
shirt[1] = { color = "blue", size = "small" }
我们做的就是创建一个数据表,并在其中的shirt[1]元素中创建了另一个数据表。现在假设程序要获取衬衫的颜色和尺寸。方法如下: