public IEnumerable <Result> Check(object checkable) { IEnumerable <Result> results = RuleChecker.Check(checkable, this); foreach (var r in results) { r.SetValid(); } return(results); }
private void RunChecks() { if (_configuration?.Rule == null || _configuration.Rule.Length == 0) { MessageBox.Show("The configuration does not contain any rules!", "No rules", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } else if (_collection?.DVDList == null || _collection.DVDList.Length == 0) { MessageBox.Show("The collection does not contain any profiles!", "No profiles", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } ClearResults(); ResultListView.ItemChecked -= OnResultListViewItemChecked; try { var ruleChecker = new RuleChecker(_collection); foreach (var rule in _configuration.Rule) { var allResults = ruleChecker.Check(rule); var invalidResults = allResults.Where(result => !result.Success); foreach (var result in invalidResults) { foreach (var profile in result.FailedProfiles.OrderBy(p => p.SortTitle)) { var row = new ListViewItem(new[] { rule.Name, result.Check.Name, profile.ToString() }) { Tag = profile, }; ResultListView.Items.Add(row); } } } ApplyResultIgnores(); SwitchButtons(); } finally { ResultListView.ItemChecked += OnResultListViewItemChecked; } }
//helper function for generateFeedback, to test if a rule is in a list public bool CompareAgainstAList(FRule testRule, List <FRule> compareList) { bool isIn = false; for (int i = 0; i < compareList.Count; i++) { if (checker.Check(testRule, compareList[i])) { isIn = true; } else { continue; } } return(isIn); }
private static ShowCardResult ShowCard(IUser user, List <DealResult <DoudizhuUser> > results, ShowCardResult prevShowResult = null) { var pokers = results.First(x => x.User.Id == user.Id).Pokers; Console.WriteLine($"{user.Display},{string.Join(",", pokers.Select(x => $"{x.Display}({x.Key})"))}"); Console.Write($"[{(user as DoudizhuUser).UserRole.ToString()}]{user.Display}[{pokers.Count}] select pokers:"); var readString = Console.ReadLine(); if (string.IsNullOrEmpty(readString)) { //if (prevShowResult == null) //{ // Console.WriteLine("出牌不符合规则,请重新出!"); // ShowCard(user, results); //} //return new ShowCardResult //{ // RuleMatcher = new RuleMatchResult { CheckResult = true }, // Result = ShowCardResult.ShowCardResultType.NotGiven //}; readString = "P"; } if (readString.ToUpper() == "P") { if (prevShowResult != null) { prevShowResult.Result = ShowCardResult.ShowCardResultType.Pass; return(prevShowResult); } else { Console.WriteLine("头家不能PASS,请重新出!"); return(ShowCard(user, results)); } } var selectedPokerKeys = readString.Split(",").ToList(); var selectedPokers = pokers.Where(x => selectedPokerKeys.Any(y => y == x.Key)).ToList(); if (selectedPokers.Count() != selectedPokerKeys.Count) { Console.WriteLine("你恐怕出了你不存在的牌吧,请重新出!"); return(ShowCard(user, results, prevShowResult)); } if (prevShowResult == null) { var ruleMatcher = RuleChecker.Check(selectedPokers); //验证是否正确 if (!ruleMatcher.CheckResult) { Console.WriteLine("出牌不符合规则,请重新出!"); return(ShowCard(user, results)); } //移除用户手中的牌 pokers.RemoveAll(x => selectedPokerKeys.Any(y => x.Key == y)); results.First(x => x.User.Id == user.Id).PokerKeys.RemoveAll(x => selectedPokerKeys.Contains(x.PokerKey)); return(new ShowCardResult { RuleMatcher = ruleMatcher, Pokers = selectedPokers, Result = ShowCardResult.ShowCardResultType.Show, User = user }); } var currentRule = RuleHelper.BuildBoomRule(selectedPokers); if (currentRule == null) { currentRule = prevShowResult.RuleMatcher.Rule.New(selectedPokers); } if (!currentRule.Check()) { Console.WriteLine("出牌不符合规则,请重新出!"); return(ShowCard(user, results, prevShowResult)); } if (currentRule.CompareTo(prevShowResult.RuleMatcher.Rule) <= 0) { Console.WriteLine("出牌不符合规则,请重新出!"); return(ShowCard(user, results, prevShowResult)); } //移除用户手中的牌 pokers.RemoveAll(x => selectedPokerKeys.Any(y => x.Key == y)); results.First(x => x.User.Id == user.Id).PokerKeys.RemoveAll(x => selectedPokerKeys.Contains(x.PokerKey)); return(new ShowCardResult { RuleMatcher = new RuleMatchResult { Rule = currentRule, CheckResult = true }, Result = ShowCardResult.ShowCardResultType.Show, Pokers = selectedPokers, User = user }); }