关闭

C#:《猜猜看》游戏开发总结

标签: c#游戏开发C#作业
396人阅读 评论(0) 收藏 举报
分类:
</pre><p><span style="font-size:14px"><strong></strong></span></p><p align="left"><span style="font-size:14px"><strong>【百度网盘地址】</strong></span></p><p align="left"><a target=_blank target="_blank" href="http://pan.baidu.com/s/1ntHxOe9">http://pan.baidu.com/s/1ntHxOe9</a></p><p><span style="font-size:14px"><strong>【目的】</strong></span></p><p>1. 老师以最快的速度认识、了解学生。</p><p><span style="font-size:14px">2. 促进师生之间的互动交流。</span></p><span style="font-size:14px"><strong>【目标】</strong>1. 设计出满足《猜猜看》基本功能的原型。</span><p><span style="font-size:14px">2. 对原型进行简单的验证。</span></p><p><span style="font-size:14px"><strong>【最终结果】</strong></span></p><p><span style="font-size:14px"> 点击“开始游戏”</span></p><p><span style="font-size:14px"><strong><img src="http://img.blog.csdn.net/20150708083325998?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></strong></span></p><p><span style="font-size:14px">随机出现图片,答对次数和答题次数都是空</span></p><p><span style="font-size:14px"><strong><img src="http://img.blog.csdn.net/20150708083352512?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></strong></span></p><p><span style="font-size:14px">进行答题后:</span></p><p><span style="font-size:14px"><strong><img src="http://img.blog.csdn.net/20150708083502644?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></strong></span></p><p><span style="font-size:14px">猜对后,答题次数和答对次数分别+1,继续答题</span></p><p><span style="font-size:14px"><strong><img src="http://img.blog.csdn.net/20150708083630187?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></strong></span></p><p><span style="font-size:14px">点击“结束游戏” 或者对话框的”否”,就会退出。</span></p><p><span style="font-size:14px"><strong><span style="font-size:14px">【开发过程介绍】</span></strong></span></p><p><span style="font-size:14px">这个游戏的开发花了我一天一夜的集中时间,还有其他零零散散的研究时间,记不清是多少小时了…</span></p><p><span style="font-size:14px">1.我先在纸上画出,最终猜猜看的稿图:都有哪些框框,哪些按钮,这些按钮按下去又有什么效果。当然这只是稿图,后面还可以再修改或扩展。</span></p><p><span style="font-size:14px">2.再设计form1.cs[设计] 把一些button,picturebox,label按照我最初的稿图放上去。</span></p><p><span style="font-size:14px">3 然后开始把下面几个问题列出来(这是我花的最长时间去研究的内容):</span></p><p><span style="font-size:14px"><span style="white-space:pre"></span>1)picturebox 要怎么显示图片</span></p><p><span style="font-size:14px"><span style="white-space:pre"></span>2)图片要怎么存进数据库</span></p><p><span style="font-size:14px"><span style="white-space:pre"></span>3)如何产生三个不同的,有范围的随机数</span></p><p><span style="font-size:14px"><span style="white-space:pre"></span>4)这些随机数要怎么和图片的信息对上来</span></p><p><span style="font-size:14px"><span style="white-space:pre"></span>5)图片和标签要怎么对应</span></p><p><span style="font-size:14px"><span style="white-space:pre"></span>6)算法设计(这才是我花了一天的时间做的内容)</span></p><p><span style="font-size:14px"><strong>【开发时的学习收获】</strong></span></p><p><span style="font-size:14px"><strong>1)<span style="font-size:14px">picturebox 要怎么显示图片</span></strong></span></p><p></p><pre name="code" class="csharp">pictureBox1.Image = Image.FromFile("F:\\GuessPhotos\\" + pic1);

这里是使用绝对路径来显示,既然是绝对路径……

看老师给的资料图:



如果把图片信息(2012…….jpg)存进字符串,在后面的开发就会比较方便,一个简答的字符串(pic)就能表示一张图片的信息。

如果能把图片信息都存在txt,然后导入数据库,那么如何提取图片信息,使用cmd命令(windows+R)--cmd--


运行这句话后可以看到F:\1\1.txt



2)图片要怎么存进数据库-----这个问题就解决了

导入数据库---如何导入请参考我的这篇博文 http://blog.csdn.net/shenmeguia/article/details/46315301

然后在数据库新建栏,添加Sid,设置为自动递增模式:这样每个图片的信息就对应了一个sid




3)如何产生三个不同的,有范围的随机数

其实我的方法:浏览器-----搜索Random msdn---


因为共有111个图片信息(sid最大值为111)所以随机数的产生语句为:

   *****************************产生3个不重复的1到111的随机数***************
             */
            Random random = new Random();   //实例化对象
            int[] array = new int[3];
            for (int i = 0; i < array.Length; i++)
            {
                int x = Convert.ToInt32(random.Next(1, 112));  //随机数包含下界,不包含上界
                for (int j = 0; j < i; j++)
                {
                    if (x == array[j])
                    {
                        x = Convert.ToInt32(random.Next(1, 112));
                        j = 0;
                    }
                }
                array[i] = x;
            }
这样三个不重复的随机数就产生了。

4)这些随机数要怎么和图片的信息对上来

一个随机数对应一个数据库的sid,比如第一张图片:

            //第一张图
            String sql1 = "select * from guess2 where sid=" + array[0];  //随机数对应图片sid(数据库里的)
            MySqlCommand cmd1 = new MySqlCommand(sql1, conn);
            MySqlDataReader mdr1 = cmd1.ExecuteReader();
            if (mdr1.Read())
            {  
                realid1 = mdr1["sid"].ToString();             //照片id
                pic1 = mdr1["spic"].ToString();              //从数据库读照片信息
                realsum1 = mdr1["sum"].ToString();           //出现次数
                realwrong1 = mdr1["wrong"].ToString();       //错误次数
             
                sum1 = Convert.ToInt32(realsum1);             //类型转换
                wrong1 = Convert.ToInt32(realwrong1);            
                pictureBox1.Image = Image.FromFile("F:\\GuessPhotos\\" + pic1);
            }
            mdr1.Close();

5)图片和标签要怎么对应

到这里,这个问题就很好办了:直接把pic1赋值给label2.Text 。这里的pic存放的 是根据随机数(即照片的sid)从数据库取出来的照片信息。

6)算法设计(这才是我花了一天的时间做的内容)

上数据库的表的结构:


我的思路:

1.选出3张随机图片,提出它们出现过的次数分别为sum1,sum2,sum3

2.判断sum1,sum2,sum3 是不是第一次出现(第一次出现也就是对应的sum值为0)

3.枚举sum1,sum2,sum3可能出现的情况:{

sum1=0,其他两个不为0----------sum1对应的图片为题目;

sum2=0,其他两个不为0----------sum2为题目;

sum3=0,其他两个不为0----------sum3为题目;

sum1,sum2都为0,sum3不为0--------sum1,sum2随机选1个做为题目;

sum1,sum3都为0,sum2不为0--------sum1,sum3随机选1个做为题目;

sum2,sum3都为0,sum1不为0--------sum2,sum3随机选1个做为题目;

sum1,sum2,sum3都是0-----------------sum1,sum2,sum3随机选一个做为题目;

sum1,sum2,sum3都不为0———则分别计算三张图片的出错率(如pro1=wrong1/sum1),得出pro1,pro2,pro3,

 比较三个出错率大小,出错率最大的对应图片信息作为题目,存入label1;

}

4.每次点击picturebox ,则对应的sum+1;若猜错,则对应wrong+1;一并存入数据库;

【开发后的感受和体会】

      虽然前面老师布置的作业都做了,但是一开始拿到这个题目的时候,我是一点头绪都没有的,思维很混乱,也不知道要从哪里开始做起。看着旁边的同学的课设一个个开始有模有样,真的很羡慕。

      那时我也跟着大家设计了框框,可我依然不知道要从哪里开始下手,我不清楚那些框框,按钮都有那些属性/事件可以为我所用,那些表达语句要怎么去写。后来我干脆把我头脑里冒出的问题一一列出来,一个个了解,问老师问同学找度娘用各种方法来解决我列出的问题。

      随着我的问题一一被解决,我的课设也渐渐做出来了。虽然界面做得不够精美,也没有用到老师提到过的PageRank算法,但它该有的功能也都基本能实现。做完课设,对于C#这门语言嘛,不敢说学得有多深多深,但至少winform常用控件的操作都会用了,还有数据库的操作。感觉收获最大的是怎么解决自己的问题。如何理清楚问题的次序、分清问题的重要程度,然后通过网络要怎么来解决我的问题。比如怎么正确地表达自己的问题,怎么用msdn,怎么读懂别人的代码,怎么修改才能为自己用…总之,问题总是源源不断地冒出来的,但是只要有耐心,不畏难,所有的问题都能够迎刃而解。

【核心代码解读】

算法的实现,思路已经在上面列出来了,这里就不多说。

//三张都是第一次出现 即随机选
            if (sum1 == 0 && sum2 == 0 && sum3 == 0)
            {
                String[] str = { pic1, pic2, pic3 };
                Random ran = new Random();
                int a = ran.Next(0, 3);
                label1.Text = str[a];
                temp = label1.Text;
            }
            else if (sum1 == 0 && sum2!= 0&& sum3 != 0)
            {
                label1.Text = pic1;
            }
            else if (sum2 == 0 && sum1 != 0 && sum2 != 0)
            {
                label1.Text = pic2;
            }
            else if (sum3 == 0 && sum1 != 0 && sum2 != 0)
            {
                label1.Text = pic3;
            }

            else if (sum1 == 0 && sum2 == 0 && sum3 != 0)
            {
                String[] str = { pic1, pic2};
                Random ran = new Random();
                int a = ran.Next(0, 2);
                label1.Text = str[a];
                temp = label1.Text;
            }
            else if (sum2 == 0 && sum3 == 0 && sum1 != 0)
            {
                String[] str = { pic2, pic3 };
                Random ran = new Random();
                int a = ran.Next(0, 2);
                label1.Text = str[a];
                temp = label1.Text;
            }
            else if (sum1 == 0 && sum3 == 0 && sum2 != 0)
            {
                String[] str = { pic1, pic3 };
                Random ran = new Random();
                int a = ran.Next(0, 2);
                label1.Text = str[a];
                temp = label1.Text;
            }

            //其他情况算概率
            else
            {
                pro1 = wrong1 / sum1;
                pro2 = wrong2 / sum2;
                pro3 = wrong3 / sum3;
                //三个出错率相同,则随机选择
                if (pro1 == pro2 && pro1 == pro3)
                {
                    String[] str = { pic1, pic2, pic3 };
                    Random ran = new Random();
                    int a = ran.Next(0, 3);
                    label1.Text = str[a];
                    temp = label1.Text;
                }
                //当三个概率不同时,比较大小,出错率最大的为label1(即题目)
                else
                {
                    int max = pro1;
                    if (pro2 > max || pro3 > max)
                    {
                        max = pro2;
                        if (pro3 > max)
                        {
                            max = pro3;
                            label1.Text = pic3;
                        }
                        label1.Text = pic2;
                    }
                    label1.Text = pic1;
                }
            }
        }


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11585次
    • 积分:318
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:0篇
    • 译文:0篇
    • 评论:27条
    文章分类
    最新评论