大乐透自动选号软件
闲来无事,写一个C#(winform)实现的自动选号软件,功能如下:
用户可以在run按钮上方的输入框中,输入重复次数,比如1000,则软件会重复1000次生成5红加2蓝的号码,倒计时为0时自动停止。
主要用到的随机数生成函数。代码如下:
private int getNum(int[] buf, int flag)
{
byte[] byteCsp = new byte[10];
int temp_int;
while (true)
{
RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();
csp.GetBytes(byteCsp);
temp_int = (int)byteCsp[9];
if (flag == 0)//红球
{
if (temp_int > 0 && temp_int <= 35)
{
int id = Array.IndexOf(buf, temp_int);
if (id == -1)
{
return temp_int;
}
}
}
else if(flag == 1)//篮球
{
if (temp_int > 0 && temp_int <= 12)
{
int id = Array.IndexOf(buf, temp_int);
if (id == -1)
{
return temp_int;
}
}
}
}
}
private void button1_Click(object sender, EventArgs e)
{
long time = 0;
long count = 1000;
long.TryParse(textBox8.Text, out count);
Task task = new Task(() => {
int[] red = new int[5];
int[] blue = new int[2];
for(int i=0; i< count; i++)
{
time += i;
}
for (int i = 0; i < count; i++)
{
for (int j = 0; j < 5; j++)
{
red[j] = getNum(red, 0);
}
for (int k = 0; k < 2; k++)
{
blue[k] = getNum(blue, 1);
}
this?.BeginInvoke((EventHandler)(delegate
{
textBox1.Text = red[0].ToString();
textBox2.Text = red[1].ToString();
textBox3.Text = red[2].ToString();
textBox4.Text = red[3].ToString();
textBox5.Text = red[4].ToString();
textBox6.Text = blue[0].ToString();
textBox7.Text = blue[1].ToString();
time -= i;
button1.Text = "run " + time;
}));
Thread.Sleep(i%5);
}
Array.Sort(red);
Array.Sort(blue);
this?.BeginInvoke((EventHandler)(delegate
{
textBox1.Text = red[0].ToString();
textBox2.Text = red[1].ToString();
textBox3.Text = red[2].ToString();
textBox4.Text = red[3].ToString();
textBox5.Text = red[4].ToString();
textBox6.Text = blue[0].ToString();
textBox7.Text = blue[1].ToString();
button1.Text = "run";
}));
});
task.Start();
}