最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-27 22:36:31
文档

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

微信抢红包ASP.NET代码轻松实现:群里都在玩抢红包,抢了再发,发了再抢,简直是无聊,程序员感兴趣是的如何实现,这里简单说说实现思路,附上dome,代码有点low,好在是实现了,具体内容如下 正文 100块发30个红包 50块发13个红包 1块发10个红包 发红包需要满足以下几个条件 1.
推荐度:
导读微信抢红包ASP.NET代码轻松实现:群里都在玩抢红包,抢了再发,发了再抢,简直是无聊,程序员感兴趣是的如何实现,这里简单说说实现思路,附上dome,代码有点low,好在是实现了,具体内容如下 正文 100块发30个红包 50块发13个红包 1块发10个红包 发红包需要满足以下几个条件 1.


群里都在玩抢红包,抢了再发,发了再抢,简直是无聊,程序员感兴趣是的如何实现,这里简单说说实现思路,附上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微信开发教程汇总》,欢迎大家学习阅读。

文档

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

微信抢红包ASP.NET代码轻松实现:群里都在玩抢红包,抢了再发,发了再抢,简直是无聊,程序员感兴趣是的如何实现,这里简单说说实现思路,附上dome,代码有点low,好在是实现了,具体内容如下 正文 100块发30个红包 50块发13个红包 1块发10个红包 发红包需要满足以下几个条件 1.
推荐度:
标签: 抢红包 实现 代码
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top