吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4695|回复: 15
收起左侧

[其他转载] 【笔记】C# 实现简单的抽人程序

[复制链接]
hack_hu 发表于 2019-1-4 19:46

抽人程序介绍

代码以及应用程序链接

用 C# 制作了一个抽人的 Windows 小程序。

控件部分 : TextBoxt 作为展示 、两个 Button 作为按钮 (抽一次、换文件)、label 作为信息提示、openFileDialog 控件来打开文本、timer 计时器用来计时定时结束。

功能 : 可以切换不同的 Txt 文件作为抽取的数据源(需要将抽取项单独为一行),每点击一次 “ 抽一次 ” 按钮 文本框中都会切换不同的抽取人,在 1 秒后自动停止显示随机抽取到的人,实现了无重复、随机抽取的功能。
程序界面

能否暗箱操作?

自己写完一个抽奖小程序后就应该很难相信抽奖的真实性,根据代码分析。

private void timer1_Tick(object sender, EventArgs e)//计时器启动
        {
            i++;length++;//获取计时器启动时间
            if (arry.Count <= 0)
            {
                timer1.Stop();
                MessageBox.Show("目前无人可抽,请重新选择文件", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                if (length >= arry.Count - 1)
                    length = 0;
                textBox1.Text = arry[length];
                if (i == 10)//当 i 等于 10 说明已经经过了一秒 每 100 毫秒执行一次事件 timer1_Tick
                {
                    int tempNum = rdm.Next(0, arry.Count - 1);//在数组有效索引范围内取随机数
                    textBox1.Text = arry[tempNum];//修改 1 秒 时间到时,显示的抽中人姓名
                    arry.RemoveAt(tempNum);//移除已抽中人
                    i = 0;
                    timer1.Stop();//停止 timer1_Tick 事件
                }
            }

        }

从 17 行代码 textBox1.Text = arry[tempNum] 可见最终显示结束时展示的姓名或奖品是可以修改或指定的。

现实生活中的所有抽奖,机器博彩大体都是这种套路,在我们相信下一次就能人品爆棚,化身锦鲤时,最终的结果早已被人指定。

是在互联网时代,一起玩游戏的是人还是狗都无法确认了,又怎能相信纯粹以道德来约束的抽奖呢?

玩游戏的狗

如何实现切换不同的文件

借助于 C# 窗体提供的 openFileDialog 控件,对文件进行读取和过滤,当选中新文件后将 fileName 变量改变成新文件的路径,在重新抽取时读取新的数据源。

private void button2_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "(*.txt)|*.txt";//对文件过滤只显示文件夹以及 .txt后缀文件
            if (openFileDialog1.ShowDialog() == DialogResult.OK)//将文件打开的界面显示,且是否选中了文件
            {
                fileName = openFileDialog1.FileName;
                readTxt();//自定义的文本读取函数
            }
        }

readTxt() 函数的具体实现

通过 StreamReader 类读取 txt 文档,以 「 GB2312 」的编码格式打开,ReadLine 逐行读取,并添加至 List, 当所读取的那一行数据为 null 即读到数据尾部时,停止读取,并关闭数据连接。

public void readText()
        {
            i = 0; length = 0;
            arry = new List<string>();// arry 是 List<string> 类型,在每次调用 readText() 方法时初始化内存,即清空之前的内容
            rdr = new StreamReader(fileName,UnicodeEncoding.GetEncoding("GB2312"));
            string line;
            while ((line = rdr.ReadLine() )!= null)
            {
                arry.Add(line);
            }
            rdr.Close();
        }

抽一次按钮代码

 private void button1_Click(object sender, EventArgs e)//抽一次按钮功能
        {
            timer1.Stop();/
            timer1.Start();

        }

初始定义

        StreamReader rdr;
        Random rdm = new Random();
        int i = 0, length = 0;
        List<string> arry;
        string fileName = "RandomPerson.txt";

随机数的产生

C# Random 类的定义,采用伪随机数生成器生成随机数。有兴趣的朋友可以自行查找定义,原理是 「 线性同余 」,当 Random 对象的实例化和随机数的产生在同一代码时,很有可能随机产生的数字相同,因为在伪随机数器生成随机数时采用了相同的 「 种子值 」。
<center>维基百科参考</center>

线性同余方法维基百科

<center>引申 C# Random 类定义</center>

        // 摘要:
        //     使用与时间相关的默认种子值,初始化 System.Random 类的新实例。
        public Random();
        //
        // 摘要:
        //     使用指定的种子值初始化 System.Random 类的新实例。
        //
        // 参数:
        //   Seed:
        //     用来计算伪随机数序列起始值的数字。如果指定的是负数,则使用其绝对值。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| hack_hu 发表于 2019-1-5 09:29
450046181 发表于 2019-1-4 21:21
要是C++多好,可惜我还没有学C#呢

C# 比 C++ 好上手多了,做类程序的原理是一样的,一个计时器用来做名字的轮播,触发一定条件时停止计时器,让随机产生的名字(也可以是自己内定的名字)显示出来。
ruphay 发表于 2019-1-5 22:43
shan999abc 发表于 2019-1-5 09:31
转行毛线,c#,.net在国内需求比较少

我做Unity3D游戏开发的。。。之前用LibGDX开发,基于java,出了bug根本没辙,连个求助的帖子都没人理。
 楼主| hack_hu 发表于 2019-1-4 19:47
链接为上传到码云的代码,如有需要可以留言,我上传到百度云
vp52001 发表于 2019-1-4 20:01
可以 不错  谢谢分享
ruphay 发表于 2019-1-4 20:06
学习了,正准备转行c#,感谢分享
z7406 发表于 2019-1-4 20:41
不错  谢谢分享
 楼主| hack_hu 发表于 2019-1-4 20:48
ruphay 发表于 2019-1-4 20:06
学习了,正准备转行c#,感谢分享

可以推荐你一本书《C# 图解教程》
头像被屏蔽
Wise_58 发表于 2019-1-4 21:19
提示: 作者被禁止或删除 内容自动屏蔽
450046181 发表于 2019-1-4 21:21
要是C++多好,可惜我还没有学C#呢
wangyujie96 发表于 2019-1-4 21:29
我以为抽是那个意思、、、、、、、
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-30 05:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表