早上看到朋友在晒昨天1024节日福利,5位数红包雨,羡慕感叹之余想探究下微信运气红包的实现。
重要的几个参数:
1.红包总金额 (totalMoney)
2.红包总个数 (totalCount)
3.剩余红包个数(leftCount)
4.剩余红包金额 (leftMoney)
4.当前抢到的红包金额 (money)
4.红包最大值(maxMoney)//为了不至于每个红包之间差距太过悬殊,微信约定这个最大值为当前红包剩余金额 / 剩余红包个数 * 2。
5.红包最小值(minMoney)//微信好像是约定好为0.01。我开始还觉得假如1000元红包,只发5个人的话,也会同样出现0.01的情况,那只能说你运气真是背到家了。(好像印象中是有出现500红包抢到过0.1的)
理论:每次红包抢到的金额范围为 [minMoney, maxMoney],当红包剩余个数为1时,该轮红包金额为当前红包剩余金额。
代码:
self.leftMoney = totalMoney;
self.leftCount = self.totalCount;
self.maxMoney = self.leftMoney / self.leftCount * 2;
if (self.leftCount == 1) {
self.money = self.leftMoney;
NSLog(@"===============%f",self.money);
}else{
int maxint = [NSString stringWithFormat:@"%f",self.maxMoney * 100].intValue;
self.money = (1 + arc4random()% (maxint + 1))/100.0;
NSLog(@"===============%f",self.money);
self.leftCount = self.leftCount - 1;
self.leftMoney = leftMoney - self.money;
self.maxMoney = self.leftMoney / self.leftCount * 2;
}
理论也比较简单,代码实现也不繁琐,上面写的是伪代码,应该看就可以看懂,现在git也挂了,有需要demo的留邮箱
网友评论