c# 福彩双色球号码生成器

简介: 图片:完整代码下载:点此下载 一:通过操作GDI+的不合理的解决方案数字在不断变换的时候重绘    基本上都会让程序当掉或许是我的程序没写好,希望达人指教 Codeusing System;using System.

图片:
img_fe4e4b703f4b95b682a10e1531956a69.jpg
完整代码下载:点此下载

一:通过操作GDI+的不合理的解决方案
数字在不断变换的时候重绘    基本上都会让程序当掉
或许是我的程序没写好,希望达人指教

Code
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace lottery
{
public partial class Form1 : Form
{
private int[] arr = new int[7];
private Font font = new Font("Arial Black", 36);
private Brush brush;
private RectangleF rec = new RectangleF(0, 13, 100, 100);
private StringFormat sf = new StringFormat();
private Control[] controls;
private bool flag = true;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
controls
= new Control[] { num1, num2, num3, num4, num5, num6,num7 };
for (int i = 0; i < 7; i++)
{
controls[i].Paint
+=new PaintEventHandler(num_Paint);
}
sf.Alignment
= StringAlignment.Center;
}
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "stop")
{
flag
= false;
}
if (button1.Text == "start")
{
button1.Text
= "stop";
while (flag)
{
start();
}
}
}
/// <summary>
/// 开始
/// </summary>
private void start()
{
MakeNums();
for (int i = 0; i < 7; i++)
{
if (i == 6)
{
brush
= new SolidBrush(Color.Blue);
}
else
{
brush
= new SolidBrush(Color.Red);
}
Graphics draw
= Graphics.FromHwnd(controls[i].Handle);
draw.Clear(Color.Black);
draw.DrawString(arr[i].ToString(), font, brush, rec, sf);
draw.Dispose();
}
}
/// <summary>
/// 制造号码
/// </summary>
private void MakeNums()
{
Random rand
= new Random();
Hashtable ht
= new Hashtable();
//产生不重复的随机数
int key = 0;
while (ht.Count <= 6)
{
int val = rand.Next(1, 33);
if (!ht.ContainsValue(val))
{ ht.Add(key, val); key
++; }
}
//得到随机数
for (int i = 0; i < 6; i++)
{
arr[i]
= (int)ht[i];
}
//冒泡排序
int temp;
for (int outer = 5; outer >= 0; outer--)
{
for (int inner = 0; inner <= outer - 1; inner++)
{
if (arr[inner] > arr[inner + 1])
{
temp
= arr[inner];
arr[inner]
= arr[inner + 1];
arr[inner
+ 1] = temp;
}
}
}
//制造蓝色球
arr[6] = rand.Next(1, 16);
}
/// <summary>
/// 重绘事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void num_Paint(object sender, PaintEventArgs e)
{
if (arr == null) { return; }
PictureBox pb
= (PictureBox)sender;
int num = Convert.ToInt32(pb.Name.Replace("num", ""))-1;
Graphics draw
= e.Graphics;
draw.Clear(Color.Black);
if (num == 6)
{
brush
= new SolidBrush(Color.Blue);
}
else
{
brush
= new SolidBrush(Color.Red);
}
draw.DrawString(arr[num].ToString(), font, brush, rec, sf);
}
}
}

二:通过Invoke方法把控件实例传入到程序中操作的更合理的方法

Code
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Threading;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace lottery
{
public partial class Form1 : Form
{
private bool flag = true;
delegate void SetTextDelegate(Label label,string text);
private Label[] labels;
private Font font;
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 制造号码
/// </summary>
private int[] MakeNums()
{
int[] arr = new int[7];
Random rand
= new Random();
Hashtable ht
= new Hashtable();
//产生不重复的随机数
int key = 0;
while (ht.Count <= 6)
{
int val = rand.Next(1, 33);
if (!ht.ContainsValue(val))
{ ht.Add(key, val); key
++; }
}
//得到随机数
for (int i = 0; i < 6; i++)
{
arr[i]
= (int)ht[i];
}
//冒泡排序
int temp;
for (int outer = 5; outer >= 0; outer--)
{
for (int inner = 0; inner <= outer - 1; inner++)
{
if (arr[inner] > arr[inner + 1])
{
temp
= arr[inner];
arr[inner]
= arr[inner + 1];
arr[inner
+ 1] = temp;
}
}
}
//制造蓝色球
arr[6] = rand.Next(1, 16);
return arr;
}

private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "start")
{
flag
= true;
button1.Text
= "stop";
ThreadStart TStart
= new ThreadStart(Start);
Thread thread
= new Thread(TStart);
thread.Start();
}
else
{
flag
= false;
button1.Text
= "start";
}
}
private void Start()
{
while (flag)
{ PrintNum(); Thread.Sleep(
88); }
}
private void PrintNum()
{
int[] arr = MakeNums();
for (int i = 0; i < 7; i++)
{
SetTextDelegate mydelegate
= new SetTextDelegate(SetText);
try { Invoke(mydelegate, labels[i], arr[i].ToString()); }
catch { return; }
}
}
private void SetText(Label label, string text)
{
label.Text
= text;
label.TextAlign
= ContentAlignment.MiddleCenter;
label.Font
= font;
if (label.Name == "label7")
{ label.ForeColor
= Color.Blue; }
else
{ label.ForeColor
= Color.Red; }
}

private void Form1_Load(object sender, EventArgs e)
{
labels
= new Label[] { label1, label2, label3, label4, label5, label6, label7 };
font
= new Font("Arial Black",36);
}

}
}

三:用到了timer控件和list的sort方法的  第三种解决方案

 

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif Code
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace SS
{
    
public partial class Form_SS : Form
    {
        
private Label[] cs = null;
        
public Form_SS()
        {
            InitializeComponent();
            cs 
= new Label[] { label1, label2, label3, label4, label5, label6, label7 };
        }

        
private List<int> Create()
        {
            List
<int> t = new List<int>();
            Random ran 
= new Random(unchecked((int) DateTime.Now.Ticks));
            
for (int i = 0, n = ran.Next(134); i < 6; i++)
            {
                
while (t.Exists(delegate(int item) { return item == n; })) n = ran.Next(134);
                t.Add(n);
            }
            t.Sort();
            t.Add(ran.Next(
117));
            
return t;
        }

        
private void btn_Start_Click(object sender, EventArgs e)
        {
            btn_Start.Text 
= (timer1.Enabled = !timer1.Enabled) ? "stop" : "start";
        }

        
private void timer1_Tick(object sender, EventArgs e)
        {
            List
<int> t = Create();
            
for (int i = 0; i < t.Count; i++) cs[i].Text = t[i].ToString();
        }
    }
}


四:通过程序创建窗体的更简单的代码 

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif Code
class Program{static Random r = new Random();
static void Main(string[] args){
Form f 
= new Form { Text="xxxx" };
Button b 
= new Button { Text = "start", Top=50 };
b.Click 
+= delegate(object sender, EventArgs e) { ((Button)sender).Text = ((Button)sender).Text == "stop" ? "start" : "stop"; Do(f); };
f.Controls.AddRange(
new Control[] { b,new Label{ AutoSize = true} });
f.ShowDialog();}
static void Do(Form f){
    
while (f.Controls[0].Text == "stop"){
    List
<int> ns = new List<int>();
    
while (ns.Count != 6) { ns.Add(new Func<intint>(delegate(int t) { while (ns.Contains(t = r.Next(134))); return t;})(1)); }
    ns.Sort();
    f.Controls[
1].Text = string.Format("{0} - {1} - {2} - {3} - {4} - {5} = {6}",ns[0],ns[1],ns[2],ns[3],ns[4],ns[5], r.Next(1,17));
    Application.DoEvents();}}}

 

程序编写过程中得到了  杭州的wisdomqq   上海的aha   的帮助  感激中...

目录
相关文章
|
C#
使用C#实现随机数生成器
在许多编程任务中,我们经常需要生成随机数。C#编程语言提供了用于生成伪随机数的内置类库。本篇博客将介绍如何使用C#来实现一个简单的随机数生成器。
262 0
|
1月前
|
缓存 编译器 API
聊一聊 C#中有趣的 SourceGenerator生成器
【10月更文挑战第1天】SourceGenerator 是 C# 中的一项强大功能,允许在编译时动态生成源代码,减少手动编写重复代码的工作量,并可在编译时进行优化和错误检查。它与 Roslyn 编译器紧密集成,可根据预定义逻辑生成新代码。应用场景包括自动生成接口实现和优化计算逻辑等。虽然能显著提升生产力和代码一致性,但开发和调试 SourceGenerator 本身较为复杂,维护成本较高。
|
算法 C#
开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器
原文:【原创】开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器                本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 开源Math.NET基础数学类库使用总目录:http://www.cnblogs.com/asxinyu/p/4329737.html 前言   真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。
745 0
|
C# 自然语言处理 C++
C#版二维码生成器附皮肤下载
原文 C#版二维码生成器附皮肤下载 前言   本文所使用的二维码生成代码是谷歌开源的条形码图像处理库完成的,c#版的代码可去https://code.google.com/p/zxing/downloads/list下载压缩包。
1134 0
|
6月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
188 3
|
4天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
16 3
|
25天前
|
安全 C# 数据安全/隐私保护
实现C#编程文件夹加锁保护
【10月更文挑战第16天】本文介绍了两种用 C# 实现文件夹保护的方法:一是通过设置文件系统权限,阻止普通用户访问;二是使用加密技术,对文件夹中的文件进行加密,防止未授权访问。提供了示例代码和使用方法,适用于不同安全需求的场景。