本人新手一枚,想用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();

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

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

...全文
667 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
  • 打赏
  • 举报
回复
内容概要:本文围绕“非线性流量的数据驱动Koopman模型预测控制研究”展开,提出一种基于数据驱动的Koopman算子理论方法,用于构建非线性系统的线性化状态空间模型,并结合模型预测控制(MPC)实现对复杂非线性系统的高效控制。研究通过引入扩展动态模态分解(EDMD)等观测函数,将非线性动力学映射至高维特征空间,在该空间中实现近似线性化表征,进而融合线性MPC框架进行优化求解。全文系统阐述了Koopman算子的数学基础、隐式线性化机制及在非线性流量控制中的建模流程,并通过Matlab代码完成了算法实现与仿真实验,验证了该方法在处理无精确物理模型、强非线性、时变动态系统中的有效性与鲁棒性,尤其适用于工业流程控制、能源系统调度等实际工程场景。; 适合人群:具备自动控制理论、非线性系统分析基础,熟悉Matlab编程,从事控制工程、系统辨识、智能优化、能源系统建模等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于难以建立精确数学模型的复杂非线性系统(如流体动力系统、电力电子系统、机器人动力学等)的建模与实时控制;②实现数据驱动下的模型预测控制,提升系统响应速度与控制精度;③为先进控制策略(如MPC)提供一种可行的线性化建模范式,推动现代控制理论与数据科学、机器学习的深度融合。; 阅读建议:建议读者结合提供的Matlab代码深入理解Koopman方法的具体实现过程,重点关注观测函数构造、核函数选择、矩阵逼近、降维处理及MPC控制器设计等关键技术环节,并尝试将其迁移至其他非线性系统中进行复现实验与性能对比,以全面掌握其适用范围与局限性。
内容概要:本文详细介绍了一种基于Simulink的光伏储能单相逆变器并网仿真模型,系统涵盖了光伏阵列、储能单元、DC-AC单相逆变器及并网接口的完整结构,重点实现了储能环节的能量管理与逆变器并网控制策略的建模仿真。通过Simulink平台构建系统模型,验证了逆变器输出电能质量、并网稳定性以及控制系统的动态响应性能,采用SPWM调制、PI闭环控制等关键技术,确保并网电流与电网电压同频同相,满足并网电能质量要求。该模型不仅可用于分布式能源系统的仿真研究,还可作为新能源并网技术的教学与工程实践工具。; 适合人群:电气工程、自动化、新能源科学与工程等相关专业的高校本科生、研究生、科研人员,以及从事光伏发电系统设计、储能控制与并网技术研发的工程技术人员。; 使用场景及目标:①深入理解光伏储能系统中能量转换、存储与并网控制的整体工作原理;②支持课程设计、毕业设计或科研项目中对单相逆变器控制策略(如SPWM、PI调节、锁相技术等)的仿真验证与参数优化;③为后续研究更复杂的控制算法(如MPPT、低电压穿越、谐波抑制等)提供可扩展的仿真基础平台。; 阅读建议:建议结合MATLAB/Simulink环境动手搭建与调试模型,逐步理解各模块(如光伏建模、储能充放电控制、逆变器驱动、锁相环、PI调节器等)的功能与交互关系,重点关注控制系统的设计逻辑与参数整定过程,并可通过修改负载条件或电网参数测试系统鲁棒性,为进一步拓展至三相系统或多机并网场景奠定基础。

111,131

社区成员

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

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

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