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

 更新时间:2016年08月19日 16:28:19   作者:提伯斯  
这篇文章主要为大家相许介绍了轻松实现微信抢红包的ASP.NET代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

相关文章

  • IIS中ASP.NET连接SQL Server出错的解决方法

    IIS中ASP.NET连接SQL Server出错的解决方法

    在IIS中运行的ASP.NET应用程序其所属用户名为ASPNET的特定用户,其默认权限是无法访问SQL Server的,更不可能访问ASP.NET应用程序的数据库了,因此要在IIS中访问SQL Server就需要给ASPNET帐户赋予相应的权限.
    2010-03-03
  • 详解ASP.NET-----Repeater数据控件的用法总结

    详解ASP.NET-----Repeater数据控件的用法总结

    本篇文章主要介绍了ASP.NET--Repeater数据控件的用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。
    2016-11-11
  • ASP.NET泛型三之使用协变和逆变实现类型转换

    ASP.NET泛型三之使用协变和逆变实现类型转换

    这篇文章介绍了ASP.NET使用协变和逆变实现泛型类型转换的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 用WebClient.UploadData方法上载文件数据的方法

    用WebClient.UploadData方法上载文件数据的方法

    用WebClient.UploadData方法上载文件数据的方法...
    2007-04-04
  • .NET生成水印更好的方法实例代码

    .NET生成水印更好的方法实例代码

    这篇文章主要给大家介绍了关于.NET中生成水印更好的方法,文中通过示例代码介绍的非常详细,对大家学习或者使用.NET具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • ASP.NET Core在WebApi项目中使用Cookie

    ASP.NET Core在WebApi项目中使用Cookie

    这篇文章介绍了ASP.NET Core在WebApi项目中使用Cookie的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 一个简单的ASP.NET Forms 身份认证的实例方法

    一个简单的ASP.NET Forms 身份认证的实例方法

    当访问默认首页default.aspx时,会自动跳转到login.aspx页面上请求登录,随便输入用户名和密码,点击“登录”按钮,会回到首页,并显示当前登录的用户名。
    2013-07-07
  • .NET事件监听机制的局限与扩展分析

    .NET事件监听机制的局限与扩展分析

    这篇文章主要介绍了.NET事件监听机制的局限与扩展,详细分析了.NET事件监听机制的机制与优劣,有助于更好的理解.NET的运行原理,需要的朋友可以参考下
    2014-11-11
  • ASP.NET 中文显示之两种解决方法

    ASP.NET 中文显示之两种解决方法

    作者刚开始写ASP+程序时候碰到的第一个比较大的问题就是中文显示问题,运行后发现ASP+从数据库中读出来的中文全部变成了?????,有点类似jsp中的这个频率出现最高的中文显示问题了,查了资料发现有种方法可以轻松解决中文问题。
    2008-05-05
  • ASP.NET页面优化 性能提升8倍的方法

    ASP.NET页面优化 性能提升8倍的方法

    今天与大家分享:一种优化页面执行速度的方法。采用这个方法,可以使用页面的执行速度获得【8倍】的提升效果
    2012-03-03

最新评论