接下来我们使用按钮输入命令侦测X键是否按下,如果是则从敌兵生命值中减去5。添加下述代码:
代码:
if pad:cross() then
Enemy[1].health = Enemy[1].health - 5
end
这是说如果 X 键按下则从 Enemy[1].health 元素的值中减去5。
最后,让我们缓存、翻屏并终止循环。添加下述代码:
代码:
screen.waitVblankStart()
screen.flip()
end
保存运行,测试一下吧。然后赶紧回来!
啊哦,怎么回事!敌兵的生命值下降太快了,都变成负值了!可不能在游戏中这么搞!这向你显示了循环执行的速度有多快。我们可以修正它,仅在按下X键时减生命值,按住时不减。
首先在代码顶端的数据表之前添上此行。在色彩变量之前或之后都可以。
代码:
oldpad = Controls.read()
其次找到代码行 "if pad:cross() then" 更改如下:
代码:
if pad:cross() and oldpad:cross() ~= pad:cross() then
...最后,就在 screen.flip() 之后和 "end" 之前添加此行:
代码:
oldpad = pad
目前我们暂时不纠缠于细节。简单的说,此代码检测你按下的按钮是否上一循环相同,如果是,则“if”语句不会执行。~= 表示“不相等”。我们很快会学到运算符的。
保存运行,测试一下。
怎样,运行的不错,除了还会变成负数以外。正好,我们正要学习另一个运算符呢。
找到代码行 "if pad:cross() and oldpad:cross() ~= pad:cross() then" 更改如下:
代码:
if pad:cross() and oldpad:cross() ~= pad:cross() and Enemy[1].health > 0 then
我们添加了 Enemy[1].health > 0 这个条件。 > 表示“大于”,可能你已经知道了。所以修改后的整行代码表示如果X键按下,并且没有按住与上一循环相同的按钮,并且敌兵的生命值大于0则执行随后的语句(生命值减5)。注意要执行此代码就必须所有条件都满足。
保存运行,现在应该一切正常了。敌兵的生命值不会变得小于0。
本课到此为止。注意本课的重点是数据表。所以其他东西你不是完全理解也没关系。该休息一下了,下节课再见。
6——利用表达式
其实我们之前的程序已多少用到了一些表达式,现在我们就深入的学习一下。有些我们已经熟悉了,比如“if”语句和“>”运算符。我们将编写一个利用这些表达式的程序,它与我们上一次写的很相似,只是更深一些。先创建一个新文件,但暂时不要添加代码,除非得到明确告知,象上一讲一样。
首先要讲的就是算术表达式,太简单了,无非就是加减乘除而已。我也不多说了,举例如下:
代码:
x = 3 + 5 -- 加法
y = 3 - 1 -- 减法
a = 4 * 5 -- 乘法
b = 10 / 2 -- 除法
c = 2 ^ 8 -- 乘方
不难吧,嗯?记住,我教你的都是基础,我不会介绍每一个命令。等你学会了我传授的,你就能自己查询资料,学习我没有教的东西了。
接着要讲的是关系表达式。这是编程时超常用的,用来比较数据。返回真或假(又称为布尔值)。下面是列表:
== (相等)
~= (不相等)