public void Shuffle_ShufflesCollection() { var cardsHelper = new CardsHelper(); var cards = new List <Card>(); for (int i = 0; i < 100; i++) { cards.Add(new Card { Name = i.ToString() }); } cardsHelper.Shuffle(ref cards); int j = 0; for (int i = 0; i < 100; i++) { if (i.ToString() == cards[i].Name) { j++; } } Assert.That(j < 100); }
public void Test() { List <Card> cards = new List <Card>(); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); CardsHelper.TryGetCardType(cards, out CardType type); Assert.AreEqual(type, CardType.Single); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); CardsHelper.TryGetCardType(cards, out type); Assert.AreEqual(type, CardType.Double); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._2 }); CardsHelper.TryGetCardType(cards, out type); Assert.AreEqual(type, CardType.None); // 移除最后一个 cards.RemoveAt(cards.Count - 1); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); CardsHelper.TryGetCardType(cards, out type); Assert.AreEqual(type, CardType.OnlyThree); }
public int CompareTo(PrompCards other) { var a = CardsHelper.GetWeight(other.Cards, other.CardType); var b = CardsHelper.GetWeight(this.Cards, this.CardType); return(b.CompareTo(a)); }
public void TestDoubleStraight() { List <Card> cards = new List <Card>(); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._5 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._5 }); CardsHelper.TryGetCardType(cards, out CardType type); Assert.AreEqual(type, CardType.None); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._4 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._4 }); CardsHelper.TryGetCardType(cards, out type); Assert.AreEqual(type, CardType.DoubleStraight); }
public void AddInitialCardsToPlayers(Deck stack, int initialNumberOfCardsInHand) { foreach (var client in Clients) { client.Value.OnHand = CardsHelper.GetInitialCards(stack, initialNumberOfCardsInHand); } }
public void TestThreeAndTwo() { List <Card> cards = new List <Card>(); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._5 }); CardsHelper.TryGetCardType(cards, out CardType type); Assert.AreEqual(type, CardType.None); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); CardsHelper.TryGetCardType(cards, out type); Assert.AreEqual(type, CardType.ThreeAndTwo); }
protected virtual void UpdateCanGoNext() { CanGoNext = CardsHelper.IsValidNumber(CardNumber.Without(' ')) && CardsHelper.IsValidCvc(Cvv) && CardsHelper.IsValidExpirationDate(ExpirationDate) && !string.IsNullOrWhiteSpace(CardHolder); }
public void TestSort() { List <Card> cards = new List <Card>(54); // 生成一副新牌 CardsHelper.Spawn(cards); CardsHelper.Shuffle(cards); CardsHelper.Sort(cards); cards.Log(); }
public void TestSpawn() { List <Card> cards = new List <Card>(54); // 生成一副新牌 CardsHelper.Spawn(cards); cards.Log(); // 54张牌 Assert.AreEqual(cards.Count, 54); }
public void TestShuffle4() { // 两幅牌 List <Card> cards = new List <Card>(108); // 生成一副新牌 CardsHelper.Spawn(cards); // 生成一副新牌 CardsHelper.Spawn(cards); CardsHelper.Shuffle1(cards); CardsHelper.Shuffle2(cards); cards.Log(); }
public void TestShuffle2() { List <Card> cards = new List <Card>(54); // 生成一副新牌 CardsHelper.Spawn(cards); // 只保留8张牌测试 // cards.RemoveRange(8, cards.Count - 8); CardsHelper.Shuffle2(cards); cards.Log(); }
public void TestBoom() { List <Card> cards = new List <Card>(); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); CardsHelper.TryGetCardType(cards, out CardType type); Assert.AreEqual(type, CardType.Boom); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); CardsHelper.TryGetCardType(cards, out type); Assert.AreEqual(type, CardType.Boom); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight.SJoker }); CardsHelper.TryGetCardType(cards, out type); Assert.AreEqual(type, CardType.Boom); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight.LJoker }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight.LJoker }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight.SJoker }); CardsHelper.TryGetCardType(cards, out type); Assert.AreEqual(type, CardType.Boom); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._4 }); CardsHelper.TryGetCardType(cards, out type); Assert.AreEqual(type, CardType.None); }
private void Analysis(List <Card> cards) { List <AnalyseResult> results = AnalyseResult.Analyse(cards); // 王 var jokers = cards.Where(f => CardsHelper.IsJoker(f)).ToList(); // 最大的8炸 if (jokers.Count == 4) { } // 炸弹 var booms = results.Where(f => !CardsHelper.IsJoker(f.Weight) && f.Count > 3).ToList(); }
public void TestStraight() { List <Card> cards = new List <Card>(); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._4 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._5 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._6 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._7 }); CardsHelper.TryGetCardType(cards, out CardType type); Assert.AreEqual(type, CardType.Straight); cards.Clear(); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._10 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight.J }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight.Q }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight.K }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight.A }); CardsHelper.TryGetCardType(cards, out type); Assert.AreEqual(type, CardType.Straight); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._2 }); CardsHelper.TryGetCardType(cards, out type); Assert.AreEqual(type, CardType.None); }
public void Draw_TopBottom_MutatesGivenCollection(CollectionDirection direction) { var cardsHelper = new CardsHelper(); var cards = new List <Card>() { new Card { Name = "X" }, new Card { Name = "Y" }, new Card { Name = "Z" } }; var afterDraw = cardsHelper.Draw(direction, cards, 1); Assert.That(cards.Count == 2); }
public void Draw_TopBottom_WhenCountIsMoreThanAvailable_ReturnsEverything(CollectionDirection direction) { var cardsHelper = new CardsHelper(); var cards = new List <Card>() { new Card { Name = "X" }, new Card { Name = "Y" }, new Card { Name = "Z" } }; var afterDraw = cardsHelper.Draw(direction, cards, 4); Assert.That(afterDraw.Count == 3); }
public void Draw_TopBottom_WhenNoParamGiven_DrawsOne(CollectionDirection direction) { var cardsHelper = new CardsHelper(); var cards = new List <Card>() { new Card { Name = "X" }, new Card { Name = "Y" }, new Card { Name = "Z" } }; var afterDraw = cardsHelper.Draw(direction, cards); Assert.That(afterDraw.Count == 1); }
public void Draw_TopBottom_ReturnsProperCards(CollectionDirection direction, string expectedName) { var cardsHelper = new CardsHelper(); var cards = new List <Card>() { new Card { Name = "X" }, new Card { Name = "Y" }, new Card { Name = "Z" } }; var afterDraw = cardsHelper.Draw(direction, cards, 1); Assert.That(afterDraw.Count == 1); Assert.That(afterDraw[0].Name == expectedName); }
public void Insert_Bottom_InsertsProperly() { var cardsHelper = new CardsHelper(); var cards = new List <Card>() { new Card { Name = "X" }, new Card { Name = "Y" }, new Card { Name = "Z" } }; var cardToInsert = new Card { Name = "A" }; cardsHelper.Insert(CollectionDirection.Bottom, cards, cardToInsert); Assert.That(cards.Count == 4); Assert.That(cards[3].Name == "A"); }
public void TestBoomSort() { List <Card> cards = new List <Card>(); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._4 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._5 }); cards.Add(new Card { Color = CardColor.Diamond, Weight = CardWeight._5 }); cards.Add(new Card { Color = CardColor.Heart, Weight = CardWeight._5 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._5 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._5 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._5 }); cards.Add(new Card { Color = CardColor.None, Weight = CardWeight.SJoker }); cards.Add(new Card { Color = CardColor.None, Weight = CardWeight.LJoker }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._2 }); cards.Add(new Card { Color = CardColor.Diamond, Weight = CardWeight._2 }); cards.Add(new Card { Color = CardColor.Heart, Weight = CardWeight._2 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._2 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._2 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._6 }); cards.Add(new Card { Color = CardColor.Diamond, Weight = CardWeight._6 }); cards.Add(new Card { Color = CardColor.Heart, Weight = CardWeight._6 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._6 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._6 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._6 }); CardsHelper.BoomSort(cards); cards.Log(); Debug.Log("=============================================="); CardsHelper.BoomSort(cards, false); cards.Log(); Assert.AreEqual(cards[cards.Count - 1].Weight, CardWeight._6); Assert.AreEqual(cards[cards.Count - 7].Weight, CardWeight._5); }
public void Test() { List <Card> cards = new List <Card>(); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._8 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._7 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._5 }); cards.Add(new Card { Color = CardColor.Diamond, Weight = CardWeight._5 }); cards.Add(new Card { Color = CardColor.Heart, Weight = CardWeight._5 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._9 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._10 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._4 }); cards.Add(new Card { Color = CardColor.Diamond, Weight = CardWeight._4 }); cards.Add(new Card { Color = CardColor.Heart, Weight = CardWeight._4 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._9 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._10 }); CardsHelper.Sort(cards); var list = AnalyseResult.Analyse(cards); foreach (AnalyseResult analyseResult in list) { Debug.Log(analyseResult); } Debug.Log("================================"); list.Sort(); foreach (AnalyseResult analyseResult in list) { Debug.Log(analyseResult); } Assert.AreEqual(list[0].Weight, CardWeight._3); Assert.AreEqual(list[1].Weight, CardWeight._4); Assert.AreEqual(list[2].Weight, CardWeight._5); Assert.AreEqual(list[list.Count - 1].Weight, CardWeight._8); }
/// <summary> /// 找出可带的牌 /// </summary> /// <param name="analyseResults"></param> /// <returns></returns> protected List <Tuple <Card, Card> > GetTwo(IReadOnlyList <AnalyseResult> analyseResults) { // 找出除王的单牌 List <AnalyseResult> oneAnalyseResults = analyseResults.Where(f => f.Count == 1 && !CardsHelper.IsJoker(f.Weight)).ToList(); // 找出除王的对子 List <AnalyseResult> twoAnalyseResults = analyseResults.Where(f => f.Count == 2 && !CardsHelper.IsJoker(f.Weight)).ToList(); // 可带的牌 List <Tuple <Card, Card> > cards = new List <Tuple <Card, Card> >(); // 单牌与对子的拆分组合 for (int i = 0; i < oneAnalyseResults.Count; i++) { Card a = oneAnalyseResults[i].Cards[0]; Card b = default; int next = i + 1; // 单牌没有了,拆分对子替补。 if (next > oneAnalyseResults.Count - 1) { if (twoAnalyseResults.Count == 0) { break; } b = twoAnalyseResults[0].Cards[0]; } else { b = oneAnalyseResults[next].Cards[0]; } cards.Add(new Tuple <Card, Card>(a, b)); } // 对子 for (int i = 0; i < twoAnalyseResults.Count; i++) { cards.Add(new Tuple <Card, Card>(twoAnalyseResults[i].Cards[0], twoAnalyseResults[i].Cards[1])); } return(cards); }
public void Invoke(AnalysisContext context) { // 1.搜寻炸弹 // a.先确定王的个数 // b.大于等于4张的炸弹 // c.王与炸弹的所有组合 // d.按照炸弹权重排序 List <AnalyseResult> jokerAnalyseResults = context.AnalyseResults.Where(f => CardsHelper.IsJoker(f.Weight)).ToList(); int jokerCount = jokerAnalyseResults.Sum(f => f.Count); // 不包括王,如果王有4张,就再最后的时候,把4张王单独添加。 List <AnalyseResult> boomResults = context.AnalyseResults.Where(f => f.Count >= 4 && !CardsHelper.IsJoker(f.Weight)).ToList(); for (int i = 0; i < boomResults.Count; i++) { var result = boomResults[i]; // 验证此牌是否能接目标牌型 if (context.CheckPop(result.Cards, CardType.Boom)) { context.Add(new PrompCards { CardType = CardType.Boom, Cards = result.Cards.ToList() }); } // 组合王 var boomCards = result.Cards.ToList(); for (int j = 0; j < jokerAnalyseResults.Count; j++) { AnalyseResult analyseResult = jokerAnalyseResults[j]; for (int k = 0; k < analyseResult.Count; k++) { var item = analyseResult.Cards[k]; boomCards.Add(item); // 每添加一个王,就向提示列表中,添加一种。 if (context.CheckPop(boomCards, CardType.Boom)) { context.Add(new PrompCards { CardType = CardType.Boom, Cards = boomCards.ToList() }); } } } } // 4张王,算最大的炸弹. 单独添加进提示列表 if (jokerCount == 4) { var jokerBoomCards = new List <Card>(); for (int i = 0; i < jokerAnalyseResults.Count; i++) { jokerBoomCards.AddRange(jokerAnalyseResults[i].Cards); } context.Add(new PrompCards { CardType = CardType.JokerBoom, Cards = jokerBoomCards }); } }
public void TestWeightSort() { List <Card> cards = new List <Card>(); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._3 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._8 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._7 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._5 }); cards.Add(new Card { Color = CardColor.Diamond, Weight = CardWeight._5 }); cards.Add(new Card { Color = CardColor.Heart, Weight = CardWeight._5 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._9 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._10 }); cards.Add(new Card { Color = CardColor.Club, Weight = CardWeight._4 }); cards.Add(new Card { Color = CardColor.Diamond, Weight = CardWeight._4 }); cards.Add(new Card { Color = CardColor.Heart, Weight = CardWeight._4 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._9 }); cards.Add(new Card { Color = CardColor.Spade, Weight = CardWeight._10 }); CardsHelper.WeightSort(cards); cards.Log(); Assert.AreEqual(cards[0].Weight, CardWeight._3); Assert.AreEqual(cards[1].Weight, CardWeight._3); Assert.AreEqual(cards[2].Weight, CardWeight._3); Assert.AreEqual(cards[cards.Count - 2].Weight, CardWeight._7); Assert.AreEqual(cards[cards.Count - 1].Weight, CardWeight._8); }
/// <summary> /// Copies this instance to the specified target. /// </summary> /// <param name="target">The target.</param> /// <param name="progressDelegate">The progress delegate.</param> public void CopyTo(ICopy target, CopyToProgress progressDelegate) { CardsHelper.Copy(this, target as ICards, progressDelegate); }
public void Invoke(AnalysisContext context) { // 符合3张的所有牌类 List <AnalyseResult> doubleAnalyseResults = context.AnalyseResults.Where(f => f.Count >= 3 && !CardsHelper.IsJoker(f.Weight)).ToList(); foreach (AnalyseResult analyseResult in doubleAnalyseResults) { if (context.CheckPop(analyseResult.Cards)) { context.Add(new PrompCards { Cards = analyseResult.Cards.GetRange(0, 3), CardType = context.TargetType }); } } }