c#实现文曲星猜数游戏方法
网络整理 - 06-27
懒人王的TDD by example (1) -- 挑战让我想起了多年前抱着文曲星猜数的时光,逝者如斯夫……
我本人一直认为TDD是个很玄妙的东西,它对我们习惯的功能驱动的编程方式是一种颠覆。我一直想实践一下,但是没有机会。希望能够从懒人王的这个系列里学到想学的东西。
在此先实现一个非TDD的实现,回头再比较一下与TDD的方式有什么不同。
由于时间仓促,没有过多的OO。整个代码只有一个Game类。
namespace GuessGame { class Game { private static readonly int NUMBER_COUNT = 4; private static readonly int GUESS_TIME = 6; private int guessedTime; private int[] numbers; private int[] inputs; private int aCount; private int bCount; public Game() { Init(); } input) { Input(input); if (!Compare()) { Output(); aCount = 0; bCount = 0; guessedTime++; } else { ); Output(numbers); Console.WriteLine(); Init(); } if (guessedTime >= GUESS_TIME) { ); Init(); } } private void Init() { aCount = 0; bCount = 0; guessedTime = 0; numbers = new int[NUMBER_COUNT]; GenerateDistinctRandomNumbers(); ); } private void GenerateDistinctRandomNumbers() { (); ; i = 0; i < NUMBER_COUNT; i++) { int n = r.Next(10); if (n == 0 && allowZero) { numbers[i] = n; allowZero = false; } else { while (numbers.Contains(n)) { n = r.Next(10); } numbers[i] = n; } } } private void Output() { Output(inputs); ); Console.Write(aCount); ); Console.Write(bCount); ); Console.WriteLine(); } [] array) { array) Console.Write(i); } private bool Compare() { i = 0; i < NUMBER_COUNT; i++) { if (numbers[i] == inputs[i]) { aCount++; } >(inputs[i])) { bCount++; } } return aCount == NUMBER_COUNT; } input) { .IsNullOrEmpty(input)) ); if (input.Length != NUMBER_COUNT) ); ; inputs = new int[NUMBER_COUNT]; i = 0; i < input.Length; i++) { int n = 0; n); if (isInt) { if (n == 0 && allowZero) { allowZero = false; } else { >(n)) { ); } } inputs[i] = n; } else throw new ); } } } }main方法很简单。
namespace GuessGame { class Program { [] args) { (); ) { .ReadLine(); try { game.Play(input); } ex) { Console.WriteLine(ex.Message); } } } } }好久不写代码,手有点生锈。
好了,请懒人拍砖。
c#实现文曲星猜数游戏方法