石器时代LA官方

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 73|回复: 2

[LUA教学] LUA常见的数学函式与随机种子

[复制链接]

1万

主题

1万

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
24311
石币
13857
发表于 2019-10-25 16:10:06 | 显示全部楼层 |阅读模式
LUA裡面很常需要用到数学的函式
较为常见的

math.floor
不大于x的最大整数
math.floor(5.6)
5
math.modf
把数分为整数和小数
math.modf(15.98)
15    98
math.random
获取随机数
math.random(1, 100)

获取1-100的随机数


数字比较常见的就是floor和modf
例如在能力的计算,总是会变成浮点数(FLOAT),而搭配floor就可以避免产生小数点而除不尽的情况
简单来说就是取整数

print(math.modf(50/4));
print(math.floor(math.modf(50/4));

---------会得到---------
12 0.5
12

补充:
使用math.random之前,一定要先有随机种子,可以使用以下两款
math.randomseed(os.time())
或是
math.randomseed(tostring(os.time()):reverse():sub(1, 6))

两种的差别,在于“短时间内多次运行” 这样的需求下 random()有个毛病
就是如果 seed 很小或者seed 变化很小,产生的随机序列仍然很相似
os.time 就会产生差不多的数字,造成随机的主要功能不尽理想
把time返回的数值字串倒过来(低位变高位),再取高位6位。这样 即使 time变化很小
但是因为低位遍了高位,种子数值变化却很大,就可以使随机序列的产生更好一些


以下做一个简单随机的示范
--决定传送名称、图号、X、Y
local name = {"萨","渔","加","卡"};
local map = {1000,2000,3000,4000};
local x = {11,22,33,44};
local y = {55,66,77,88};
--随机数字决定去哪裡
local send = math.random(1,4);
--传送、给一行说明
NLG.Warp(_Playerindex,map[send],x[send],y[send]);
NLG.TalkToCli(_Playerindex,"送你到 "..name[send].." 村",%绿色%);

如此一来,假设随机的数字抽到2
就会将人物传送到2000,22,66
并且出现一行"送你到 渔 村"的文字。

当然还可以衍伸更多的功能,例如成功率
--随机1~100一个数字
local success = math.random(1,100);

--成功率约30%
if success >= 70 then

--do somthing

print('成功')
else

--do somthing

print('失败')
end





回复

使用道具 举报

5

主题

148

帖子

241

积分

中级会员

Rank: 3Rank: 3

积分
241
石币
93
发表于 2019-10-29 16:48:34 | 显示全部楼层
終於有新東西,感謝分享,學習一波
回复 支持 反对

使用道具 举报

5

主题

148

帖子

241

积分

中级会员

Rank: 3Rank: 3

积分
241
石币
93
发表于 2019-11-8 12:40:48 | 显示全部楼层
感謝分享,回復學習賺石幣
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|石器时代LA官方

GMT+8, 2019-11-22 20:02 , Processed in 0.128347 second(s), 22 queries .

快速回复 返回顶部 返回列表