完善抢红包逻辑
This commit is contained in:
@@ -69,7 +69,7 @@ if leftCount <= 0 or leftAmount <= 0 then
|
||||
return {0, "红包已抢完", 0}
|
||||
end
|
||||
|
||||
-- 计算红包金额(核心修改:适配整数金币,避免0)
|
||||
-- 计算红包金额(核心修复:解决3金币2红包场景第二个红包为0的问题)
|
||||
local amount = 0
|
||||
local isFinished = 0
|
||||
|
||||
@@ -78,21 +78,24 @@ if leftCount == 1 then
|
||||
amount = leftAmount
|
||||
isFinished = 1
|
||||
else
|
||||
-- 随机算法:二倍均值法(适配整数,保证最低1)
|
||||
-- 1. 计算二倍均值(整数处理,向下取整)
|
||||
-- 随机算法:二倍均值法(适配整数+保底逻辑,彻底避免0)
|
||||
-- 1. 基础二倍均值(整数处理)
|
||||
local avg = leftAmount / leftCount
|
||||
local maxAmount = math.floor(avg * 2)
|
||||
-- 2. 确保最大金额至少为1,且不超过剩余金额-(剩余个数-1)(避免后续红包无金额可分)
|
||||
-- 剩余金额-(剩余个数-1):保证剩下的每个红包至少能分1个金币
|
||||
|
||||
-- 2. 核心修复:保底限制 - 最大金额不能超过「剩余金额 - (剩余个数 - 1)」
|
||||
-- 确保剩下的每个红包至少能分到1个金币(比如3金币2红包:3 - (2-1) = 2,第一个红包最多抢2)
|
||||
local safeMax = leftAmount - (leftCount - 1)
|
||||
maxAmount = math.min(maxAmount, safeMax)
|
||||
maxAmount = math.max(maxAmount, 1) -- 确保最小可随机值为1
|
||||
|
||||
-- 3. 随机生成1到maxAmount之间的整数(避免0)
|
||||
-- 3. 强制保证最小金额为1,最大金额不小于1
|
||||
maxAmount = math.max(maxAmount, 1)
|
||||
|
||||
-- 4. 随机生成1到maxAmount之间的整数(绝对不会出现0)
|
||||
amount = math.random(1, maxAmount)
|
||||
|
||||
-- 4. 检查是否抢完(整数判断,无需浮点数误差处理)
|
||||
if leftCount - 1 == 1 or (leftAmount - amount) <= 0 then
|
||||
-- 5. 整数场景下的抢完判断(无需浮点数误差处理)
|
||||
if (leftCount - 1) == 1 and (leftAmount - amount) == 0 then
|
||||
isFinished = 1
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user