示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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));
        }
示例#4
0
        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);
        }
示例#5
0
 public void AddInitialCardsToPlayers(Deck stack, int initialNumberOfCardsInHand)
 {
     foreach (var client in Clients)
     {
         client.Value.OnHand = CardsHelper.GetInitialCards(stack, initialNumberOfCardsInHand);
     }
 }
示例#6
0
        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);
        }
示例#7
0
 protected virtual void UpdateCanGoNext()
 {
     CanGoNext = CardsHelper.IsValidNumber(CardNumber.Without(' ')) &&
                 CardsHelper.IsValidCvc(Cvv) &&
                 CardsHelper.IsValidExpirationDate(ExpirationDate) &&
                 !string.IsNullOrWhiteSpace(CardHolder);
 }
示例#8
0
        public void TestSort()
        {
            List <Card> cards = new List <Card>(54);

            // 生成一副新牌
            CardsHelper.Spawn(cards);
            CardsHelper.Shuffle(cards);
            CardsHelper.Sort(cards);
            cards.Log();
        }
示例#9
0
        public void TestSpawn()
        {
            List <Card> cards = new List <Card>(54);

            // 生成一副新牌
            CardsHelper.Spawn(cards);

            cards.Log();

            // 54张牌
            Assert.AreEqual(cards.Count, 54);
        }
示例#10
0
        public void TestShuffle4()
        {
            // 两幅牌
            List <Card> cards = new List <Card>(108);

            // 生成一副新牌
            CardsHelper.Spawn(cards);
            // 生成一副新牌
            CardsHelper.Spawn(cards);

            CardsHelper.Shuffle1(cards);
            CardsHelper.Shuffle2(cards);
            cards.Log();
        }
示例#11
0
        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();
        }
示例#12
0
        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);
        }
示例#13
0
        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();
        }
示例#14
0
        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);
        }
示例#15
0
        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);
        }
示例#16
0
        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);
        }
示例#17
0
        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);
        }
示例#18
0
        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);
        }
示例#19
0
        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");
        }
示例#20
0
        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);
        }
示例#21
0
        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);
        }
示例#22
0
        /// <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);
        }
示例#23
0
        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
                });
            }
        }
示例#24
0
        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);
        }
示例#25
0
 /// <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);
 }
示例#26
0
        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
                    });
                }
            }
        }