我制作的第一个C#小游戏(读心术)

Posted on 2007-08-26 13:03  Samson小天  阅读(3076)  评论(1编辑  收藏  举报

       写软件首当其冲的是算法,可能是我的数学头脑实在不咋地,GGJJ给我讲了半天都没明白,最后对着人家用JAVA写好的软件楞了半天,总算是把道理想明白了。
      软件编写期间遇到不少问题,可能是我只读了《C#入门经典》(而且半途还荒废了),本来想去网上找找源码,看看别人的思路,结果找了半天也只有编译好的,总不能让我看反汇编后的代码吧...|| 最后只能不会用的控件等价替换,一个方法不行用另一个。条条大路都能溜达到罗马嘛~
      程序写完了,这里给大家一点提醒,也当是给自己留个映像
1.随机数生成方法:
以下有两段代码
       protected void randomText()
        {
            int count = 1;
            int Ascran = 0;
            Random ran = new Random();
            special = pic.Asc[ran.Next(11)];
            for (int i = 0; i < 9; i++)
            {

                for (int j = 0; j < 11; j++)
                {
                    Ascran = Convert.ToInt32(ran.Next(11));
                    ........
                }
            }
        }

另一段:

       protected void randomText()
        {
            int count = 1;
            int Ascran = 0;
            
            special = pic.Asc[ran.Next(11)];
            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 11; j++)
                {
                     Random ran = new Random();
                    Ascran = Convert.ToInt32(ran.Next(11));
                    ........
                }
            }
        }

    看似这两段代码都没什么问题,其实两者相差甚远。看过《计算机程序设计艺术-随机数生成》的可能知道计算机的伪随机,编译一下你就能发现第一段的生成的随机数差异很大,而第二段的随机数来来去去都差不多,甚至一下99个都一样
    这是为什么呢?小弟看《计算机程序设计艺术》也是昏头昏脑,如有小错还请见谅。计算机的随机数都是通过一定算法得来的,与时间来一起随机是最最能接近真随机的,但是这样的随机无法指定最大数,所以C#中有一个重载方法,random对象有一个next方法可以指定最大数,但是这个方法已经不是和时间来随机了。所以当初始化时提供形参相同时很容易产生随机出来的数字相同。
    所以我们必须把初始化随机数放在循环外面,这样就能让后面的“随机数”和前面的差异开。为什么初始化后可以变得不同可以看看《计算机程序设计艺术》一书中对冯-诺依曼随机法的评价。

另外用到的知识点有
2.控件数组的试用,这次我用的是label数组
3.tabcontrol和tabpage的知识(因为《C#入门经典》对这些资料只是一笔带过,害得我网上找得好苦,有钱了一定去买高级编程)

废话不多说了,附上下载地址:
http://cid-856b7a1fbf560755.skydrive.live.com/self.aspx/My%20free%20softwares/ReadMind.rar

Copyright © 2024 Samson小天
Powered by .NET 9.0 on Kubernetes