/// <summary> /// 抽奖类 /// </summary> public class Lottery<T> { /// <summary> /// 抽奖次数 /// </summary> public int LotteryNumber { get; set; } /// <summary> /// 抽中事件 /// </summary> public event EventHandler<LuckyEventArgs<T>> LuckEvent; /// <summary> /// 抽失败事件 /// </summary> public event EventHandler<LuckyErrorEventArgs> LuckErrorEvent; /// <summary> /// 外部待要抽奖的清单列表 /// </summary> private List<T> allList = new List<T>(); /// <summary> /// 传进来的副本,内部初始化的时候使用 /// </summary> private List<T> sourceList = new List<T>(); /// <summary> /// 已中奖的清单列表 /// </summary> private List<T> luckyList; /// <summary> /// 锁 /// </summary> private object m_lock = new object(); /// <summary> /// 构造方法 /// </summary> /// <param name="allList"></param> public Lottery(List<T> allList) { this.init(allList,this.sourceList); this.allList = allList; this.luckyList = new List<T>(); } /// <summary> /// 初始化要抽奖的数组 /// </summary> /// <param name="list"></param> /// <param name="targetList"></param> private void init(List<T> list,List<T> targetList) { for (int i = 0; i < list.Count; i ) { targetList.Add(list[i]); } } /// <summary> /// 获得幸运号 /// </summary> /// <returns></returns> public void GetLuckyNumber() { lock (m_lock) { T obj; Random r = new Random(); int num = r.Next(allList.Count); if (this.allList.Count > 0) { obj = this.allList[num]; LotteryNumber ; if (LuckEvent != null) { this.LuckEvent(null,new LuckyEventArgs<T>(obj,this.LotteryNumber)); } //幸运号添加该列表 this.luckyList.Add(obj); //待抽奖的列表里移除该幸运号 this.allList.Remove(obj); // return obj; } else { if (this.LuckErrorEvent != null) { this.LuckErrorEvent(null, new LuckyErrorEventArgs("没有可以抽奖的资源!")); } } } } /// <summary> /// 获得幸运列表 /// </summary> /// <returns></returns> public List<T> GetLuckyList() { return this.luckyList; } /// <summary> /// 重新初始化 /// </summary> public void Reset() { this.allList.Clear(); this.init(this.sourceList, this.allList); this.LotteryNumber = 0; this.luckyList.Clear(); } } /// <summary> /// 抽奖成攻事件信息 /// </summary> /// <typeparam name="T"></typeparam> public class LuckyEventArgs<T>:EventArgs { /// <summary> /// 被抽中的实体 /// </summary> public readonly T args; /// <summary> /// 第几次抽奖 /// </summary> public readonly int lotteryNumber; /// <summary> /// 抽奖产生的抽中事件 /// </summary> /// <param name="args">抽中的实体信息</param> /// <param name="lotteryNumber">抽奖的次数值</param> public LuckyEventArgs(T args, int lotteryNumber) { this.args = args; this.lotteryNumber = lotteryNumber; } } /// <summary> /// 抽奖失败事件信息 /// </summary> public class LuckyErrorEventArgs : EventArgs { /// <summary> /// 抽奖失败的消息 /// </summary> public readonly string msg; /// <summary> /// 抽奖产生的抽奖失败事件 /// </summary> /// <param name="args"></param> public LuckyErrorEventArgs(string msg) { this.msg = msg; } }
下载抽奖类源码用户还喜欢
- 18480 文章数
- 500万+ 热度
作者专栏
编辑推荐
- 淡抹u2引擎,修复内容较多,物有所值
- 界域传说·经典巨作=传世单机(一键安装)
- 丸子版本(175个传世版本大集合)
- GS版本:神话公益服务端+客户端
- 图片放大工具(放大图片不模糊)
- 剪映无限制VIP版
- 传奇世界客户端下载器,史上最全传世客户端
- 传世GS20220920商业引擎注册+登录配置器 解压密码是1
- U2官方排行榜游戏网关 支持元神,支持传家宝
- GS开战传世客户端+服务端
- (淡漠夕阳)u2引擎合区工具
- 传世GS引擎消除“你的游戏客户端版本号过旧,请及时更新”提示
- 传世一机多区双线路配置器--免密码版本
- 传世凤凰登陆器劫持修复软件
- SQLite3 for Navicat
- 传奇世界npc对话框编辑工具
- 传世GS落霞铭文服务器端
- gs_20210409引擎包+注册机(无限制)
- 传奇世界NPC对话封包查看器[支持时长版和极速版]
- 彩虹引擎传世脚本编辑工具1.7版来了,支持函数脚本翻译
评论