#小程序云开发挑战赛#-红小包抽奖-赞过
发布于 4 年前 作者 fengtao 1563 次浏览 来自 分享

「红小包抽奖」是一款模拟微信红包的数字抽奖小程序,无需花钱,可绑定多个微信群,可切换排序:手气最佳、手气最差、手速最快。

说一下应用场景。

如果你有加入一些商家群,那应该经常会看到商家在群里发红包,然后说手气最佳送一个啥啥啥,也有商家会挑手气最差的。

这里有几个小问题。

  1. 如果要找手气最差的,不太好找,尤其人多的时候。
  2. 如果要找手气最佳前几名,或者手气最差后几名,也都不太好找,因为不可以切换排序。
  3. 如果我想一个红包让多个群的人一起来抢,好像也还没办法实现。

「红小包抽奖」解决了以上问题,可以切换排序方式,可以绑定多个群。

当然也可以不绑定群,比如你是写公众号的,那就不用绑定群,公开,所有人都可以来抢。

还有一点很重要,就是不需要真的往红包里塞钱。这其实就是一个模拟微信红包的数字游戏。因为很多人玩微信红包抽奖,关键点还是在“抽奖”,而不是“红包”,金额也不会太大。不过在这款小程序里,没人可以拦住你的任性,发一个亿太简单。

以下是小程序的功能介绍视频。

特别感谢 Neo 老师给了我灵感,才有了这款小程序。Neo 是我的用户,给了我很多建议和帮助。之前做的一个“翻牌抽奖”的小程序,他使用时遇到一个 bug,我们聊的时候,Neo 说,其实直接用微信红包在群里抽奖,感觉效果也还不错。他这句听似不经意的话,刹那间给了我灵感,几天之后就开始付诸行动,花了三周时间,有了现在这款「红小包抽奖」,再次感谢 Neo!

这款小程序已经发布,不过版本是 1.0.0。后面改了几个 bug,作了一些优化,但是没有通过审核,原因是红包类目下架了,可能在作规则修改,也不知道哪天会再次开放。如果不再开放红包类目,那这个 v1.0.0 估计是绝版了。

祝你玩得开心!

2 回复

这个弄好了可玩性会很强。

有同学好奇红包金额的随机算法,这里分享一下:

const fixFloatNumber = (num = 0) => {
  const decimal = String(num).split('.')[1]
  let newNum = num
  if (decimal && decimal.length > 2) {
    newNum = parseFloat(parseFloat(num).toFixed(2))
  }
  return newNum
}

const randomMoney = (infoData) => {
  const { usableMoney = 0, stock = 0, soldNum = 0 } = infoData
  const usableStock = stock - soldNum
  const averageMoney = usableMoney / usableStock
  const stockRatio = soldNum / stock
  let coeff = 1 + stockRatio

  // 前面和后面的红包,随机数的最大值会比中间部分的红包要小一些,避免前面的红包金额大概率偏大(尤其是第一个),也避免后面的红包金额大概率偏小(尤其是最后一个)。
  if (stockRatio < 0.1 || stockRatio > 0.9) {
    coeff = 1.3
  } else if (stockRatio < 0.2 || stockRatio > 0.8) {
    coeff = 1.4
  } else if (stockRatio < 0.3 || stockRatio > 0.7) {
    coeff = 1.5
  } else {
    coeff = 1.6
  }

  const minMoney = averageMoney / 2
  const maxMoney = averageMoney * coeff

  let luckyMoney

  if (usableStock === 1) {
    luckyMoney = usableMoney
  } else {
    luckyMoney = Math.round(((Math.random() * (maxMoney - minMoney)) + minMoney) * 100) / 100
  }

  return fixFloatNumber(luckyMoney)
}
回到顶部