如上所述,逻辑运算符可以用来比较多个事物。我们将学习其中两个,“and”和“or”。还有一个“not”。
假设你在编写一个角色扮演游戏,有点象 Diablo 那种。游戏的玩家角色想要装备一把屠龙刀(Dragon Slayer)。你打算设定玩家只有达到20级且是战士(warrior)类时方能装备该物品。在程序开始我们创建一个数列存放这些信息,例如:
代码:
Player = { }
Player[1] = { level = 15, class = "warrior", weapon = "knife" }
稍后我们的代码将检查玩家是否有资格装备该武器,如下:
代码:
if Player[1].level >= 20 and Player[1].class == "warrior" then
Player[1].weapon = "Dragon Slayer"
end
第一行检查玩家的等级是否大于或等于 20,还有玩家的类别是否属于战士类。如果两个条件都满足,则玩家的武器就被设定为屠龙刀。如果只有一个条件满足,则返回值为假,那么武器就不会变更。在本例中,我们的玩家虽然的确是战士类,但是等级只有15,没有大于或等于 20,所以该玩家无法使用屠龙刀。你可以使用不止一个“and”,例如你可以这样写:
代码:
if hat == "blue" and shirt == "red" and age > 15 and state ~= "Florida" then
screen:print(100,100,"You are accepted!",yellow)
end
使用“or”的方法完全一样,除了只需要其中一个条件满足返回值即为真以外。例如:
代码:
myCar = "Mustang"
if myCar == "Corvette" or myCar == "Mustang" then
screen:print(10,20,"Nice car!",green)
end
本例检查 myCar 是否等于 Corvette 或 myCar 是否等于 Mustang。二者只要有一个为真,程序就打印“Nice Car!”到屏幕上。myCar 不等于 Corvette 但等于 Mustang,所以返回值为真。
那么,让我们付诸行动吧。我们还是用上一讲编写的程序,用我们今天学的修改一下。现在打开那个文件。什么?你扔掉了?别着急,去下载上一讲的附件吧。
上一讲中,我们设定每次按下 X 键时减去敌兵生命值 5 点。本课我们将添加一些表达式,让程序能在当前敌兵死亡时让另一个敌兵上阵。我们还得检查何时已无兵可用。
第一件要做的就是添加一个变量,告知我们正与之作战的当前敌兵是哪个。我们会给该变量赋一个值。你该发现我们的敌兵数列有5个敌兵,由1至5分别索引。我们将用这些数字来指称这些敌兵。在代码顶端,绿色变量的下面,添加此变量:
代码:
currentEnemy = 1
现在我们添加一些代码,检查当前敌兵的生命值是否为 0,如果是则将 currentEnemy 变量的值递增 1,但是只在该值不超过 5 的情况下,也就是最后一个敌兵。在你的 if pad:cross() 代码行之上添加此代码:
代码:
if Enemy[currentEnemy].health == 0 and currentEnemy <= 4 then
currentEnemy = currentEnemy + 1
end
注意,此处我们用 currentEnemy 变量替代了数列 Enemy 中的数字。这样我们只要设置 currentEnemy 变量为正确的敌兵,那么代码中任何使用 Enemy 数列的地方都可以使用currentEnemy,而无需检查每个敌兵((Enemy[1] Enemy[2] 等等...),这样代码更自动化。有了“<= 4”的检查项,currentEnemy 变量就不会超过 5。如此说来,我们得修改几行代码。找到下面几行: