侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

微信抢红包ASP.NET代码轻松实现

微信(小程序)  /  管理员 发布于 3年前   137

群里都在玩抢红包,抢了再发,发了再抢,简直是无聊,程序员感兴趣是的如何实现,这里简单说说实现思路,附上dome,代码有点low,好在是实现了,具体内容如下 

正文

100块发30个红包

  

50块发13个红包

  

1块发10个红包

  

发红包需要满足以下几个条件

1.总金额不变
2.每个红包都必须有钱
3.尽量的均匀点,不然抢红包没什么意思了 

实现思路
1.首先要确定最小单位,这里是精确到分,我这里以int类型进行计算,得出的结果也全是int类型
2.数据均匀,这里以  1<n<(剩余金额/剩余红包数)*2,这里防止一个红包抢走大量的钱,这里需要写个递归,去检查数据值是否过大,50元发13个红包的第3图,就是因为没有检查数据,导致钱不平均,这个可以根据自己的玩法去设置.
3.余数处理,当数据平均给20个红包,肯定跟总金额有所偏差,这时候我们就要多退少补,如果大于总金额,让红包金额多的去减少(总金额/总人数),如果还有剩余,就让第二多的去减少,直到补完这个空缺为止,反之亦然.
4.打乱顺序,细心的园友可能发现,红包是有顺序规律的,我们必须简单的写个function去打乱它.   

demo 

/// <summary> /// 抢红包 /// </summary> /// <param name="money"></param> /// <param name="num"></param> /// <returns></returns> public List<int> qhb(int money, int num) {  int min = 1;  int pjs = money / num;  List<int> list = new List<int>();  Random rnd = new Random();  for (int i = 0; i < num; i++)  {  int max = (money / (num - i)) * 2;  int s = rnd.Next(min, max);  s = checkmoney(s, min, max);  list.Add(s);  money -= s;  }  //前面数据都是合理的,结尾必须多退少补  list = checklist(money, pjs, list);  return list; }

/// <summary> /// 余数处理 /// </summary> /// <param name="money"></param> /// <param name="list"></param> /// <returns></returns> public List<int> checklist(int money, int pjs, List<int> list) {  if (money != 0)  {  if (money > 0)  {   List<int> list_order = maopao(list);   //给最小   if (money / pjs == 0)   {      list_order[0] += money;   }   else   {   for (int i = 0; i < money / pjs + 1; i++)   {    if (i == money / pjs)    {    list_order[i] += (money - (money / pjs) * pjs);    }    else    {    list_order[i] += pjs;    }   }   }   return list_order;  }  else  {   List<int> list_order = maopao(list,"desc");   //给最大   if (money / pjs == 0)   {   list_order[0] += money;   }   else   {   for (int i = 0; i < -(money / pjs) + 1; i++)   {    if (i == -(money / pjs))    {    list_order[i] += (money - (money / pjs) * pjs);    }    else    {    list_order[i] -= pjs;    }   }   }   return list_order;  }  }  return list; }

 /// <summary>  /// 冒泡排序  /// </summary>  /// <param name="list"></param>  /// <param name="order"></param>  /// <returns></returns>  public List<int> maopao(List<int> list,string order = "asc")  {  if (order != "asc")  {   for (int i = 0; i < list.Count; i++)   {   for (int j = 0; j < list.Count - i - 1; j++)   {    if (list[j + 1] > list[j])   {    int temp = list[j];    list[j] = list[j + 1];    list[j + 1] = temp;     }   }   }  }  else   {   for (int i = 0; i < list.Count; i++)   {   for (int j = 0; j < list.Count-i-1;j++)   {    if (list[j+1] < list[j])    {    int temp = list[j];    list[j] = list[j+1];    list[j+1] = temp;   }   }  }  }  return list; }

/// <summary> /// 打乱顺序  /// </summary>  /// <param name="list"></param>  /// <returns></returns> public List<int> suiji(List<int> list)   {  Random rnd = new Random();  for (int i = 0; i < list.Count; i++)  {   int temp = list[i];   int j = rnd.Next(0, list.Count-1);   list[i] = list[j];   list[j] = temp;  }  return list; }

本文已被整理到了《ASP.NET微信开发教程汇总》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    微信扫码支付(PC端)
    下一条:
    实用vbs提醒小程序
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 小程序开发之跳转微信直播示例api(0个评论)
    • 在uni_app中开发小程序之常用功能示例代码汇总(0个评论)
    • 小程序开发之多端框架:taro(0个评论)
    • 微信小程序前端使用七牛云官方SDK上传七牛云代码示例(0个评论)
    • 百度小程序审核未通过,真机审核存在点击返回键退出小程序...解决方式之一tabBar(0个评论)
    • 近期文章
    • 在laravel框架中的5个HTTP客户端技巧分享(0个评论)
    • 在go语言中使用FFmpeg库实现PCM音频文件编码为mp3格式文件流程步骤(0个评论)
    • gopacket免安装Pcap实现驱动层流量抓包流程步骤(0个评论)
    • 在laravel项目中实现密码强度验证功能推荐扩展包:password-strength(0个评论)
    • 在go语言中用filepath.Match()函数以通配符模式匹配字符串示例(0个评论)
    • Laravel Response Classes 响应类使用优化浅析(0个评论)
    • mysql中sql_mode的各模式浅析(0个评论)
    • 百度文心一言今天发布,个人第一批内测体验记录,不好别打我(0个评论)
    • 嘿加密世界让我们谈谈在共识中将中本聪主流化(0个评论)
    • 在go语言中寻找两个切片或数组中的相同元素/共同点/交集并集示例代码(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2017-10
    • 2018-01
    • 2020-03
    • 2021-06
    • 2021-10
    • 2022-03
    • 2023-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客