完善抢红包逻辑

This commit is contained in:
2025-12-22 17:52:31 +08:00
parent 702f09d0de
commit 7664fd812d

View File

@@ -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