C#课程设计---猜猜看

1.最终成果

1.1关键界面截图

(1)一开始运行程序是一个空白的页面,按下开始猜猜看按钮,随机出现三张照片


(2)界面出现目标名字的猜对次数、猜错次数、猜测总次数还有猜错的概率


(3)点击图片会提示出错还是答对了,在提示框按是,则出现三张新的随机照片,按否则退出运行界面


(4)数据库中按相应的选择更新数据,相片出现的概率的算法和数据库中的这几个数据有关,后面再进行具体的介绍。


(5)图示是再次出现的新的三张随机照片


(6)点击“显示所有图片的名字”按钮,可以显示出三张照片正确的名字,可以方便用户认识。


(7)点击清除所有照片的数据,把数据库中所有照片的数据更新为0



1.2相关下载

文件夹里包括程序源码、数据库、学生照片和一份注意事项

百度云盘链接:http://pan.baidu.com/s/1gdtnc6R

密码:i4or

1.3数据库的设计

使用mysql数据库

数据库的列名及数据类型:


保存的数据:



2.游戏开发过程及介绍

2.1开发大概过程

       我首先根据要求,先做出个简单的界面,有三个pictureBox,和一些基本的按钮和label。我选择的是使用数据库来存储相关的信息,因为考虑到要计算概论和存储相关的次数,而对于数据库的进一步设计是一边写程序的时候一边去完善它。

一开始实现的功能是三张图片随机显示,之前的作业做过随机显示一张图片,现在是三张图片,需要考虑的问题三张照片不能有重复的,则需要排除掉重复的照片。

      接着,是选择出目标的照片名字。如何保证三个选项里有目标名字的照片,我想了一个方法是先选择出三张随机片,再从三张照片里选择出一个作为正确的答案,即作为目标照片,这样就可以保证目标照片一定可以出现在选项中。用户进行猜猜看的时候,程序判断选择的照片和目标照片的名字是否一致即可判断出是否选择正确。

       实现了基本的之后,是怎么设置算法的问题,使得选择认识错误概率高的出现的频率高一点,认识错误概率低的出现的频率低一点。如果要计算概论,则需要把每次选择正确或者错误和总次数、计算出的概率放到数据库中。计算的概率是“识别的错误次数/(识别的准确次数+识别的错误次数)”。首先先判断三张图片里有没有没有作为过目标照片的,即总次数为0的照片,如果有,先进行随机抽取为目标照片,如果三张照片不是第一次当目标照片,那么则选择认识错误率最大作为目标照片。

       在页面中可以显示目标照片的相关选择次数,直接调用数据库的数据显示出来。可以显示三张照片的正确名字,也是直接调用数据库的信息。

       最后,想到不止可以给唯一的用户使用,可以清除数据,给新的用户使用。

2.2开发总时间

        开发的时间,也统计不出来了。设计的思路和想法很重要,想得出来怎么实现,程序也不是问题。有写了四五天左右,一天有八小时,一共就40个小时左右,包括查找资料打程序调试等。


3.开发时的学习收获

        一开始的时候,毫无头绪,觉得自己没办法做出来这个的。不知道是用数据库好还是文本好,不知道怎么显示出照片等等,一大堆看起来很简单但是自己就是不知道怎么解决的问题。自己通过思考,思考需要什么功能,在去百度看这个功能是怎么实现的。通过这个课程设计,我对于C#连接数据库,调用数据库这一块有了更深刻的学习和认识。对于winform的操作和使用也有了更深入的了解。有时候只要稍微思考一下,多考虑事物与事物之间的关系,很多问题也就迎刃而解了,最重要的还是多思考。


4.开发后的感受和体会

        看了其他同学的猜猜看,我觉得我自己开发的猜猜看水平太低了,认识到还有好多我不知道的东西等着我去发现等着我去学习,学无止进。身边的人就是一个很好的学习对象,一起交流一起探讨,会让自己进步得更快。


5.核心代码或全部代码的解读

(一)数据库连接问题:

(1)先在项目中添加下面的引用,才能实现C#与数据库的连接,我使用的是mysql数据库


(2)与数据库建立连接的相关代码

string constr = "server=localhost;User Id=root;password=;Database=caicaikan;Charset=utf8";
            MySqlConnection mycon = new MySqlConnection(constr);
            mycon.Open();

(二)button2(点击出现三张照片)点击事件:

(1)代码:

 Random r1 = new Random();
            int RandKey1 = r1.Next(1, 57);
            Random r2 = new Random();
            int RandKey2 = r2.Next(1, 57);
            Random r3 = new Random();
            int RandKey3 = r3.Next(1, 57);
//避免出现相同的照片,出现的话重现再选择随机的照片,知道没有重复为止
            while (RandKey2 == RandKey1)
            {
                RandKey2 = r2.Next(1, 57); ;
            }
            while (RandKey3 == RandKey1 || RandKey3 == RandKey2)
            {
                RandKey3 = r3.Next(1, 57); ;
            }

解读:用随机函数选出三个随机数,用while先判断随机数1和随机数2是否相等,直到选出的随机数2不和随机数1相等,再判断随机数3是否和随机数1、2相等,while循环直到选出随机数1不和随机数1、2相等。

(2)代码:

//从数据库中查询出第一张照片的相关信息
            MySqlCommand mycmd1 = new MySqlCommand("select dir,gai,sumnum from a where num=" + RandKey1, mycon);
            MySqlDataReader dr1 = mycmd1.ExecuteReader();

            if (dr1.Read())
            {
                str1 = dr1["dir"].ToString();
                string gai1 = dr1["gai"].ToString();
                string sum1 = dr1["sumnum"].ToString();
                gai11 = Convert.ToDouble(gai1);
                sum11 = Convert.ToInt32(sum1);
                pictureBox2.Image = Image.FromFile("F:\\student_photo\\" + str1 + ".jpg");
            }
            dr1.Close();
//查询出第二张照片的相关信息
            MySqlCommand mycmd2 = new MySqlCommand("select dir,gai,sumnum from a where num=" + RandKey2, mycon);
            MySqlDataReader dr2 = mycmd2.ExecuteReader();
            if (dr2.Read())
            {
                str2 = dr2["dir"].ToString();
                string gai2 = dr2["gai"].ToString();
                string sum2 = dr2["sumnum"].ToString();
                gai22 = Convert.ToDouble(gai2);
                sum22 = Convert.ToInt32(sum2);
                pictureBox3.Image = Image.FromFile("F:\\student_photo\\" + str2 + ".jpg");
            }
            dr2.Close();
//查询出第三张照片的相关信息
            MySqlCommand mycmd3 = new MySqlCommand("select dir,gai,sumnum from a where num=" + RandKey3, mycon);
            MySqlDataReader dr3 = mycmd3.ExecuteReader();
            if (dr3.Read())
            {
                str3 = dr3["dir"].ToString();
                string gai3 = dr3["gai"].ToString();
                string sum3 = dr3["sumnum"].ToString();
                gai33 = Convert.ToDouble(gai3);
                sum33 = Convert.ToInt32(sum3);
                pictureBox4.Image = Image.FromFile("F:\\student_photo\\" + str3 + ".jpg");
            }
            dr3.Close();

解读:根据随机选出的号,从数据库中查询对应的照片,在文件夹中选出显示在相应的pictureBox中。特别注意,从数据库获取可以转换成字符串,若要使用到double/int型的数据,要进行字符转换,相应的程序如截图所示。选出的gai为概率,sumnum为该照片显示的总次数,dir为图片名字。

(1)代码:

          if (sum11 == 0 || sum22 == 0 || sum33 == 0)
            {
                string[] a = { str1, str2, str3 };
                Random r = new Random();
                int aa = r.Next(0, 3);
                label1.Text = a[aa];
                str4 = label1.Text;
            }
            else
            {
                if (gai11 >= gai22)
                {
                    if (gai11 >= gai33)
                    {
                        label1.Text = str1;
                        str4 = label1.Text;
                    }
                    else
                    {
                        label1.Text = str3;
                        str4 = label1.Text;
                    }
                }
                else
                {
                    if (gai22 >= gai33)
                    {
                        label1.Text = str2;
                        str4 = label1.Text;
                    }
                    else
                    {
                        label1.Text = str3;
                        str4 = label1.Text;
                    }
                }
            }

解读:先判断三张照片有没有没有当过目标照片的,如果有,三张照片随机选出目标照片,若都当过目标照片,则选择认识错误率最高的当作目标照片

(4)代码:

MySqlCommand mycmd4 = new MySqlCommand("select wrongnum,rightnum,sumnum,gai from a  where dir='" + str4 + "'", mycon);
            MySqlDataReader dr4 = mycmd4.ExecuteReader();
            if (dr4.Read())
            {
                string right4 = dr4["rightnum"].ToString();
                string wrong4 = dr4["wrongnum"].ToString();
                string gai4 = dr4["gai"].ToString();
                string sum4 = dr4["sumnum"].ToString();
                gai44 = Convert.ToDouble(gai4);
                sum44 = Convert.ToInt32(sum4);
                right44 = Convert.ToInt32(right4);
                wrong44 = Convert.ToInt32(wrong4);
            }
            dr4.Close();
            label2.Text = "猜对" + str4 + "的次数" + right44;
            label7.Text = "猜错" + str4 + "的次数" + wrong44;
            label8.Text = "猜测" + str4 + "总次数" + sum44;
            label9.Text = "猜错" + str4 + "概论" + gai44;

解读:在数据库中查询出目标照片的相关信息,在程序的主页面显示出相关次数

(三)PictureBox点击事件(以第一个picturebox为例,即picturebox2):

(1)代码:

 if (str1 == str4)
            {
                message = "哇,记忆力真棒!是否继续?";
                MySqlCommand mycmd11 = new MySqlCommand(" update a set rightnum=rightnum+1,sumnum=sumnum+1 where dir='" + str4 + "'", mycon);
                mycmd11.ExecuteNonQuery();
            }
            else
            {
                message = "哈哈,猜错了!是否继续?";
                MySqlCommand mycmd12 = new MySqlCommand(" update a set wrongnum=wrongnum+1,sumnum=sumnum+1 where dir='" + str4 + "'", mycon);
                mycmd12.ExecuteNonQuery();
            }

解读:判断选择的是否正确,分别把正确/错误的次数和总次数更新进数据库

(2)代码:

MySqlCommand mycmd13 = new MySqlCommand(" update a set gai=wrongnum/sumnum  where dir='" + str4 + "'", mycon);
            mycmd13.ExecuteNonQuery();

解读:用错误的次数除以总次数,等出认识错误的概率,更新进数据库

(3)代码:

//弹出对话框
            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
            DialogResult result;
            result = MessageBox.Show(message, caption, buttons);
            if (result == System.Windows.Forms.DialogResult.Yes)
            {
                button2_Click(this, e);
            }
            else
            {
                this.Close();
            }

解读:设置对话框的相关内容,按“是”执行button2,即出现三张新的照片,按“否”则退出这个程序。

(四)点击button1显示所有照片的名字:

(1)代码:

  private void button1_Click(object sender, EventArgs e)
        {
            label4.Text = str1;
            label5.Text = str2;
            label6.Text = str3;

        }

解读:三个label显示出三张照片正确的名字

(五)点击button3清除所有照片数据

(1)代码:

 private void button3_Click(object sender, EventArgs e)
        {
            string constr = "server=localhost;User Id=root;password=;Database=caicaikan;Charset=utf8";
            MySqlConnection mycon = new MySqlConnection(constr);
            mycon.Open();
            MySqlCommand mycmd44 = new MySqlCommand(" update a set gai=0,sumnum=0,wrongnum=0,rightnum=0", mycon);
            int a = mycmd44.ExecuteNonQuery();
              if (a!=0)
              {
                  MessageBox.Show("清除数据成功!");
              }
              else
              {
                  MessageBox.Show("清除数据失败!");
              }
        }











  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值