本人新手一枚,想用C#窗体写一个双色球的游戏,请高手们指点指点~~

南京城某君 2014-05-08 02:23:11
//用于存放1到33这33个
List<int> container = new List<int>(33);
List<int> result = new List<int>(6);
//定义抽奖次数,双色球6+1
int j = 1;
int count = 0;
public void Award()
{

count++;
if (count == 7)
{
sorkAward();
MessageBox.Show("本期开奖结束!");
this.btnAward.Enabled = false;
}
}

//初始化数组
public void InitArray()
{


for (int i = 1; i < 33; i++)
{
container.Add(i);
}
}
public void RedRandom()
{
Random rd = new Random();
//随机生成蓝球
Random rdblue = new Random();
int mathblue = rdblue.Next(1, 12);
int index = 0;
int value = 0;
//从[0,container.Count]中取一个随机值,保证这个值不会超过container的元素个数
index = rd.Next(0, container.Count);
value = container[index];
container.RemoveAt(index);
//遍历所有文本框
foreach (Control c in Controls)
{

//判断类型为TextBox
if (c is TextBox)
{
if (c.Name == "txt1" && txt1.Text == "")
{
this.txt1.Text = value.ToString();
this.txt2.Text = "";
this.txt3.Text = "";
this.txt4.Text = "";
this.txt5.Text = "";
this.txt6.Text = "";
this.txtBlue.Text = "";

}
else if (c.Name == "txt2" && txt2.Text == "")
{

this.txt2.Text = value.ToString();
this.txt3.Text = "";
this.txt4.Text = "";
this.txt5.Text = "";
this.txt6.Text = "";
this.txtBlue.Text = "";
}
else if (c.Name == "txt3" && txt3.Text == "")
{
this.txt3.Text = value.ToString();
this.txt4.Text = "";
this.txt5.Text = "";
this.txt6.Text = "";
this.txtBlue.Text = "";
}
else if (c.Name == "txt4" && txt4.Text == "")
{
this.txt4.Text = value.ToString();
this.txt5.Text = "";
this.txt6.Text = "";
this.txtBlue.Text = "";
}
else if (c.Name == "txt5" && txt5.Text == "")
{
this.txt5.Text = value.ToString();
this.txt6.Text = "";
this.txtBlue.Text = "";
}
else if (c.Name == "txt6" && txt6.Text == "")
{
this.txt6.Text = value.ToString();
this.txtBlue.Text = "";
}
else if (c.Name == "txtBlue" && txtBlue.Text == "")
{
this.txtBlue.Text = mathblue.ToString();
}
}
}
result.Add(value);
container.RemoveAt(index);
}
//点击出奖
private void button1_Click(object sender, EventArgs e)
{
j++;
RedRandom();
Award();

}
//下期开奖
private void button2_Click(object sender, EventArgs e)
{
//初始化数组

InitArray();
count = 0;
foreach (Control c in Controls)
{
if (c is TextBox)
{
c.Text = "";
}
}
this.btnAward.Enabled = true;
}
//开奖后排序,如何依次对文本框赋值?
public void sorkAward() {
result.Sort();

}
}
---------------------------------------------------------
问题一:如何排序生成的中奖号码并显示在文本框内

问题二:如何生成不重复的随机数

...全文
611 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_36538092 2016-12-02
  • 打赏
  • 举报
回复
楼主 能把你写好的发给我一份么 本人小白 写到一半不会了 我的qq邮箱1090554414
智商余额不足 2014-05-08
  • 打赏
  • 举报
回复
引用 14 楼 Z65443344 的回复:
我只是链接的搬运工 http://bbs.csdn.net/topics/390780596
南京城某君 2014-05-08
  • 打赏
  • 举报
回复
祝所有做程序的彩民早日中彩,脱离苦海~
南京城某君 2014-05-08
  • 打赏
  • 举报
回复
引用 15 楼 diaodiaop 的回复:

var red = string.Join("-", Enumerable.Range(1, 33).OrderBy(x => Guid.NewGuid()).Take(6).Select(d => d.ToString()).ToArray());
var blue = string.Join("-", Enumerable.Range(1, 16).OrderBy(x => Guid.NewGuid()).Take(1).Select(d => d.ToString()).ToArray());
MessageBox.Show("本期开奖结果如下红球="+red+"篮球="+blue);


谢谢你帮我做了随机选票功能~~~佩服佩服,两行代码很简练
南京城某君 2014-05-08
  • 打赏
  • 举报
回复
引用 12 楼 Z65443344 的回复:
两种做法, 1.假设你现在有1个数组A,里面装的是随机抽取的结果 每次随机出一个数,先遍历一下A,看有没有,有就取这个数+1,再重复判断有没有,有就再+1,直到>33则从1再判断,直到6次都没找到就可以结束了(反正A里最多就6个数) 2.定义个list或者arraylist A,数组B A里放1-33,B是结果 第1次取值范围0-32,第2次取0-31,以后每次取值比前一次减1 取到的数并不是最终你要的数,而是A的索引,对应这个位置的数才是你要的数,这个是可以一次性取出不重复的数,不必再去遍历判断了.
谢谢各位捧场,我已经做出来了~
by_封爱 版主 2014-05-08
  • 打赏
  • 举报
回复

var red = string.Join("-", Enumerable.Range(1, 33).OrderBy(x => Guid.NewGuid()).Take(6).Select(d => d.ToString()).ToArray());
var blue = string.Join("-", Enumerable.Range(1, 16).OrderBy(x => Guid.NewGuid()).Take(1).Select(d => d.ToString()).ToArray());
MessageBox.Show("本期开奖结果如下红球="+red+"篮球="+blue);


於黾 2014-05-08
  • 打赏
  • 举报
回复
哦,忘记说,方法2里,每次取到数后,要将list里响应项remove掉,这样保证再也取不到相同的数了
於黾 2014-05-08
  • 打赏
  • 举报
回复
方法1有个原始版本,就是每次随机取一个数,如果有,就再随机去取,直到取出一个没有的为止 不过考虑到可能连续取不到不同的数,代码执行时间不是很确定,有可能你一下就取出来,也有可能取了10次也取不出来. 所以我在12楼说的方法是这个方法的变种. 比如你去取10,发现10已经拿走了,不用再重头来,就拿下一个11好了.
於黾 2014-05-08
  • 打赏
  • 举报
回复
两种做法, 1.假设你现在有1个数组A,里面装的是随机抽取的结果 每次随机出一个数,先遍历一下A,看有没有,有就取这个数+1,再重复判断有没有,有就再+1,直到>33则从1再判断,直到6次都没找到就可以结束了(反正A里最多就6个数) 2.定义个list或者arraylist A,数组B A里放1-33,B是结果 第1次取值范围0-32,第2次取0-31,以后每次取值比前一次减1 取到的数并不是最终你要的数,而是A的索引,对应这个位置的数才是你要的数,这个是可以一次性取出不重复的数,不必再去遍历判断了.
iceMung 2014-05-08
  • 打赏
  • 举报
回复
引用 10 楼 wg5945 的回复:
[quote=引用 7 楼 iceMung 的回复:]
            IEnumerable<int> six = Enumerable.Range(1, 32).OrderBy(x => Guid.NewGuid()).Take(6);
            int one = Enumerable.Range(1, 32).Where(x => !six.Contains(x)).OrderBy(x => Guid.NewGuid()).First();
int one = Enumerable.Range(1, 12).Where(x => !six.Contains(x)).OrderBy(x => Guid.NewGuid()).First();[/quote] 第一个32->33,还是被发现了 没买过彩票~
wg5945 2014-05-08
  • 打赏
  • 举报
回复
引用 7 楼 iceMung 的回复:
            IEnumerable<int> six = Enumerable.Range(1, 32).OrderBy(x => Guid.NewGuid()).Take(6);
            int one = Enumerable.Range(1, 32).Where(x => !six.Contains(x)).OrderBy(x => Guid.NewGuid()).First();
int one = Enumerable.Range(1, 12).Where(x => !six.Contains(x)).OrderBy(x => Guid.NewGuid()).First();
南京城某君 2014-05-08
  • 打赏
  • 举报
回复
引用 7 楼 iceMung 的回复:
            IEnumerable<int> six = Enumerable.Range(1, 32).OrderBy(x => Guid.NewGuid()).Take(6);
            int one = Enumerable.Range(1, 32).Where(x => !six.Contains(x)).OrderBy(x => Guid.NewGuid()).First();
我去研究下
南京城某君 2014-05-08
  • 打赏
  • 举报
回复
引用 6 楼 u013789247 的回复:
list集合装产生的随机数,再循环集合里的数,如果重复,则产生下一个随机数,当集合数字为6个则跳出
你的意思是点一次按钮,直接生成6个不同的数字,这个确实好做。不过我是想点一次出一个数,点六次数字才出完,后者做的话稍微有点复杂
iceMung 2014-05-08
  • 打赏
  • 举报
回复
            IEnumerable<int> six = Enumerable.Range(1, 32).OrderBy(x => Guid.NewGuid()).Take(6);
            int one = Enumerable.Range(1, 32).Where(x => !six.Contains(x)).OrderBy(x => Guid.NewGuid()).First();
宇哥_ 2014-05-08
  • 打赏
  • 举报
回复
list集合装产生的随机数,再循环集合里的数,如果重复,则产生下一个随机数,当集合数字为6个则跳出
南京城某君 2014-05-08
  • 打赏
  • 举报
回复
将33个数字放入集合里,出现一个随机数就从集合里扣除,可是测试几次后发现还是有重复的。。
南京城某君 2014-05-08
  • 打赏
  • 举报
回复
可是怎么实现呢
南京城某君 2014-05-08
  • 打赏
  • 举报
回复
代码不够精简,不过目前没工夫管这么多了,第一要义是要实现功能哇
Justin-Liu 2014-05-08
  • 打赏
  • 举报
回复
1. 放在集合里,有排序方法 2. 想要不重复,就判断出哪个已经选过了
南京城某君 2014-05-08
  • 打赏
  • 举报
回复

111,079

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧