当前位置: 首页 > news >正文

c#用winform开发一个简易双色球项目

开始画面

抽奖中:

 

抽奖结果:

 

需要一个随机数Random的帮助类,让随机数唯一性

  public  class RandomHelper
    {

        public int GetNum(int min, int max)
        {
            Thread.Sleep(1000);//随机休息1秒
            return GetIntNum(min,max);
        }

        /// <summary>
        /// 获取随机数,解决重复问题
        /// </summary>
        /// <param name="min">返回的随机数字包含下限</param>
        /// <param name="max">返回的随机数字不包含上限</param>
        /// <returns></returns>
        private  int GetIntNum(int min,int max)
        {
            
            Guid Guidnum = Guid.NewGuid();
            string guid =  Guidnum.ToString();
            int seed = DateTime.Now.Millisecond;
            for (int i = 0; i < guid.Length; i++)
            {
                switch (guid[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 + seed;
                        break;
                    case 'u':
                    case 'v':
                    case 'w':
                    case 'x':
                    case 'y':
                    case 'z':
                        seed = seed + 3;
                        break;
                    default:
                        seed = seed + 4;
                        break;
                }
            }


            return new Random(seed).Next(min,max);
            
        }

 

Form的 代码编写

先要放2个

  public Form1()
        {
            InitializeComponent();
            IsBegin = true;
            this.btnEnd.Enabled = false;
        }
        /// <summary>
        /// 标识是否开始摇奖
        /// </summary>
        private static bool IsBegin = true;

        private string[] RedNum = {
            "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"
        };
        private string[] BuleNum = {
            "01","02","03","04","05","06","07","08","09","10","11","12","13",
            "14","15","16"
        };

        private void btnStart_Click(object sender, EventArgs e)
        {
            TaskFactory taskFactory = new TaskFactory();
            List<Task> taskList = new List<Task>();
            IsBegin = true;
            this.btnStart.Enabled = false;

           // Thread.Sleep(1000);
            this.btnEnd.Enabled = true;
            foreach (Control item in gBox.Controls)
            {
                if (item is Label)
                {
                    Label lbl = (Label)item;
                    taskList.Add(taskFactory.StartNew(
                     () => {
                         while (IsBegin)
                         {
                             this.UpdateNum(lbl);
                         }
                         
                     }));
                }
            }
            taskFactory.ContinueWhenAll(taskList.ToArray(),tList=>this.ShowNumber());//等所有线程操作完毕后才显示中奖号。
          
        }
        /// <summary>
        ////// </summary>
        private static readonly object Num_Lock = new object();
        
        private void UpdateNum(Label lbl)
        {
            RandomHelper randomHelper = new RandomHelper();

            if (lbl.Name.Contains("Blue"))
            {
                int num = randomHelper.GetNum(0,16);
                string blueText = BuleNum[num];
                this.UpdateLbl(lbl, blueText);
            }
            else 
            {
                int num = randomHelper.GetNum(0, 33);
                string redText = RedNum[num];
                lock (Num_Lock)
                {
                    List<string> list = this.GetLabelList();
                    if (list.Contains(redText))
                    {
                        return;
                    }
                    else
                    {
                        this.UpdateLbl(lbl,redText);
                    }
                }
            }
        }
        /// <summary>
        /// 获取当前已经抽出的双色球,防止重复
        /// </summary>
        /// <returns>所有控件的值</returns>
        private List<string> GetLabelList()
        {
            List<string> strList = new List<string>();
            foreach (Control item in gBox.Controls)
            {
                if (item is Label)
                {
                    Label label = (Label)item;
                    strList.Add(label.Text);
                }
            }
            return strList;
        }
        /// <summary>
        /// 通过主线程修改UI
        /// </summary>
        /// <param name="lbl">修改的Label</param>
        /// <param name="text">修改的值</param>
        private void UpdateLbl(Label lbl, string text)
        {
            if (lbl.InvokeRequired)
            {
                this.Invoke(new Action(() =>
                {
                    lbl.Text = text;
                    //Thread.Sleep(2000);
                    //Console.WriteLine($"当前UpdateLbl线程id{Thread.CurrentThread.ManagedThreadId}");
                }));//交给UI线程去更新
            }
            else
            {
                lbl.Text = text;
            }
        }
        /// <summary>
        /// 结束抽奖,开奖
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnEnd_Click(object sender, EventArgs e)
        {

            if (!this.GetLabelList().Contains("00"))
            {
                IsBegin = false;
                this.btnEnd.Enabled = false;
                this.btnStart.Enabled = true;

            }
            else
            {
                MessageBox.Show("请慢一点,稍后再试");
            }
            
           
        }

        private void ShowNumber()
        {
            MessageBox.Show(string.Format("本期双色球结果是 {0} {1} {2} {3} {4} {5}  {6}",
                  lbRed1.Text, lbRed2.Text, lbRed3.Text, lbRed4.Text, lbRed5.Text, lbRed6.Text, lbBlue.Text));
        }
    }

 

转载于:https://www.cnblogs.com/Rookieflying/p/10447879.html

相关文章:

  • 微信小程序设置上一页数据
  • Java教程_软件开发基础
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • spring cloud构建互联网分布式微服务云平台-消息总线
  • Android之Window与WindowManager
  • Linux 抓包工具 tcpdump
  • Linux CTF 逆向入门
  • Choerodon 猪齿鱼 0.14 发布,开源企业级数字化服务平台
  • 网络应用优化——时延与带宽
  • nginx、tomcat调优方向及压测网站步骤
  • Python组织文件 实践:将带有美国风格日期的文件改名为欧洲风格日期
  • 聚合查询, 分组查询,F查询,Q查询
  • [面试题记录01]实现一个function sum达到一下目的
  • 你和大神之间只差一个高效工具
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • Effective Java 笔记(一)
  • Golang-长连接-状态推送
  • GraphQL学习过程应该是这样的
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Lsb图片隐写
  • Service Worker
  • Web Storage相关
  • 从伪并行的 Python 多线程说起
  • 从重复到重用
  • 离散点最小(凸)包围边界查找
  • 扑朔迷离的属性和特性【彻底弄清】
  • 使用 Docker 部署 Spring Boot项目
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # Maven错误Error executing Maven
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (13):Silverlight 2 数据与通信之WebRequest
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (SpringBoot)第七章:SpringBoot日志文件
  • (二)c52学习之旅-简单了解单片机
  • (分享)自己整理的一些简单awk实用语句
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • ./和../以及/和~之间的区别
  • .net 8 发布了,试下微软最近强推的MAUI
  • .net framework4与其client profile版本的区别
  • .NET 药厂业务系统 CPU爆高分析
  • .NET 依赖注入和配置系统
  • .net/c# memcached 获取所有缓存键(keys)
  • /bin/bash^M: bad interpreter: No such file or directory
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @EventListener注解使用说明
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • @软考考生,这份软考高分攻略你须知道
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [AIGC] 开源流程引擎哪个好,如何选型?