/// <summary> /// 次の操作を取得する /// </summary> /// <returns>BoxOperation</returns> public BoxOperation GetNextOperation() { BoxOperation bo = new BoxOperation(); if (isOpenSuccess) { bo.Operation = BoxOperationKind.OPENSUCCESS; bo.InputNo = 0; } else if (isOpenFailed) { bo.Operation = BoxOperationKind.OPENFAILED; bo.InputNo = 0; } else { if (isBoxOpenable() || TryRemainCnt == 1) { bo.Operation = BoxOperationKind.INPUTNO; bo.InputNo = int.Parse(getNextInputNoIndex()); } else { bo.Operation = BoxOperationKind.GETHINTS; bo.InputNo = 0; } } MiscTools.DebugMessage("残り回数: " + TryRemainCnt.ToString() + " 指示:" + bo.Operation.ToString() + "/" + bo.InputNo.ToString()); return(bo); }
/// <summary> /// 受け取ったチャット内容より /// </summary> /// <param name="iChat"></param> public void SetHints(ArrayList iChatArr) { ArrayList tmpArr = new ArrayList(); ArrayList reg = new ArrayList(); for (int i = 0; i < iChatArr.Count; i++) { if (!MiscTools.IsRegexString(iChatArr[i].ToString(), BoxHintsStringArr)) { continue; } MiscTools.DebugMessage("指示文字列:" + iChatArr[i].ToString()); for (int j = 0; j < EnableNo.Count; j++) { //カギの数字は([0-9]*)より(大きい|小さい)ようだ……。 reg = MiscTools.GetRegexString(iChatArr[i].ToString(), BoxHintsString1); if (reg.Count > 0) { Hints.Add(iChatArr[i]); if (reg[1].ToString().Equals("大きい")) { if (int.Parse(EnableNo[j].ToString()) > int.Parse(reg[0].ToString())) { tmpArr.Add(EnableNo[j]); } } else if (reg[1].ToString().Equals("小さい")) { if (int.Parse(EnableNo[j].ToString()) < int.Parse(reg[0].ToString())) { tmpArr.Add(EnableNo[j]); } } } //カギの数字は([0-9]*)より大きく、([0-9]*)より小さいようだ……。 reg = MiscTools.GetRegexString(iChatArr[i].ToString(), BoxHintsString2); if (reg.Count > 0) { if (int.Parse(EnableNo[j].ToString()) > int.Parse(reg[0].ToString()) && int.Parse(EnableNo[j].ToString()) < int.Parse(reg[1].ToString())) { tmpArr.Add(EnableNo[j]); } } //カギの数字の([0-9])桁目は([0-9])か([0-9])か([0-9])のどれかのようだ……。 reg = MiscTools.GetRegexString(iChatArr[i].ToString(), BoxHintsString3); if (reg.Count > 0) { int col = 0; if (reg[0].Equals("1")) { col = 1; } else if (reg[0].Equals("2")) { col = 0; } if (EnableNo[j].ToString().Substring(col, 1) == reg[1].ToString() || EnableNo[j].ToString().Substring(col, 1) == reg[2].ToString() || EnableNo[j].ToString().Substring(col, 1) == reg[3].ToString()) { tmpArr.Add(EnableNo[j]); } } //カギの2桁の数字のどちらかは([0-9])のようだ……。 reg = MiscTools.GetRegexString(iChatArr[i].ToString(), BoxHintsString4); if (reg.Count > 0) { if (EnableNo[j].ToString().Substring(0, 1) == reg[0].ToString() || EnableNo[j].ToString().Substring(1, 1) == reg[0].ToString()) { tmpArr.Add(EnableNo[j]); } } //カギの数字の([0-9])桁目は(偶数|奇数)のようだ……。 reg = MiscTools.GetRegexString(iChatArr[i].ToString(), BoxHintsString5); if (reg.Count > 0) { int col = 0; if (reg[0].Equals("1")) { col = 1; } else if (reg[0].Equals("2")) { col = 0; } if (reg[1].Equals("偶数") && (int.Parse(EnableNo[j].ToString().Substring(col, 1)) % 2 == 0)) { tmpArr.Add(EnableNo[j]); } if (reg[1].Equals("奇数") && (int.Parse(EnableNo[j].ToString().Substring(col, 1)) % 2 == 1)) { tmpArr.Add(EnableNo[j]); } } //(.*)は、開錠に成功した! if (MiscTools.GetRegexString(iChatArr[i].ToString(), BoxHintsString6).Count > 0) { isOpenSuccess = true; } //(.*)は、開錠に失敗した……。 if (MiscTools.GetRegexString(iChatArr[i].ToString(), BoxHintsString7).Count > 0) { isOpenFailed = true; } } EnableNo = tmpArr; EnableNoLine = getEnableNoLine(); MiscTools.DebugMessage("指示文字列結果:" + EnableNoLine); } }