예제 #1
0
        public void TestMethod1()
        {
            var result = CardListGenerator.GenerateDoubleJokerCardList();

            // 54枚のカードのリストか?
            Assert.AreEqual(54, result.Count);

            // 各カードは一枚づつか?
            foreach (CardId id in Enum.GetValues(typeof(CardId)))
            {
                Assert.AreEqual(1, result.Count(e => e.Id == id));
            }

            // 各カードのSuitのNumberの検証
            Assert.AreEqual(2, result.Count(e => e.Suit == Suit.None));
            Assert.AreEqual(13, result.Count(e => e.Suit == Suit.Spades));
            Assert.AreEqual(13, result.Count(e => e.Suit == Suit.Hearts));
            Assert.AreEqual(13, result.Count(e => e.Suit == Suit.Diamonds));
            Assert.AreEqual(13, result.Count(e => e.Suit == Suit.Clubs));

            Assert.AreEqual(2, result.Count(e => e.Rank == Rank.None));
            Assert.AreEqual(4, result.Count(e => e.Rank == Rank.Ace));
            Assert.AreEqual(4, result.Count(e => e.Rank == Rank.Two));
            Assert.AreEqual(4, result.Count(e => e.Rank == Rank.Three));
            Assert.AreEqual(4, result.Count(e => e.Rank == Rank.Four));
            Assert.AreEqual(4, result.Count(e => e.Rank == Rank.Five));
            Assert.AreEqual(4, result.Count(e => e.Rank == Rank.Six));
            Assert.AreEqual(4, result.Count(e => e.Rank == Rank.Seven));
            Assert.AreEqual(4, result.Count(e => e.Rank == Rank.Eight));
            Assert.AreEqual(4, result.Count(e => e.Rank == Rank.Nine));
            Assert.AreEqual(4, result.Count(e => e.Rank == Rank.Ten));
            Assert.AreEqual(4, result.Count(e => e.Rank == Rank.Jack));
            Assert.AreEqual(4, result.Count(e => e.Rank == Rank.Queen));
            Assert.AreEqual(4, result.Count(e => e.Rank == Rank.King));
        }
        public static Klondike Generate()
        {
            var dictionary = new Dictionary <Card, IPosition>();

            var cards = CardListGenerator.GenerateNoJokerShuffledCardList();

            var cardListIndex = 0;

            foreach (Column column in Enum.GetValues(typeof(Column)))
            {
                for (var i = 0; i < (int)column; i++)
                {
                    dictionary.Add(cards[cardListIndex++], new Tableau(column, i, false));
                }

                dictionary.Add(cards[cardListIndex++], new Tableau(column, (int)column, true));
            }

            for (int i = 0; cardListIndex < cards.Count; i++)
            {
                dictionary.Add(cards[cardListIndex++], new Stock(i));
            }


            return(new Klondike(dictionary));
        }
        public static Pyramid GeneratePyramid()
        {
            var dictionary = new Dictionary <Card, IPosition>();

            var cardList = CardListGenerator.GenerateNoJokerShuffledCardList();

            var cardListIndex = 0;

            for (int row = Field.RowMin; row < Field.RowMaxCount; row++)
            {
                for (int number = 0; number <= row; number++)
                {
                    dictionary.Add(cardList[cardListIndex++], new Field(row, number));
                }
            }

            // 残りは山札
            for (int i = 0; cardListIndex < cardList.Count; i++)
            {
                dictionary.Add(cardList[cardListIndex++], new Deck(i));
            }

            // ジョーカー2枚はフリースペースに
            dictionary.Add(Card.Joker, new FreeSpace(0));
            dictionary.Add(Card.ExtraJoker, new FreeSpace(1));

            return(new Pyramid(dictionary));
        }
예제 #4
0
 /// <summary>
 /// 全てのカードを山札に配置したCalculationを生成する。
 /// </summary>
 /// <returns>生成したCalculation</returns>
 public static Calculation GenerateAllStockGame()
 {
     return(new Calculation(
                CardListGenerator.GenerateNoJokerShuffledCardList()
                .Select((card, index) => (card, index))
                .ToDictionary(pair => pair.card,
                              pair => (IPosition) new Stock(pair.index))));
 }
예제 #5
0
        public void TestMethod2()
        {
            var result = CardListGenerator.GenerateSingleJokerCardList();

            // ExtraJokerを除く53枚のカードか
            Assert.AreEqual(53, result.Count);
            Assert.IsFalse(result.Contains(Card.ExtraJoker));
        }
예제 #6
0
        public void TestMethod3()
        {
            var result = CardListGenerator.GenerateNoJokerCardList();

            // Joker,ExtraJokerを除く52枚のカードか
            Assert.AreEqual(52, result.Count);
            Assert.IsFalse(result.Contains(Card.Joker));
            Assert.IsFalse(result.Contains(Card.ExtraJoker));
        }
        public static FreeCell Generate()
        {
            var dictionary = new Dictionary <Card, IPosition>();

            var cards = CardListGenerator.GenerateNoJokerShuffledCardList();

            var cardListIndex = 0;

            foreach (Column column in Enum.GetValues(typeof(Column)))
            {
                for (var i = 0; i < (column <= Column.Fourth ? 7 : 6); i++)
                {
                    dictionary.Add(cards[cardListIndex++], new Tableau(column, i));
                }
            }


            return(new FreeCell(dictionary));
        }
예제 #8
0
        /// <summary>
        /// 各台札にA,2,3,4を配置したCalculationを生成する。
        /// </summary>
        /// <returns>生成したCalculation</returns>
        public static Calculation Generate()
        {
            var dictionary = new Dictionary <Card, IPosition>();

            var cards = CardListGenerator.GenerateNoJokerShuffledCardList();

            var ace = cards.First(e => e.Rank == Rank.Ace);

            dictionary.Add(ace, new Foundation(FoundationColumn.First));
            cards.Remove(ace);

            var two = cards.First(e => e.Rank == Rank.Two);

            dictionary.Add(two, new Foundation(FoundationColumn.Second));
            cards.Remove(two);

            var three = cards.First(e => e.Rank == Rank.Three);

            dictionary.Add(three, new Foundation(FoundationColumn.Third));
            cards.Remove(three);

            var four = cards.First(e => e.Rank == Rank.Four);

            dictionary.Add(four, new Foundation(FoundationColumn.Fourth));
            cards.Remove(four);

            var drawCard = cards[0];

            dictionary.Add(drawCard, new WastePile());
            cards.Remove(drawCard);

            for (int i = 0; i < cards.Count; i++)
            {
                dictionary.Add(cards[i], new Stock(i));
            }


            return(new Calculation(dictionary));
        }
예제 #9
0
        public static NotFantanDomino Generate()
        {
            var cardList = CardListGenerator.GenerateNoJokerShuffledCardList();

            var dictionary = new Dictionary <Card, Position>();

            while (cardList.Count() > 0)
            {
                foreach (var playerNumber in Enum.GetValues(typeof(PlayerNumber)))
                {
                    dictionary.Add(cardList.Dequeue(), (Position)playerNumber);

                    if (cardList.Count() <= 0)
                    {
                        break;
                    }
                }
            }


            return(new NotFantanDomino(dictionary));
        }
예제 #10
0
 /// <summary>
 /// ジョーカー2枚のGolfを生成
 /// </summary>
 /// <param name="canLoop">AとK(13)の間で行き来できるか。</param>
 /// <returns>生成したGolf</returns>
 public static Golf GenerateDoubleJokerGolf(bool canLoop)
 {
     return(GenerateGolf(CardListGenerator.GenerateDoubleJokerShuffledCardList(), canLoop));
 }