條件語句if
if then
end
local a = 2
if a < 6 thenprint(a)
end
2
條件語句if else
if then
else
end
local a = 2
local b = 3
if a > 6 thenprint(a)
elseprint(b)
end
3
while循環語句
while do
end
local a = 2
while a < 5 doa = a + 1print(a)
end
3
4
5
for循環語句
for do
end
for a = 1,10,3 doprint(a)
end
1
4
7
10
repeat循環語句
repeat
until
local a = 2
repeat a = a + 1print(a)
until a > 5
3
4
5
6
文本格式化
string.format
local a = 2
local b = 3
--local c = a.."*"..b.."="..(a * b)
local c = string.format("%d*%d=%d", a, b, a*b)
print(c)
2*3=6
循環控制 break/goto
1、跳出整個循環
break--結束
for a = 1,5 doif a == 3 thenbreakendprint(a)
end
1
2
2、跳出本次循環
goto--跳轉到后面代號處
for a = 1,5 doif a == 3 thengoto abcendprint(a)::abc::
end
1
2
4
5
嵌套循環
for a = 1,9 dofor b = 1,a doio.write(string.format("%d*%d=%d ", a, b, a*b))endio.write("\n")
end
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
函數定義、調用
function
end
function say()print("say內容1")print("say內容2")
end
--不會輸出,需要調用(讓函數執行)
say()--調用
say()
say內容1
say內容2
say內容1
say內容2
函數參數
function
end
--參數(輸入):函數執行之前的已知條件,給函數傳遞的數據
--返回值(輸出):函數執行之后帶回來的結果
function say(name)--()內叫參數列表print("你好,"..name.."博士")
end
say("大")
你好,大博士
return函數返回值
return--中止當前函數
function say(name)return("你好,"..name.."博士")--return后不能加東西,會報錯
end
local a = say("小")
print (a)
你好,小博士
函數參數、返回值
function say(a,b)--多個參數以逗號分隔return a*b
end
local c = say(2,3)
local d = say(10,3)
print(c,d)
6 30
--[[使用print(a, b)這樣的方式輸出多個參數時,參數之間會自動用制表符(tab)分隔,而不是簡單的空格。
這是Lua的print函數默認行為,它會自動在每個參數之間插入一個制表符(ASCII碼為9)作為分隔符]]
函數計算斜邊
math.sqrt--開平方
function hello(a,b)--直角三角形的兩個邊長度a,b,計算斜邊local c = a*a+b*blocal d = math.sqrt(c)--開平方print(d)--return math.sqrt(a*a + b*b)--省兩行
endhello(3,4)
--print(hello(3,4))
5.0
隨機數
math.random--生成隨機偽隨機數
local num0 = 0
local num1 = 0
local num2 = 0
local num3 = 0
num0 = math.random()--生成0≤num<1的浮點偽隨機數
num1 = math.random(5)--生成1≤num≤5的整數偽隨機數
num2 = math.random(1,10)--生成1≤num≤10的整數偽隨機數
num3 = math.random() * 50--生成0≤num<50的浮點偽隨機數
print(num0)
print(num1)
print(num2)
print(num3)
0.84963174875401
5
1
31.14195529442
隨機數種子
math.randomseed--設置隨機數種子
math.randomseed(12345)--設置隨機數種子
--math.randomseed(os.time)--使用當前時間(精確到秒)作為種子
--需要毫秒級的需要看平臺接口
for i = 1 , 5 doprint(math.random())--打印5個隨機數
end
--第一次輸出
0.87460442174732
0.40364110609593
0.66623531969836
0.25568534734156
0.74194905034451
--清除后第二次輸出
0.87460442174732
0.40364110609593
0.66623531969836
0.25568534734156
0.74194905034451
計算暴擊傷害
function crit(val,bj)--val 傷害 ,bj 暴擊率if math.random() < bj then--判斷是否暴擊return val * 2--暴擊傷害增加2倍endreturn val
endlocal a = 100--基礎傷害
local b = 0.2--暴擊率for d = 1,5,1 dolocal c = crit(a,b)print("最終傷害:"..c)
end
最終傷害:200
最終傷害:200
最終傷害:100
最終傷害:100
最終傷害:200
函數多個返回值
function swap(a, b)return b, a
endlocal x, y = swap(1,2)
print(x, y)
2 1
function swap()return 2, 3
endlocal x, y = swap()
print(x, y)
2 3
函數不固定參數
function hello(...)--代表不固定有幾個參數
function swap(...)for _, v in ipairs({...}) do--傳進來的參數一個一個單獨循環處理print("參數:" .. v)end
endswap(1, 2, 3, 7)--參數類型都支持的
swap("ha", "he")
```lua
參數:1
參數:2
參數:3
參數:7
參數:ha
參數:he
循環、遍歷、迭代
循環(looping):重復執行某段代碼,多次執行代碼直到滿足某個條件,常見循環結構(for、while、do while)
遍歷(traversal):逐個訪問一遍
迭代(iteration):一種特殊的遍歷方式,在數組、列表、集合等中逐個訪問元素(強調過程)
迭代----(過程)----》遍歷----(原理)----》循環
獲取當前文件目錄
function hello(...)--代表不固定有幾個參數
function swap(...)for _, v in ipairs({...}) do--傳進來的參數一個一個單獨循環處理print("參數:" .. v)end
endswap(1, 2, 3, 7)--參數類型都支持的
swap("ha", "he")
```lua
參數:1
參數:2
參數:3
參數:7
參數:ha
參數:he