1:游戏要求

1. 随机显示 一个名字 与 若干张相片(如3张)。选择正确的相片。

2. 记录老师对每一个学生的认识概率P。并依据认识概率,确定“猜猜看”游戏中学生出现的频率。

认识概率P = 识别的准确次数/(识别的准确次数+识别的错误次数

a)   原则1:认识概率 高的学生,在猜猜看游戏中出现的频率相对低一些。

b)   原则2:认识概率 低的学生。在猜猜看游戏中出现的频率相对高一些。

c)   原则3:认识概率 100%的学生。也有出现的可能性。

d)   原则4:认识概率 0%的学生,也不必每次都出现。

请设计一个算法来实现上述原则。

3. 实现课堂考勤的功能,可以依据相片与姓名对部分学生进行考勤(设置一个比例。如考勤30%,50%等)。设置可以设计一个算法。类似于目标3,既有随机性,同一时候每一个学生的考勤频率有差异(依据之前考勤的经验)。

2、设计描写叙述:

此系统为猜猜看游戏兼考勤系统

採用了windows窗口界面设计创建了此系统。

系统功能包含:

1、从已设置的学生编号中随机抽取3个编号。并随机显示这三个学生的相片。

2、在设定的文本文件里选取被选中的学生的信息。

2、记录某一个学号每次被猜的信息及被点名信息。

3、显示当前被点学号的被猜和被点的信息,以及全部同学被猜和被点信息。

4、每个同学最多被点三次,当被点次数超过3时,显示警告窗体,提示用户

又一次点名。

5.每次猜对或猜错总数超过10。显示窗体信息,游戏自己主动结束。

3、系统具体设计——控件选取:

1、listBox1:用来存放及显示全部同学被点信息。

2、Button1:就是開始点名button。用来控制随机抽数。当点下開始button,其会变成停止button,按下停止button。显示终于被选中的编号和显示选中的学生相片。

3、Button2:就是用来显示当前被点同学的被点情况。

4、Button3:就是重置button,用来清除listBox1中的数据信息。

5、Button4:就是显示listBox1中记录的全部同学被点情况。

6、timer1:用来控制抽取过程中数据在空白处闪动。

7、label1:用来显示被选编号和学生信息。

8、label2:用来显示猜对的总次数。

9、label3:用来显示猜错的总次数。

10、label4:用来显示游戏名字“猜猜看” 。

11、label5:用来显示编号、个人被点总次数、个人被猜对总次数、个人被猜错总次数的文段。

12、pictureBox1:用来显示arry1[i]数组的图片。

13、pictureBox2:用来显示arry2[i]数组的图片。

14、pictureBox3:用来显示arry3[i]数组的图片。

15、imageList1:用来存储和显示相片

4、系统具体设计——代码实现:

1.timer1事件:控制随机选取学号编号,为每个存储相片的数组抽取一个随机数。并在选出的编号中再随机选取一个编号,作为被猜的编号,同一时候在已创建的文件里。相相应的读取编号相应的学号的信息。

private void timer1_Tick(object sender, EventArgs e)
{
long tick = DateTime.Now.Ticks;
Random ran = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
for (int i = 0; i < arry1.Length && i < arry2.Length && i < arry3.Length; i++)
{
arry1[i] = ran.Next(0, imageList1.Images.Count-1 );
arry2[i] = ran.Next(0, imageList1.Images.Count-1 );
arry3[i] = ran.Next(0, imageList1.Images.Count-1 );
int[] ary = new int[3] { arry1[i], arry2[i], arry3[i] };
d = r.Next(0, 2);
x = ary[d];
num = ary[d].ToString();
// p = (double)c1[x] / (c1[x] + c2[x]);
string[] line = File.ReadAllLines(@"C:\Users\Administrator\Desktop\c#\a.txt", UnicodeEncoding.GetEncoding("GB2312"));
label1.Text = "编号" + ary[d].ToString() + "," + "学生信息" + line[ary[d]];
}
}

2.button1事件:開始猜猜看按钮。用来控制timer1的执行,三张图片的显示和listBox1里面的信息以及提示警告

private void button1_Click(object sender, EventArgs e)
{
int[] ary = new int[3] { arry1[i], arry2[i], arry3[i] };
d = r.Next(0, 3);
first_click = !first_click;
if (!first_click)
{
timer1.Start();
button1.Text = "停止";
}
else
{
timer1.Stop();
button1.Text = "開始";
new System.Drawing.Size(30, 30);
pictureBox1.Image = imageList1.Images[arry1[i]];
pictureBox2.Image = imageList1.Images[arry2[i]];
pictureBox3.Image = imageList1.Images[arry3[i]];
c[x]++; if (c[x] > 3)
{
MessageBox.Show("警告:该同学超过三次被点名,请又一次点名");
timer1.Start();
button1.Text = "停止";
}
this.listBox1.Items.Add(num + " " + c[x]+" "+count+" "+count1);
}
}

3.pictureBox1事件:发生点击图片事件,推断图片与学生信息是否相相应,并计算猜对或猜错的总次数和个人猜对或猜错的总次数及提示猜对或猜错和游戏结束或通过。(以此类推pictureBox2事件,pictureBox3事件)

 private void pictureBox1_Click(object sender, EventArgs e)
{
int[] ary = new int[3] { arry1[i], arry2[i], arry3[i] };
d = r.Next(0, 2);
if (arry1[i] == x)
{
MessageBox.Show("主人,恭喜你,答对了");
count++;
c1[x]++;
label2.Text = "猜对总次数" + count;
this.listBox1.Items.Add(num + " " + c[x] + " " + c1[x] + " " + c2[x]);
while(count==10)
{
MessageBox.Show("主人,恭喜你通过了游戏"); } } else {
MessageBox.Show("主人,错了哦,继续努力");
count1++;
c2[x]++;
label3.Text = "猜错总次数" + count1;
this.listBox1.Items.Add(num + " " + c[x] + " " + c1[x] + " " + c2[x]);
while (count1 == 10)
{
MessageBox.Show("主人,非常遗憾,你没通过游戏"); } }
}

4.button2事件:用作“显示该同学信息”显示当前同学被点信息,用作考勤功能

 private void button2_Click(object sender, EventArgs e)
{
if (c[x] == 3)
{
MessageBox.Show("该同学第三次被点名");
}
if (c[x] == 2)
{
MessageBox.Show("该同学第二次被点名");
}
if (c[x] == 1)
{
MessageBox.Show("该同学第一次被点名");
} }

5. button3事件:用作重置按钮,清除listBox1里面记录的信息

 private void button3_Click(object sender, EventArgs e)
{
this.listBox1.Items.Clear();
result.Clear();
}

6. button4事件:用作“显示全部被猜及被点信息”按钮,显示全部同学当前被猜和被点的详细信息

private void button4_Click(object sender, EventArgs e)
{
this.listBox1.Visible = !this.listBox1.Visible;
this.button3.Visible = !this.button3.Visible;
}

5、系统实现

1、点击開始执行

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" align="middle" width="400" height="200" alt="">

2、点击開始点名button,開始点名button变成停止button:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">               

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

3、点击停止button:显示当前随机抽取的三张相片和的学生信息


 
4、点击图片。若猜对了。弹窗显示

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="400" height="200" alt="">



5、点击图片,若猜错了,弹窗显示

6.若是随机点名抽取的编号超过三次。弹窗警告。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="400" height="200" alt="">

7.若猜图片猜错十次,弹窗显示。猜图片失败

8.若猜图片猜对十次,弹窗显示,猜图片成功

9.按一下“该同学被点信息”的button,弹窗显示该同学被点的信息

10. 分别按一下“全部被猜及被点次数”和“重置”button,全部同学被点名的全部信息在列表框中显示,重置button则是清除列表框的内容。

            

11. 文本中的学生信息

6、小结:

弄这个游戏断断续续的花了挺多时间的,大概半个月吧。当然这中间穿插了很多杂七杂八的事情,从非常久之前就開始做了,但对于c#还是太陌生了。这和我这学期没有花足够的时间去学有关,所以一開始设计时,脑袋一片空白。一点头绪都没有,仅仅能从之前作业的内容里找一些灵感。一開始我在选取图片的方式上花了好多时间,由于对pictureBox接触不多。还没能全然会用,这给我一开头造成好多麻烦,一直卡在这里进退不得,那时心里特别烦躁,上网搜资料都是迷迷糊糊的。像一头盲头苍蝇一样。无从下手。后来把它又搁置了几天后。这时心里也平静了很多,脑袋也開始慢慢进入主题。開始认真思考问题。

由于我读取图片使用的是文件流函数。从既定的路径中读取图片,可是我又发现,我无法将图片里的学生信息显示出来。所以我就将图片的名字改成自然数,把里面的学生信息提取出来放进一个txt文件中面,用lable标签控件显示出来,但这样另一个问题又来了,我无法确保图片和lable标签里的内容仅仅有一对相相应,于是这个问题又困扰了我一天,后来问了一下舍友。经她提示,把选出来的那三个图片编号放进一个数组里,在这个数组里再用随机函数随机选取一个,就能保证图片和学生信息的一一相应了。可是我发现被改成自然序号的图片编号和学生信息之间没有共同点。这样就连不起来了;经过一番思考,我想到了数据库,我的想法是把学生信息和图片编号存进数据库。从数据库中读取就能有共同的链接点了。于是我又把读取相片的方式从文件流换成了从数据库读取,可是问题非常快出现了。由于我对链接数据库的操作全然陌生。尽管之前作业有试过连接,但当时由于电脑软件问题一直没连接上,后来就一直搁置了这个操作,在尝试了一晚以后,我就放弃了用数据库这个念头。问题似乎又回到了最開始的时候,相片究竟要如何引进才干和标签信息同步。由于没想法,我開始去网上搜搜各类资料,后来我又发现了用imageList的方法。它用是用数组存储相片的方法,这样我就能共用这个数组,引进每一个pictureBox里面了,经过多次測试、改动。最终把相片编码和标签同步显示出来了。那时心情真是激动到极点,最终完毕了第一步,果然是万事开头难啊。入门了其它事情就能循序渐进了,所以我下一步就開始点击图片事件了,刚写这部分时事实上还不是非常有想法的,由于我一直在想的是点击图片和标签信息时,相片是会跳动或翻转的,结果就钻了牛角尖,一直挣扎怎么让相片在点击后能够自己动,后来写完程序,调试后才知道,仅仅要相片的编号和标签信息有一一相应的关系了,就能发生事件了。所以我在每一个pictureBox事件里写了三个相同的程序,仅仅要把if语句里的条件语句换成和每一个pictureBox相相应的语句即可了,然后在if语句里面相相应的加入了messageBox、猜对/猜错的总次数等语句,经过不断的改动、加入考勤功能等步骤。最终完毕了初具规模的猜猜看游戏,尽管功能上另一些不完好,可是我还是挺惬意的。从一窍不通,到自己亲自作出一个小游戏,在这过程中收获的知识非常多,这就像一种积累的財富。一点一点的积累。最后所拥有的一定是别人无法给予的,实践才是真理,事实上我也能够做到。

我的百度网盘的地址:http://pan.baidu.com/s/1kTszg7H





c#课程设计---猜猜看游戏的更多相关文章

  1. Rust初步(二):使用Visual Studio Code编写Rust程序(猜猜看游戏)

    我是照着下面这篇帮助文档,完成了第一个完整的Rust程序: 猜猜看 游戏 http://kaisery.gitbooks.io/rust-book-chinese/content/content/3. ...

  2. Java课程设计——猜数游戏(201521123111 陈伟泽)

    Java课程设计--猜数游戏(201521123111 陈伟泽) 1.团队课程设计博客链接 博客作业--猜数游戏 2.个人负责模块或任务说明 Answer:一些基础界面的构造,排行榜的构造,用文件录入 ...

  3. java课程设计-猜数游戏(201521123029 郑佳明)

    1.团队课程设计博客链接 http://www.cnblogs.com/m1ng123/p/7056740.html 2.个人负责模板或任务说明 猜数运行3个主界面即相关功能 玩家信息存储的play类 ...

  4. JAVA课程设计-猜数游戏 201521123017

    1.团队课程设计博客链接 http://www.cnblogs.com/m1ng123/p/7056740.html 2.个人负责模块或任务说明 (1)文件读取和文件的存储 (2)提示板块的窗口设计 ...

  5. JAVA课程设计 猜数游戏 团队

    团队名称,成员介绍 名称: 猜数游戏 成员: 网络1514 201521123086 周颖强 网络1514 201521123087蒋勃超 项目git地址 git.oschina.net/jbc113 ...

  6. java课程设计 猜数游戏 个人

    1.团队课程设计博客链接 /http://www.cnblogs.com/ohanna/p/7064305.html 2.个人负责模块说明 1.进入界面: 2.成功玩家信息的录入: 3.信息的读出 3 ...

  7. JAVA课程设计猜数游戏 个人

    1.团队课程设计博客链接 https://i.cnblogs.com/EditPosts.aspx?postid=7067843&update=1 2.个人负责模块说明 输入用户ID 2.主要 ...

  8. Java课程设计 猜数游戏个人博客

    1.团队课程设计博客链接 http://www.cnblogs.com/tt1104/p/7064349.html 2.个人负责模块或任务说明 1.成绩排行榜算法的设计: 2.排行榜存放到文件中, 3 ...

  9. java课程设计——猜数游戏

    1.团队课程设计博客链接 http://www.cnblogs.com/springbreezemiles/p/7064135.html 2.个人负责模块或任务说明 本人任务: 编写主界面以及排行榜代 ...

随机推荐

  1. [问题解决]NotImplementedError 错误原因:子类没有实现父类要求一定要实现的接口

    NotImplementedError: 子类没有实现父类要求一定要实现的接口. 在面向对象编程中,父类中可以预留一个接口不实现,要求在子类中实现.如果一定要子类中实现该方法,可以使用raise No ...

  2. Moscow Pre-Finals Workshop 2016. Japanese School OI Team Selection. 套题详细解题报告

    写在前面 谨以此篇题解致敬出题人! 真的期盼国内也能多出现一些这样质量的比赛啊.9道题中,没有一道凑数的题目,更没有码农题,任何一题拿出来都是为数不多的好题.可以说是这一年打过的题目质量最棒的五场比赛 ...

  3. 洛谷 [P3623] 免费道路

    有 k 条特殊边的生成树 我们发现有一些边是必须的,如果把所有的水泥路都加入并查集,再枚举鹅卵石路,如果这条路能再次加入并查集,说明这条路是必须的 水泥路同样 这样就把必需边求出来了,剩下就可以随意加 ...

  4. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---42

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  5. layui 的Tab选项卡

    http://www.layui.com/doc/element/tab.html <#--start--> <div class="layui-tab layui-tab ...

  6. github 获取repo 发布的版本号

    获取最新版本 https://api.github.com/repos/nickchou/paopao/releases/latest 获取版本列表 https://api.github.com/re ...

  7. javascript 省市二级联动

    通过遍历二维数组 获取到 二级列表的 每个option 然后onchange事件 获取到省,然后循环遍历该省具有的市并将遍历到的市添加到id为city的选择器中. 获取完需要清空二级列表的内容,不然不 ...

  8. springBoot 定时器

    程序入口类中加入注解 @EnableScheduling 配置定时任务为并行 @Slf4j @Configuration public class ScheduledConfig implements ...

  9. Linux定时关机

    sudo shutdown -h +120 :两小时后关机sudo shutdown -h 23:00 :表示在23点定时关机 一.shutdown命令关机 各参数功能: -c 取消前一个shutdo ...

  10. Android 项目提交到svn需要忽略的文件和文件夹