一个猜数字的小游戏

您所在的位置:网站首页 编写一个猜数字的小游戏 一个猜数字的小游戏

一个猜数字的小游戏

#一个猜数字的小游戏| 来源: 网络整理| 查看: 265

晚上闲着无聊,用C#写了类似文曲星上面的那个猜数字的小游戏。 (这款游戏还算经典,当年在它上面可玩了不少时间)

一个猜数字的小游戏_c#

算法其实很简单,首先电脑随机生成一个数字,然后和输入的数字比较,返回比较结果即可。

class Numbers {     public int[] Value { get; set; }     public Numbers()     {         var data = RandomShuffle(10);         Value = new int[] { data[0], data[1], data[2], data[3] };     }     public Numbers(params int[] value)     {         if (value.Length != 4)             throw new ArgumentException();         this.Value = value;     }     public int Guess(params int[] num)     {         int count_a = 0;         int count_b = 0;         for (int i = 0; i < Value.Length; i++)         {             if (num[i] == Value[i])                 count_a++;             if (Value.Contains(num[i]))                 count_b++;         }         count_b -= count_a;         return count_a * 10 + count_b;     }     static int[] RandomShuffle(int count)     {         var data = new List();         for (int i = 0; i < count; i++)         {             data.Add(i);         }         var rand = new Random();         var result = new List();         var alg = new Func(d =>         {             var index = rand.Next(d.Count);             var ret = d[index];             d.RemoveAt(index);             return ret;         });         while (data.Count > 0)         {             result.Add(alg(data));         }         return result.ToArray();     } }

玩了一下后,便想让电脑来自动猜数字,网上搜了一下,好像算法还不少,不过大部分看得比较晕。好像效率高的只需要5.2步即可猜出来。我一向认为对于简单的东西没必要搞得那么复杂,用一个简洁而直观的实现更容易阅读和扩展。这里是我的实现算法,非常简单,大概就50行左右,好像最多的时候需要7步。对这个算法就没必要讨论了,有兴趣的可以参看这个网页:http://www.javaworld.com.tw/jute/post/page?bid=35&sty=1&age=0&tpg=1&s=105 。

class Guesser {     List dicList = new List();     public Guesser()     {         for (int i = 123; i n.Guess(dic) != result);     }     public int[] GetGuessValue()     {         //return dicList[0];         return dicList[new Random().Next(dicList.Count)];     }     //这个函数用来自动猜数字     public int Guess(Func resultFunc)     {                 int index = 0;         var PharseToNumber = new Func(n => n[0] * 1000 + n[1] * 100 + n[2] * 10 + n[3]);         while (true)         {             var guessValue = GetGuessValue();             var ret = resultFunc(guessValue);                          Console.WriteLine("{0}: {1} -- {2}", ++index, PharseToNumber(guessValue), ret);             if (ret == 40)             {                 Console.WriteLine("result is " + PharseToNumber(guessValue));                 return PharseToNumber(guessValue);             }             FiltWithResult(guessValue, ret);         }     } }

加上这个类后,便能实现电脑猜数字了,在网上找了几个猜数字的在线游戏,用它来猜了几把,都能很快的猜出来。然后我又把原来那个游戏程序改写了一下,让它自动生成待猜的数字后后自己右去猜,感觉还是挺有意思的。另外,网上查了一下,貌似有的网游里面就有猜数字的游戏,猜对了送礼物什么的。如果用这个玩意儿让它自动猜个一天的话,估计也能换不少小钱花。^_^ 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3