zoukankan      html  css  js  c++  java
  • Lottery *中奖

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Ruanmou.Advaned.Lottery
    {
        /// <summary>
        /// 双色球:投注号码由6个红色球号码和1个蓝色球号码组成。
        /// 红色球号码从01--33中选择
        /// 蓝色球号码从01--16中选择
        /// </summary>
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.btnStop.Enabled = false;
            }
    
            #region
            /// <summary>
            /// 红球集合
            /// </summary>
            private string[] RedNums =
            {
                "01","02","03","04","05","06","07","08","09","10",
                "11","12","13","14","15","16","17","18","19","20",
                "21","22","23","24","25","26","27","28","29","30",
                "31","32","33"
            };
    
            /// <summary>
            /// 蓝球集合
            /// </summary>
            private string[] BlueNums =
            {
                "01","02","03","04","05","06","07","08","09","10",
                "11","12","13","14","15","16"
            };
            private bool isGoon = true;
            #endregion
    
            /// <summary>
            /// 开始
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnStart_Click(object sender, EventArgs e)
            {
                try
                {
                    this.btnStart.Text = "开始ing";
                    this.btnStart.Enabled = false;
                    this.isGoon = true;
                    this.lblBlue.Text = "00";
                    this.lblRed1.Text = "00";
                    this.lblRed2.Text = "00";
                    this.lblRed3.Text = "00";
                    this.lblRed4.Text = "00";
                    this.lblRed5.Text = "00";
                    this.lblRed6.Text = "00";
                    Thread.Sleep(1000);
                    this.btnStop.Enabled = true;//合适打开
    
                    List<Task> taskList = new List<Task>();
                    TaskFactory taskFactory = new TaskFactory();
                    foreach (Control c in this.gboSSQ.Controls)
                    {
                        if (c is Label)
                        {
                            Label lbl = (Label)c;
                            taskList.Add(taskFactory.StartNew(() =>
                            {
                                while (isGoon)
                                {
                                    string text = this.GetNum(lbl);//获取num
                                    this.UpdateLbl(lbl, text);//更新界面
                                }
                                Console.WriteLine("线程完成");
                            }));
                        }
                    }
    
                    taskFactory.ContinueWhenAll(taskList.ToArray(), t =>
                    {
                        MessageShow();
                    });
                }
                catch (Exception ex)
                {
                    Console.WriteLine("双色球出现异常:{0}", ex.Message);
                }
            }
    
            /// <summary>
            /// 结束
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnStop_Click(object sender, EventArgs e)
            {
                this.btnStop.Enabled = false;
                this.btnStart.Enabled = true;
                btnStart.Text = "开始";
                this.isGoon = false;
    
            }
    
            /// <summary>
            /// 打印结果
            /// </summary>
            private void MessageShow()
            {
                MessageBox.Show(string.Format("本期双色球结果是 {0} {1} {2} {3} {4} {5}  {6}",
                       lblRed1.Text, lblRed2.Text, lblRed3.Text, lblRed4.Text, lblRed5.Text, lblRed6.Text, lblBlue.Text));
            }
    
            private static object GetNum_Lock = new object();
    
            /// <summary>
            /// 获取num
            /// </summary>
            /// <param name="label"></param>
            /// <returns></returns>
            private string GetNum(Label label)
            {
                Thread.Sleep(1000);//让电脑轻松一点,可以随意切换线程
                if (label.Name.Equals("lblBlue"))
                {
                    return this.BlueNums[new Random().Next(0, this.BlueNums.Length - 1)];//0到15
                }
                else
                {
                    //33选6
                    string text = this.RedNums[new Random().Next(0, this.RedNums.Length - 1)];//0到32
                    lock (GetNum_Lock)
                    {
                        List<string> usedNumList = this.GetUsedNums();
                        while (usedNumList.Contains(text))
                        {
                            text = this.RedNums[new Random().Next(0, this.RedNums.Length - 1)];//0到32
                        }
                        return text;
                    }
    
                }
            }
    
            /// <summary>
            /// 获取当前界面上的球号码
            /// </summary>
            /// <returns></returns>
            private List<string> GetUsedNums()
            {
                List<string> usedNumList = new List<string>();
                foreach (Control c in this.gboSSQ.Controls)
                {
                    if (c is Label && ((Label)c).Name.Contains("Red"))
                    {
                        usedNumList.Add(((Label)c).Text);
                    }
                }
                return usedNumList;
            }
    
            /// <summary>
            /// 更新界面
            /// </summary>
            /// <param name="lbl"></param>
            /// <param name="text"></param>
            private void UpdateLbl(Label lbl, string text)
            {
                if (lbl.InvokeRequired)
                {
                    this.Invoke(new Action(() => lbl.Text = text));//交给UI线程去更新
                }
                else
                {
                    lbl.Text = text;
                }
            }
    
        }
    }
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Ruanmou.Advaned.Lottery
    {
        /// <summary>
        /// 双色球:投注号码由6个红色球号码和1个蓝色球号码组成。
        /// 红色球号码从01--33中选择
        /// 蓝色球号码从01--16中选择
        /// </summary>
        public partial class frmSSQ : Form
        {
            public frmSSQ()
            {
                InitializeComponent();
    
                this.btnStop.Enabled = false;
            }
    
            #region
            /// <summary>
            /// 红球集合
            /// </summary>
            private string[] RedNums =
            {
                "01","02","03","04","05","06","07","08","09","10",
                "11","12","13","14","15","16","17","18","19","20",
                "21","22","23","24","25","26","27","28","29","30",
                "31","32","33"
            };
    
            /// <summary>
            /// 蓝球集合
            /// </summary>
            private string[] BlueNums =
            {
                "01","02","03","04","05","06","07","08","09","10",
                "11","12","13","14","15","16"
            };
    
            private static object Start_Lock = new object();
            private bool IsGoon = true;
            #endregion
    
    
    
            /// <summary>
            /// 点击开始:
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnStart_Click(object sender, EventArgs e)
            {
                try
                {
                    Stopwatch watch = new Stopwatch();
                    watch.Start();
    
                    this.btnStart.Text = "开始ing";
                    this.btnStart.Enabled = false;
                    this.IsGoon = true;
                    this.lblBlue.Text = "00";
                    this.lblRed1.Text = "00";
                    this.lblRed2.Text = "00";
                    this.lblRed3.Text = "00";
                    this.lblRed4.Text = "00";
                    this.lblRed5.Text = "00";
                    this.lblRed6.Text = "00";
                    Thread.Sleep(1000);
    
                    TaskFactory taskFactory = new TaskFactory();
                    List<Task> taskList = new List<Task>();
                    foreach (var item in this.gboSSQ.Controls)
                    {
                        if (item is Label)
                        {
                            Label lable = (Label)item;
                            taskList.Add(taskFactory.StartNew(() =>
                                 {
                                     try
                                     {
                                         while (this.IsGoon)
                                         {
                                             this.ChangeBall(lable);
                                         }
                                     }
                                     catch (Exception ex)
                                     {
                                         Console.WriteLine(ex.Message);
                                     }
                                 }));
                        }
                    }
                    this.btnStop.Enabled = true;
    
                    taskFactory.ContinueWhenAll(taskList.ToArray(), tList =>
                        {
                            watch.Stop();
                            Console.WriteLine("耗时{0}ms", watch.ElapsedMilliseconds);
                            this.ShowResult();
                        });
    
                }
                catch (Exception ex)
                {
                    Console.WriteLine("双色球启动出现异常:{0}", ex.Message);
                }
            }
    
            #region btnStart_Click Private
            /// <summary>
            /// 
            /// </summary>
            /// <param name="lable"></param>
            private void ChangeBall(Label lable)
            {
                Thread.Sleep(1000);//可以把if else 委托出去
                if (lable.Name.Contains("Blue"))
                {
                    int index = this.GetRandom(0, this.BlueNums.Length);
                    string ball = this.BlueNums[index];
                    this.UpdateLable(lable, ball);
                }
                else if (lable.Name.Contains("Red"))
                {
                    //多个线程同时随机在33个数里面取一个,一定是有几率重复的,如果保证不重复:
                    //1 白开水:分6组,线程在组里获取,然后换组:    这里存在作弊
                    //  微笑刺客:换组的时候,重新随机6个组
                    //2 化蝶:把33个数字都随机存到队列中   拿头上的数据,然后放回原来的
                    //3 曾经沧海: 放到数组 lock
                    int index = this.GetRandom(0, this.RedNums.Length);
                    string ball = this.RedNums[index];
    
                    lock (Start_Lock)
                    {
                        List<string> usedNumberList = this.GetUsedRed();
                        if (usedNumberList.Contains(ball))
                        {
                            //被用了就算了
                        }
                        else
                        {
                            this.UpdateLable(lable, ball);
                        }
                    }
                }
    
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <returns></returns>
            private List<string> GetUsedRed()
            {
                List<string> usedNumberList = new List<string>();
                foreach (var lableSSQ in this.gboSSQ.Controls)
                {
                    if (lableSSQ is Label && ((Label)lableSSQ).Name.Contains("Red"))
                    {
                        usedNumberList.Add(((Label)lableSSQ).Text);
                    }
                }
                return usedNumberList;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="lable"></param>
            /// <param name="number"></param>
            private void UpdateLable(Label lable, string number)
            {
                this.Invoke(new Action(() => lable.Text = number));
            }
    
            #endregion btnStart_Click Private
    
            /// <summary>
            /// 点击结束:
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnStop_Click(object sender, EventArgs e)
            {
                this.btnStart.Enabled = true;
                this.btnStop.Enabled = false;
                this.IsGoon = false;
                //this.ShowResult();
    
            }
    
            /// <summary>
            /// 
            /// </summary>
            private void ShowResult()
            {
                MessageBox.Show(string.Format("本期双色球结果为:{0} {1} {2} {3} {4} {5}  蓝球{6}"
                    , this.lblRed1.Text
                    , this.lblRed2.Text
                    , this.lblRed3.Text
                    , this.lblRed4.Text
                    , this.lblRed5.Text
                    , this.lblRed6.Text
                    , this.lblBlue.Text));
            }
    
            #region random 分组
            /// <summary>
            /// 6个list string
            /// </summary>
            /// <returns></returns>
            private List<List<string>> Group()
            {
                List<List<string>> listList = new List<List<string>>()
                {
                    new List<string>(),
                    new List<string>(),
                    new List<string>(),
                    new List<string>(),
                    new List<string>(),
                    new List<string>()
                };
                for (int i = 0; i < this.RedNums.Length; i++)
                {
                    int num = this.GetRandom(0, 1000);
                    int groupNum = num % 6;
                    if (listList[groupNum].Count() == 6)
                        i--;
                    else
                        listList[groupNum].Add(this.RedNums[i]);
                }
                return listList;
            }
            #endregion
    
    
            #region Random 扩展
            /// <summary>
            /// 扩展的random方法
            /// </summary>
            /// <param name="min">可以获取到</param>
            /// <param name="max">可以获取到max-1</param>
            /// <returns></returns>
            private int GetRandom(int min, int max)
            {
                Guid guid = Guid.NewGuid();
                string sGuid = guid.ToString();
                int seed = DateTime.Now.Millisecond;
                for (int i = 0; i < sGuid.Length; i++)
                {
                    switch (sGuid[i])
                    {
                        case 'a':
                        case 'b':
                        case 'c':
                        case 'd':
                        case 'e':
                        case 'f':
                        case 'g':
                            seed = seed + 1;
                            break;
                        case 'h':
                        case 'i':
                        case 'j':
                        case 'k':
                        case 'l':
                        case 'm':
                        case 'n':
                            seed = seed + 2;
                            break;
                        case 'o':
                        case 'p':
                        case 'q':
                        case 'r':
                        case 's':
                        case 't':
                            seed = seed + 3;
                            break;
                        case 'u':
                        case 'v':
                        case 'w':
                        case 'x':
                        case 'y':
                        case 'z':
                            seed = seed + 3;
                            break;
                        default:
                            seed = seed + 4;
                            break;
                    }
                }
                Random random = new Random(seed);
                return random.Next(min, max);
            }
            #endregion
        }
    }
  • 相关阅读:
    转:选择学习“下一个”程序语言
    再谈 Web 字体的现状与未来
    堪称2008年最漂亮的50组图标(上)
    堪称2008年最漂亮的50组图标(下)
    回帖整理: 互联网的未来, 我们的未来, 算一个预告吧, 有空我会把这些观点一一展开
    [回帖整理]创业建议
    也论PageController/FrontController与MVC
    [回帖整理] 创业难
    是否非要用interface关键字来实现接口?
    又论社区风气, 与程序员是干嘛地的.
  • 原文地址:https://www.cnblogs.com/zhengqian/p/8599414.html
Copyright © 2011-2022 走看看