当前位置:首页 > IT技术 > Windows编程 > 正文

c#课程设计---猜猜看游戏
2021-08-06 15:26:38

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、系统具体设计——控件选取c#课程设计---猜猜看游戏_数组

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:UsersAdministratorDesktopc#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、点击開始执行

c#课程设计---猜猜看游戏_数据库_02



 

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

     
c#课程设计---猜猜看游戏_数据库_03               c#课程设计---猜猜看游戏_重置_04

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

c#课程设计---猜猜看游戏_数组_05

 
4、点击图片。若猜对了。弹窗显示
c#课程设计---猜猜看游戏_文件流_06


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

c#课程设计---猜猜看游戏_数据_07


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

c#课程设计---猜猜看游戏_数据_08

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

c#课程设计---猜猜看游戏_数组_09

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

c#课程设计---猜猜看游戏_数据库_10

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

c#课程设计---猜猜看游戏_数组_11

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

c#课程设计---猜猜看游戏_数组_12            c#课程设计---猜猜看游戏_数据_13


11. 文本中的学生信息

c#课程设计---猜猜看游戏_重置_14



6、小结:

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

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

 

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












本文摘自 :https://blog.51cto.com/u

开通会员,享受整站包年服务立即开通 >