课时 10 · 标准库
课时 10 · 标准库(Lua 进阶):熟练使用常用标准库。含可运行的示例代码、练习与验收要点,示例锁定 Lua 5.1,可在站内在线运行验证。
本课的代码可以就地复制;点代码块右上角的「运行这段」, 会带着这段代码打开 Lua 在线运行器 并直接跑出结果 (课程示例统一按 5.1 跑;运行器里也能切到 5.3)。
本课的代码跑在 996 引擎里,用到的是服务端接口(changeexp、 SetInt 这类),在线运行器里没有这些函数。 每个函数的签名都能在 文档检索 里按名字查到原文。
本课目标
- 熟练使用常用标准库。
知识讲解
math 库:math.random(随机数)、math.randomseed(随机种子)、math.floor/math.ceil(取整)、math.max/min、math.abs。table 库:insert/remove/sort/concat。os 库:os.time/os.date(时间)、os.clock(时钟)。io 库:io.open 读写文件。引擎开发中常用 math.random 做概率判定,用 os.time 记录时间戳。
示例:随机数与时间
math.randomseed(os.time())
local r = math.random(1, 100) -- 1-100 随机整数
print(r)
local t = os.time()
print(os.date('%Y-%m-%d %H:%M:%S', t))
local f = io.open('log.txt', 'a')
f:write('掉落:', r, '\n')
f:close()
练习任务
- 制作抽奖概率模拟器:奖池含 4 档奖品(概率 60%/30%/8%/2%),模拟 1000 次抽奖并统计各档次数与占比。
参考:抽奖模拟
math.randomseed(os.time())
local prize = {60, 30, 8, 2}
local stat = {0, 0, 0, 0}
for i = 1, 1000 do
local r = math.random(1, 100)
local acc = 0
for j = 1, 4 do
acc = acc + prize[j]
if r <= acc then stat[j] = stat[j] + 1 break end
end
end
for j = 1, 4 do
print(j, stat[j], string.format('%.1f%%', stat[j] / 10))
end
本篇依据
- 《996 新三端 Lua 开发教学技术手册》课时 10
参数与取值以你本机版本的官方帮助文档为准,不同版本之间有过调整。