C#课程考核——猜猜看.

原创 2015年07月06日 22:05:15

1.关键成果展示

程序开始运行时界面如下


点击显示图片运行后,将会出现三张不一样的照片,如图所示。



选择其中一张图片点击,如果猜对了,将会出现如下图所示界面。


点击确定后返回图2,点击继续猜又重新出现三张不一样的照片。


选择其中一张照片,如果照片选择的人和被猜的人信息不匹配,将会出现如下界面


当不玩用游戏退出时点击“退出游戏”会出现一个信息框,问你是否保留游戏数据。


当选择“是”时,将会把此次游戏的数据结果保存至数据库,当选择“否”时会出现如下图所示信息,游戏数据将会被清空


猜猜看游戏源码下载地址:http://pan.baidu.com/s/1jGiXW6i

2.猜猜看游戏的开发过程介绍

设计思路

之前作业写过随机显示图片用到了picturebox,这次也同样用到,因为要显示三张图片,所以我使用了三个picturebox。图片的存取是游戏开发的重点之一。为了更好的读取图片我将图片信息用cmd命令提取出来然后导入我之前在数据库建立的一个名字叫caicaikan的表中,然后通过图片路径读取图片。以下是数据库内容


当可以读取图片时,为了防止读取图片是出现的图片相同,要用到while语句。当我选到的图片相同时,应该再重新选取一张。

选出三张图片后在从这三张图片中选一张作为目标图片,显示他(她)的学号姓名。为了更好的选择目标图片, 我写了一个算法,首先判断选出的三张图片被选出的总次数,如果三张图片的总次数相等,再比较选对的次数如果选对的次数相等,随机选取一个作为目标图片。如果选对的次数不相等,则选取一个最小的作为目标图片。当三张图片被选出的总次数不相等,选择最小的那个作为目标图片。

 if(realsum1==realsum2||realsum2==realsum3)
            {
                if(rightcount1==rightcount2||rightcount2==rightcount3)
                {
                    string[] a = {str1,str2,str3};
                    Random rand =new Random();
                    int aa =rand.Next(1,3);
                    label1.Text = a[aa];
                    str4 = label1.Text;
               
                }
                 else
                    {
                        if(rightcount1<rightcount3||rightcount1<rightcount2)
                        {
                            label1.Text=str1;
                            str4 = label1.Text;
                        }
                        if(rightcount2<rightcount1||rightcount2<rightcount3)
                        {
                            label1.Text=str2;
                            str4 = label1.Text;
                        }
                        if(rightcount3<rightcount2||rightcount3<rightcount1)
                        {
                            label1.Text=str3;
                            str4= label1.Text;
                        }
                     }
            }
            else
            {
                  if(realsum1<realsum2||realsum1<realsum3)
                  {
                        label1.Text=str1;
                        str4 = label1.Text;
                  }
                  if(realsum2<realsum1||realsum2<realsum3)
                  {
                        label1.Text=str2;
                        str4 = label1.Text;
                  }
                  if(realsum3<realsum1||realsum3<realsum1)
                  {
                        label1.Text=str3;
                        str4= label1.Text;
                  }
            }

关于游戏数据问题,我犹豫是否要专门用一个button控件去清除数据,最后我没有选择用这个。而是把退出游戏和数据保留写在同一个button。我设置在游戏退出时选择是否保留数据,我是想到如果用户只是想删除这一次的数据而不删除之前玩的数据。但我在写的时候我是把所有游戏数据都删除了。关于我之前所想的一个大概思路,但基于时间问题暂时先放下。

3.开发时的学习收获

学习了MySQL数据库,之前我的visual studio连接MySQL数据库一直都有问题,然后之前努力了好久都没有弄好,这次终于弄好了!在开发这个游戏过程中,我对这个软件的使用你越来越熟悉,也学会了好几个控件的使用。对于winform的操作和使用有了更深层次的了解和认识。总的来说收获还是很大的。

4.开发时间

我不记得我从什么时候开始写,中间有断过,因为有考试和有论文要写,估计花了一星期吧。

5.开发后的感受与体会

一开始我犹豫是用JSP写还是用c#写,用JSP感觉是在做JSP的课程考核,但是叫我用C#写,又怕写不出来。等写不出来,再用JSP写又怕时间不够(因为还有很多其他科的课程设计要写)。犹豫再三,我决定用C#写。一开始我用的事文本写的,但是总是出现数据异常,在用文本写的过程中,我学会了imagelist控件。后面我觉得用数据库会比较简单些,我就开始使用数据库,开始我的想法是把图片用二进制流存进数据库但是不知道为什么一直没有成功,上网查资料,查书,发现大部分用的都是SQL,没有MySQL的,弄了很久都没有改好,资料也说还有第二种方法,我决定现用第二种方法把课程考核过关,在暑假的时候再把第一种方法学好。但是第一种方法远不及第二种方法好。虽然我开发出来的不是很好,但是能把它写出来,我觉得对于我自己来说是一个很大的进步,当它成功的那一刻,只有自己能体会到。还有,我觉得学习间应该多交流,因为很可能你花了一整天都没解决好的问题,别人也曾经遇见过而且吧它解决了,虽然在这个过程中也会有一定的收获,但是如果过多的时间花在同一个问题上就有点得不偿失了。

6.核心代码解读

1)读取照片代码

 private void button2_Click(object sender, EventArgs e)
        {
            //一个有109个数的数组随机取数
            Random ra1 = new Random();//实例化一个随机数对象
            int num1 = ra1.Next(1, 109);
            Random ra2 = new Random();
            int num2 = ra2.Next(1,109);
            Random ra3 = new Random();
            int num3 = ra3.Next(1, 109);

            while (num2 == num3)
            {
                num2 = ra2.Next(1, 109);
            }
           while(num1 == num2 || num1 == num3)
            {
                num1 = ra1.Next(1, 109);
            }
          
            
            string con = "server=localhost;User Id=root;password=;Database=tupian;Charset=utf8";
            MySqlConnection mycon = new MySqlConnection(con);
            mycon.Open();

            //读取游戏中的第一张图片
            MySqlCommand cmd1 = new MySqlCommand("SELECT blobdata,sum,rightcount FROM caicaikan where blobid="+ num1 , mycon);//设置命令参数
            MySqlDataReader dr1 = cmd1.ExecuteReader();//执行命令并获得数据读取器
             if (dr1.Read())
             {
                 str1 = dr1["blobdata"].ToString();
                 string sum1 = dr1["sum"].ToString();
                 realsum1 = Convert.ToInt32(sum1);
                 pictureBox1.Image = Image.FromFile("E:\\csharp\\photos\\" + str1); 
             }
            dr1.Close();
         
            //读取游戏中的第二张图片
            MySqlCommand cmd2 = new MySqlCommand("SELECT blobdata, sum,rightcount FROM caicaikan where blobid="+ num2 , mycon);//设置命令参数
            MySqlDataReader dr2 = cmd2.ExecuteReader();//执行命令并获得数据读取器
             if (dr2.Read())
             {
                 str2 = dr2["blobdata"].ToString();
                 string sum2 = dr2["sum"].ToString();
                 realsum1 = Convert.ToInt32(sum2);
                 pictureBox2.Image = Image.FromFile("E:\\csharp\\photos\\" + str2); 
             }
            dr2.Close();

            //读取游戏中的第三张图片
            MySqlCommand cmd3 = new MySqlCommand("SELECT blobdata, sum,rightcount FROM caicaikan where blobid=" + num3, mycon);//设置命令参数
            MySqlDataReader dr3 = cmd3.ExecuteReader();//执行命令并获得数据读取器
            if (dr3.Read())
             {
                 str3 = dr3["blobdata"].ToString();
                 string sum3 = dr3["sum"].ToString();
                 realsum1 = Convert.ToInt32(sum3);
                 pictureBox3.Image = Image.FromFile(@"E:\csharp\photos\" + str3); 
             }
            dr3.Close();

            //设计相片名字出现的算法
            //如果出来的三张照片出现的总数都相同时,则出现rightcount最小的相片信息,如果rightcount相同,则随机出现相片信息
            if(realsum1==realsum2||realsum2==realsum3)
            {
                if(rightcount1==rightcount2||rightcount2==rightcount3)
                {
                    string[] a = {str1,str2,str3};
                    Random rand =new Random();
                    int aa =rand.Next(1,3);
                    label1.Text = a[aa];
                    str4 = label1.Text;
               
                }
                 else
                    {
                        if(rightcount1<rightcount3||rightcount1<rightcount2)
                        {
                            label1.Text=str1;
                            str4 = label1.Text;
                        }
                        if(rightcount2<rightcount1||rightcount2<rightcount3)
                        {
                            label1.Text=str2;
                            str4 = label1.Text;
                        }
                        if(rightcount3<rightcount2||rightcount3<rightcount1)
                        {
                            label1.Text=str3;
                            str4= label1.Text;
                        }
                     }
            }
            else
            {
                  if(realsum1<realsum2||realsum1<realsum3)
                  {
                        label1.Text=str1;
                        str4 = label1.Text;
                  }
                  if(realsum2<realsum1||realsum2<realsum3)
                  {
                        label1.Text=str2;
                        str4 = label1.Text;
                  }
                  if(realsum3<realsum1||realsum3<realsum1)
                  {
                        label1.Text=str3;
                        str4= label1.Text;
                  }
            }
            //获取目标照片信息
            MySqlCommand cmd4 = new MySqlCommand("SELECT blobdata, sum,rightcount,wrongcount FROM caicaikan where blobid='"+ str4 +"'",mycon);//设置命令参数
            MySqlDataReader dr4 = cmd4.ExecuteReader();//执行命令并获得数据读取器
             if (dr4.Read())
             {   
                string right = dr4["rightcount"].ToString();
                string wrong = dr4["wrongcount"].ToString();
                string sum4 = dr4["sum"].ToString();
                realsum4 = Convert.ToInt32(sum4);
                rightcount4 = Convert.ToInt32(right);
                wrongnum4 = Convert.ToInt32(wrong);
             }
             label1.Text = str4;
            dr2.Close();
        }



解读:这段代码主要是选取图片,首先我定义了三个随机数组,它们分别对应三个picturebox。在读取照片信息前要排除出现照片重复的可能性。然后就是设计读取照片的算法,上面已经讲过不再重复。

2)判断哪个是匹配的照片(以其中一个picturebox为例,其他两个picturebox代码都一样)

 private void pictureBox1_Click(object sender, EventArgs e)
        {
            string constr = "server=localhost;User Id=root;password=;Database=tupian;Charset=utf8";
            MySqlConnection mycon = new MySqlConnection(constr);
            mycon.Open();
            //图片信息与正确信息相同时
            if(str1==str4)
            {
                MessageBox.Show("你猜对了!goodjob!");
                MySqlCommand cmd4 = new MySqlCommand(" update caicaikan set rightcount=rightcount+1,sum=sum+1 where blobdata='" + str4 + "'", mycon);
                cmd4.ExecuteNonQuery();
            }
            //选取图片信息不匹配时
            if(str1!=str4)
            {
                MessageBox.Show("你猜错了~~~~(>_<)~~~~");
                MySqlCommand cmd4 = new MySqlCommand(" update caicaikan set wrongcount=wrongcount+1,sum=sum+1 where blobdata='" + str4 + "'", mycon);
                cmd4.ExecuteNonQuery();
            }
        }
解读:这段代码主要判断这张照片是不是与我们之前所选择的目标照片信息是否一致,如果一致则表明猜对了,反之,则猜错了。

3)退出游戏代码

 private void button3_Click(object sender, EventArgs e)
        {
            string message; 
            message="是否保留游戏数据";
            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
            DialogResult result;
            result = MessageBox.Show(message, caption, buttons);
            if (result == System.Windows.Forms.DialogResult.No)
            {
                string constr = "server=localhost;User Id=root;password=;Database=tupian;Charset=utf8";
                MySqlConnection mycon = new MySqlConnection(constr);
                mycon.Open();
                MySqlCommand mycmd7 = new MySqlCommand(" update caicaikan set rightcount=0,wrongcount=0,sum=0", mycon);
                int a = mycmd7.ExecuteNonQuery();
                if (a!=0)
                {

                    MessageBox.Show("清除数据成功!");
                    this.Close();
                 }
                 else
                {
                    MessageBox.Show("清除数据失败!");
                    this.Close();
                }
              }
            else
            {
                this.Close();
            }
        }
解读:这段代码是为了用户不玩游戏时可以退出游戏和选择是否保存这次的游戏数据当选择不保留数据时,数据库里的游戏数据库会被清空。







个人能力怎么看?四个方面帮你量化UE&UI的绩效标准

@可风f :首先我认为没办法完全量化设计师的绩效,就像你没办法按代码量或者加班量来衡量一个程序员的绩效一样。作为一种专业性的支持角色,衡量设计师的绩效当然要看两个方面:支持的好不好、支持的过程是否专业...
  • vanessary2016
  • vanessary2016
  • 2016年05月04日 17:07
  • 2187

软件测试主管任职考评标准

一、考核维度  拟晋升为测试主管的测试工程师,需从三个方向进行综合考核评判:能力、业绩、态度,三者缺一不可。  其中:  能力细化为管理能力(项目管理、人员管理、技术管理)和素质能力(技术能力、沟通能...
  • hongmj
  • hongmj
  • 2016年07月11日 23:11
  • 1549

java项目组月度考核表(KPI)

为了保密性,我将个人信息隐藏了。每个月一次的PKI表格。   *  月度考核表 姓名:        **                         考核周期: 3月...
  • zl544434558
  • zl544434558
  • 2014年03月26日 12:01
  • 3172

C#课程设计——“猜猜看”开发总结

咳咳,结果我还是奇迹般的两天解决了战斗。其实不符合老师的要求,少了什么概率计算。。。什么Pangerank算法,表示在下才疏学浅,不懂这么高端的东西。(其实和来不及慢慢想也有关系,毕竟本人最近背负着3...
  • u010996425
  • u010996425
  • 2015年07月08日 08:44
  • 455

c#课程设计---猜猜看游戏

1:游戏要求 1. 随机显示 一个名字 与 若干张相片(如3张),选择正确的相片。 2. 记录老师对每个学生的认识概率P,并根据认识概率,确定“猜猜看”游戏中学生出现的频率。          ...
  • guojingmei
  • guojingmei
  • 2015年07月04日 16:01
  • 984

《JAVA课程设计》实训第四天——《猜猜看》游戏

第四天,本来想进一步去改进《猜猜看》游戏的,但是很多问题都不理解,也不熟悉怎么去弄到连接数据库,统计猜对次数,所以并没有进行再多的修改。 基本上就是这样的运行结果了 import java.awt...
  • u013921527
  • u013921527
  • 2015年07月03日 08:31
  • 752

C#课程设计:《猜猜看》游戏开发总结

信管1121,201211671117,聂双燕 第一部分:开发要求(完整要求见课程考核说明编程组和游戏说明) 1. 随机显示 一个名字 与 3张相片,选择正确的相片; 2. 随机显示 一张相片 ...
  • sunshinegyan
  • sunshinegyan
  • 2015年07月04日 23:08
  • 1371

《Java程序设计》第17周课程设计:《猜猜看》游戏 第三天

今天的进度并不是很理想,原计划是从文本中获取学生信息的,可惜我根据网上参考做出根据文件名而显示其信息; 今天至少完成了两个方面图片的缩放和选择按钮; 图片的缩放: try { ...
  • u013899783
  • u013899783
  • 2015年07月01日 20:32
  • 530

《Java程序设计》第17周课程设计:《猜猜看》游戏 第一天

这次完成的方面并不多,仅仅完成上面两个选择文本框可以选取并显示目录路径,但是选择班级txt文件哪里我不能从文件目录的文件夹直接读取,只能从默认目录再去寻找路径。 import java.awt.Ev...
  • u013930357
  • u013930357
  • 2015年07月01日 08:31
  • 282

《Java程序设计》第17周课程设计:《猜猜看》游戏 第四天

今天我为了实现按钮判断进行了少量的调整,利用输出的text进行判断是否其图片与标记的名字相对应; 可惜我还不能在上方对话框显示名字; 图片旁边的三个黑点其实获取的图片的名称,因为避免被看见我把他隐...
  • u013899783
  • u013899783
  • 2015年07月02日 21:38
  • 451
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#课程考核——猜猜看.
举报原因:
原因补充:

(最多只允许输入30个字)