- Cocos2d-x学习笔记:完全掌握Lua API与游戏项目开发 (未来书库)
- 赵志荣
- 1386字
- 2021-03-19 16:44:22
2.7 控制语句
结构化程序设计中的控制语句有三种,即顺序、分支和循环语句,而且只能用这三种结构来完成。Lua程序通过控制语句来执行程序流,完成一定的任务。Lua中的控制语句有以下几类:
□ 分支语句:if
□ 循环语句:while、repeat、for
□ 与程序转移有关的跳转语句:break、return
2.7.1 分支语句
分支语句提供了一种控制机制,使得程序具有“判断能力”,能够像人类的大脑一样分析问题。分支语句又称条件语句,条件语句使部分程序可根据某些表达式的值有选择地执行。
由if语句引导的选择结构有if结构、if-else结构和elseif结构三种。
如果条件表达式为true就执行语句组,否则就执行if结构后面的语句。语句组是单句时大括号可以省略。语法结构:
-- if结构 if 条件表达式 then 语句组 end -- if…else结构 if 条件表达式 then 语句组 1 else 语句组 2 end -- if-else结构 if 条件表达式 1 then 语句组 1 elseif 条件表达式 2 then 语句组 2 elseif 条件表达式3 then 语句组3 … elseif 条件表达式n then 语句组n else 语句组n+1 end
条件语句if-else示例代码如下:
local score = 95 print('------ if结构示例-------') if score > = 85 then print("您真优秀!") end if score < 60 then print("您需要加倍努力!") end if score > = 60 and score < 85 then print("您的成绩还可以,仍需继续努力!") end print('------ if-else结构示例------') if score < 60 then print("不及格") else print("及格") end print('------elseif结构示例------') local testscore = 76 local grade if testscore> = 90 then grade = 'A' elseif testscore> = 80 then grade = 'B' elseif testscore> = 70 then grade = 'C' elseif testscore> = 60 then grade = 'D' else grade = 'F' end print("Grade ="..grade)
运行结果如下:
------ if结构示例------- 您真优秀! ------ if-else结构示例------ 及格 ------elseif结构示例------ Grade = C
2.7.2 循环语句
循环语句使语句或代码块的执行得以重复进行。Lua支持三种循环构造类型:while、repeat和for循环是在执行循环体之前测试循环条件,而repeat是在执行完循环体之后测试循环条件。这就意味着for和while循环可能连一次循环体都未执行,而repeat将至少执行一次循环体。
1.while语句
while语句是一种先判断的循环结构,语句格式如下:
[initialization] while termination do body [iteration] end
其中中括号([])可以省略,initialization是初始化语句,termination条件表达式。如果为true则执行循环体。iteration是迭代语句,主要用于改变循环变量。
下面的程序代码是通过while实现查找平方小于100000的最大整数:
local i = 0 while i * i < 100000 do i = i + 1 end
print(i .."*"..i .."="..i*i)
输出结果:
317 * 317 = 100489
这段程序的目的是找到平方数小于100000的最大整数。使用while循环需要注意:while循环语句中只能写一个表示式,而且是一个布尔型表达式,如果循环体中需要循环变量,就必须在while语句之前做好处理。例如,上例中先给i赋值为0,其次在循环体内部,必须通过语句更改循环变量的值,否则将会发生死循环。
2.repeat语句
repeat语句的使用与while语句的使用相似,不过repeat语句事后判断的循环结构,语句格式如下:
[initialization] repeat body [iteration] until termination
其中,termination条件表达式与while不同,termination为true则退出循环体。
下面程序代码是使用repeat实现了查找平方小于100000的最大整数:
i = 0 repeat i = i + 1 until(i * i> = 100000) print(i .."*"..i .."="..i*i)
输出结果:
317 * 317 = 100489
当程序执行到repeat语句时,首先无条件执行一次循环体,然后计算条件表达式,它的值必须是布尔型,如果值为false,则再次执行循环体,然后到条件表达式准备再次判断,如此反复,直到条件表达式的值为true时跳出循环。
3.典型for语句
典型for语句是应用最为广泛的一种循环语句,也是功能最强的一种。一般格式如下:
for var=exp1, exp2, exp3 do body end
其中var是循环变量,从exp1开始起,直到exp2的值为止,步长为exp3。exp3可以省略,默认值为1。
下面的程序代码是使用典型for循环实现平方表:
local i print("n n*n") print("---------") for i = 1,10 do print(i ..""..i * i) end
运行结果:
n n*n ------ 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100
这个程序步长为1,循环变量i的取值范围是大于等于1,小于等于10。因此,最后的结果是打印出1~10的平方。
4.迭代for-in语句
迭代for语句可以帮助我们方便地遍历数组(table类型)。一般格式如下:
for i, v in ipairs(a) do body end
其中a是数组变量,ipairs函数从a数组中取出循环变量i和元素v。
下面是使用迭代for循环的示例代码:
local numbers ={106, 22, 30, 48, 56, 60, 70, 80, 90, 109} for i, v in ipairs(numbers) do print(i ..":"..v) end
运行结果:
1 :106 2 :22 3 :30 4 :48 5 :56 6 :60 7 :70 8 :80 9 :90 10 : 109
上述代码numbers是数组变量。
2.7.3 跳转语句
□ break语句
□ 返回语句return
1.break语句
break语句可用于switch引导的分支结构及以上三种循环结构,它的作用是强行退出循环结构,不执行循环结构中剩余的语句。break语句格式如下:
break
使用break语句示例:
local numbers ={106, 22, 30, 48, 56, 60, 70, 80, 90, 109} for i, v in ipairs(numbers) do if i == 3 then break end print(i ..":"..v) end
在上例中,当条件i==3的时候执行break语句,程序运行结果是:
1 :106 2 :22
2.返回语句return
return语句可以当前函数中退出,返回到调用该函数的语句处。返回语句有两种格式:
return expression return