简单说一下 双色球的规则:6 个红球加1个蓝球,红球范围为1到33且不重复,蓝球范围为1到16.一些细节 的问题,一般开双色球的时候,是一个一个开的,且球在不断的跳动,点击一下按钮开一个球。
起初看起来很简单,直接用随机数不就好了?但自己细节做的不够好,便到网上找代码,也是找到了,取出一组随机数且不重复。界面十分简单,就是一个label加上一个button。下面是取出一组不重复的随机数:
public int[] differSamenessRandomNum(int num,int minValue,int maxValue) //num是数组的元素个数,后面两个对应最小值和最大值
{
Random ra=new Random(unchecked((int)DateTime.Now.Ticks));
int[] arrNum=new int[num];
int tmp=0;
for (int i=0;i<=num-1;i++)
{
tmp=ra.Next(minValue,maxValue);
arrNum[i]=getRandomNum(arrNum,tmp,minValue,maxValue,ra);
} return arrNum;
}
public int getRandomNum(int[] arrNum,int tmp,int minValue,int maxValue,Random ra) //保证取得的值不重复
{
int n=0;
while (n<=arrNum.Length-1)
{
if (arrNum[n]==tmp)
{
tmp=ra.Next(minValue,maxValue);
getRandomNum(arrNum,tmp,minValue,maxValue,ra);
}
n++;
}
return tmp;
}
而我在button点击事件里写的代码是这样的:
int[] number = differSamenessRandomNum(6, 1, 33);
for (int i = 0; i < 6; i++)
{
label1.Text += number[i] + " ";
}
Random r = new Random();
int a = r.Next(1,16);
label1.Text += a.ToString();
这样是能输出一组不重复的随机数,但是没办法一个一个输出,因为每次点击得到的随机数组也是不同的。。。没有想到解决办法,于是看看老师写的代码。
public int num = 1; //存储当前所开的球序号,1-6表示红球,7表示蓝球
public string disp = "";//存储当前label上已经开出的号码
private void button1_Click(object sender, EventArgs e)
{
if (timer1.Enabled == false)//如果计时器处于停止状态
{
timer1.Start();
button1.Text = "停止";
if(num<7)
label2.Text = "等待开出第" + num.ToString() + "个红球号码";
else
label2.Text = "等待开出蓝球号码";
}
else//如果计时器处于启动状态
{
timer1.Stop();
button1.Text = "启动";
if (num < 7)
{
disp = label1.Text;//保存当前已开出的号码
num++;//号码加1
}
else if (num >= 7 )
{
disp = "";//已开出号码清零
num = 1;//计数器清零
button1.Text = "重新开始";
label2.Text = "本期双色球中奖号码已经开出:";
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
Random rnd = new Random();
int max=33;//最大号码
string sp = " ";//空格
if (num == 7) { max = 16; sp = " + "; }//如果num=7,开蓝球,最大16,用“+”分隔
string st=rnd.Next(1, max).ToString().PadLeft(2,'0');//随机数,如 1位 则前面加 0
if (num < 7)//红球需要判断是否重复
{
while (disp.IndexOf(st) > -1) st = rnd.Next(1, max).ToString().PadLeft(2, '0');
//判断st是否重复
}
label1.Text = disp + sp + st;
}
他用了timer这个控件,好吧我也不清楚,大致就是start开始stop结束。。并不是直接得到一组不重复的随机数,而是一个一个得到变成字符串加上去,好吧,这样感觉简单明了。
之后他和我说了另一种思路,设置一个数组从1到33,然后第一个开始跳动,停下来是哪个数字,将数组中的那个数字剔除,变成一个新的数组,继续跳动,依次类推,直到6个红球跳完。。我感觉这种实现起来也不错,有时间的话试试吧!
今天我还是先休息吧。免得猝死。。。