#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
无聊,所以写着玩玩。
1234

被折叠的 条评论
为什么被折叠?



