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));
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM