#region CLASS-ASK public class ASK { /* * N:剩余可猜测次数 * _N:保存N的初值 * num[]:被猜测数 * num[0]做特殊用 */ private int N,_N; private int[] num = {-1,-1,-1,-1,-1}; private Stopwatch SW = new Stopwatch(); public ASK() { _N=N = 8; Generate(); } public ASK(int times) { _N=N = times; Generate(); } private void Generate() { Random rand = new Random(); for (int i = 1; i < 5;i++ ) do { num[i] = rand.Next(0, 10); } while (num[i] == num[1 % i] || num[i] == num[2 % i] || num[i] == num[3 % i] || num[i] == num[4 % i]); num[0] = num[4]; } public void Reset() { N = _N; Generate(); SW.Stop(); SW.Reset(); } public string Compare(string inputStr) { /* * 返回值约定: * 输入错误:$INPUTERR * 失败并返回答案:$OVER+正确答案 * 正确:$OK+用时 */ if (SW.IsRunning) SW.Stop(); string time = SW.Elapsed.Minutes.ToString() + "/'" + SW.Elapsed.Seconds.ToString() + "/""; int nA = 0, nB = 0; inputStr = inputStr.Trim(); if(!Regex.IsMatch(inputStr,@"^/d{4}$")) return "$INPUTERR"; int[] input = new int[4]; for (int i = 0; i < 4;i++) Int32.TryParse(inputStr.Substring(i,1),out input[i]); for (int i = 0; i < 4; i++) { if (input[i]==num[(i+1)%4]) ++nA; else if (input[i] == num[(i + 2) % 4] || input[i] == num[(i + 3) % 4] || input[i] == num[i % 4]) ++nB; } if (nA == 4) return "$OK" + time; if (--N == 0) return "$OVER" + GetAns(); SW.Start(); return inputStr + "◆" + nA + "A" + nB + "B" + "※还有" + N + "次" + "〓用时" + time; } private string GetAns() { StringBuilder SB=new StringBuilder(); for (int i = 1; i < 5; i++) SB.Append(num[i%4].ToString()); return SB.ToString(); } } #endregion
无聊,所以写着玩玩。