Example #1
0
        private void DoDeal <T>(KeyValuePair <int, int> ruleItem, IDealStrategy <T> strategy, List <DealResult <T> > results) where T : IUser
        {
            foreach (var user in strategy.Users)
            {
                var result = results.First(x => x.User.Id == user.Id);
                strategy.DealingOfPerDeal(ruleItem.Key, result);
                //个对应的人发牌,如果剩余的牌不足以达到NumberOfPerDeal这个数

                result.PokerKeys.AddRange(PokerKeys.GetRange(0, ruleItem.Value));
                PokerKeys.RemoveRange(0, ruleItem.Value);

                strategy.DealedOfPerDeal(ruleItem.Key, result);
            }
        }
Example #2
0
        /// <summary>
        /// 执行发牌
        /// </summary>
        public List <DealResult <T> > Do <T>(IDealStrategy <T> strategy) where T : IUser
        {
            var results = strategy.Users.Select(x => new DealResult <T>
            {
                User      = x,
                PokerKeys = new List <ShuffleResult>()
            }).ToList();

            //比方这里可以提前抽取几张
            strategy.Dealing(PokerKeys);
            foreach (var ruleItem in strategy.DealRule)
            {
                DoDeal(ruleItem, strategy, results);
            }
            strategy.Dealed(PokerKeys, results);
            return(results);
        }