昨天实验室里让抽出两个幸运儿负责运维服务器(众所周知这个活是又累又没劲),于是顺手写了一个小程序,实现抓阄。
首先第一步是做一下初始页面:
输入之后就让第一个人来点就好了:
然后抓到了就弹窗说你运气太好了这都被抓到了 ;抓不到就切换回原来的窗口,显示让第2个来抓。
实现起来不难(因为是做着玩的,所以变量都是随便定义的,将就看吧):
//上面第一个界面点按时的触发
private void button1_Click(object sender, EventArgs e)
{
int a, b;
int.TryParse(textBox1.Text, out a);
int.TryParse(textBox2.Text, out b);
b_ch = b;
a_ch = a;
int[] index = new int[100];
for (int i = 0; i < a; i++)
index[i] = i;
Random r = new Random();
//用来保存随机生成的不重复的数
int site = a;//设置上限
int id;
for (int j = 0; j < b; j++)
{
id = r.Next(1, site - 1);
//在随机位置取出一个数,保存到结果数组
result[j] = index[id];
//最后一个数复制到当前位置
index[id] = index[site - 1];
//位置的上限减少一
site--;
}
this.Hide();
Form2 f = new Form2();
for (int i = 0; i < a; i++)
{
f.ShowDialog();
ap++;
}
this.Close();
}
//上面第二个界面的按钮触发时发生的
private void button1_Click(object sender, EventArgs e)
{
int ap = Form1.ap+1;
int perd = 1;
int bh = Form1.b_ch;
int[] ch = Form1.result;
this.Hide();
label4.Text = Convert.ToString(ap);
for(int i = 0; i < bh; i++)
{
if (ch[i]==ap-1)
{
perd = 0;
Form3 fd = new Form3();//和前面生成的随机数匹配,抓到了
fd.ShowDialog();
break;
}
else
continue;
}
if(perd == 1)
{
Form4 fd = new Form4();//没有匹配到,说明没有被抓到
fd.ShowDialog();
}
}
public Form2()
{
int ap = Form1.ap;
InitializeComponent();
label4.Text = Convert.ToString(ap);//显示第?个抓阄者
}
最近用的时候发现一个问题,就是如果抓了一半不想玩了直接强行关闭会发生bug,所以还得加入一个“不想抓了”按钮,但是懒得弄了,反正已经抓完了(我还被抓到了,f**k)。
不过作为自己做的第一个c#程序,感觉还不错,又学了一门语言。
最后是一个没解决的问题:本来我想把生成的exe打包成一个安装程序,但是打包完后执行安装后只安装了一个dll文件,不知道有没有大佬能帮忙解决一下哈哈。