Ejemplo n.º 1
0
        public IEnumerable <Result> Check(object checkable)
        {
            IEnumerable <Result> results = RuleChecker.Check(checkable, this);

            foreach (var r in results)
            {
                r.SetValid();
            }
            return(results);
        }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
    //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);
    }
Ejemplo n.º 4
0
        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
            });
        }