出來混,遟早要還的。拼了老命,還是把題目給擠出來。先前有提過,遊戲規則會參酌大家的意見,以RFC方式提出,做些微調再定案。所以我先說明草擬的規則並釋出題目程式碼,大家可以開始先玩玩,即日起到2008/08/17 00:00前接受大家留言Call-In給建議,正式規則在8/17後公布。
我寫了一個GameHost的程式,可以指定數字範圍(maxNum)、數字位數(digits),決定題目的困難度,例如: maxNum = 10, digits = 4,可用的數字是0-9,就是我們人腦在玩的1234 2A1B標準猜數字遊戲。要挑戰的人要寫一個Class繼承Player這個Abstract Class:
public abstract class Player
{ protected int _maxNum, _digits;
public virtual int[] StartGuess(int maxNum, int digits)
{ _maxNum = maxNum;
_digits = digits;
return null;
}
public abstract int[] GuessNext(Hint lastHint);
public static Hint Compare(int[] answer, int[] guess)
{ int a = 0, b = 0;
for (int i = 0; i < answer.Length; i++)
for (int j = 0; j < guess.Length; j++)
{ if (answer[i] == guess[j])
if (i == j) a++; else b++;
}
return new Hint(a, b);
}
public string GetPalyerName()
{ return this.GetType().ToString();
}
}
public class DummyPlayer : Player
{ private int[] _currAnswer = null;
private Random _rnd = new Random();
private void randomGuess()
{ List<int> lst = new List<int>();
for (int i = 0; i < _digits; i++)
{ int r = _rnd.Next(_maxNum);
while (lst.Contains(r))
r = _rnd.Next(_maxNum);
lst.Add(r);
_currAnswer[i] = r;
}
}
public override int[] StartGuess(int maxNum, int digits)
{ base.StartGuess(maxNum, digits);
_currAnswer = new int[digits];
randomGuess();
return _currAnswer;
}
public override int[] GuessNext(Hint lastHint)
{ randomGuess();
return _currAnswer;
}
}
另外,想參加的人請在8/17前寄信到"iwantvsts2008 @ darkthread.net"預先報名(為防Spam, 請將其中的空白移除才是電子郵件信箱),讓我掌握參賽人數,或許會調整比賽規則以切合實際狀況。