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); } }
/// <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); }