Example #1
0
        /// <summary>
        /// Handles Source deck touch. Moves card to Waste deck
        /// </summary>
        /// <param name="tl"></param>
        /// <returns></returns>
        public override Card HandleTouch(TouchLocation tl)
        {
            Card ret = null;

            foreach (Card c in m_cards)
            {
                if (c.isInTouch(tl))
                {
                    // Take most upper cards from the deck
                    if (ret != null && ret.m_z < c.m_z)
                    {
                        ret = c;
                    }
                    else if (ret == null)
                    {
                        ret = c;
                    }
                }
            }

            if (ret != null)
            {
                // If card found, turn it
                ret.setTurned(true);
                // and move to waste deck
                RemoveCard(ret);
                p_wasteDeck.AddCard(ret);
            }
            else
            {
                // Source deck is empty
                // Copy cards back to source deck from waste
                if (IsInTouch(tl) && CardCount() == 0)
                {
                    for (int i = 0; i < p_wasteDeck.CardCount(); i++)
                    {
                        Card lastCard = p_wasteDeck.RemoveLast();
                        lastCard.setTurned(false);
                        AddCard(lastCard);
                        i--;
                    }
                }
            }

            return(null);
        }
Example #2
0
        /// <summary>
        /// Create Deck list from SolitaireDataList
        /// </summary>
        /// <param name="toDeckList"></param>
        /// <param name="allCards"></param>
        public void ReadDeckDataToList(ref List <Deck> toDeckList, ref List <Card> allCards)
        {
            Deck userDeck1 = null;
            Deck userDeck2 = null;
            Deck userDeck3 = null;
            Deck userDeck4 = null;
            Deck userDeck5 = null;
            Deck userDeck6 = null;
            Deck userDeck7 = null;

            TargetDeck targetDeck1 = null;
            TargetDeck targetDeck2 = null;
            TargetDeck targetDeck3 = null;
            TargetDeck targetDeck4 = null;

            SourceDeck sourceDeck = null;
            WasteDeck  wasteDeck  = null;

            // Find right decks, have to use internal deck id for matching
            for (int i = 0; i < toDeckList.Count(); i++)
            {
                Deck deck = toDeckList[i];
                if (deck.InternalDeckId() == 10)
                {
                    userDeck1 = deck;
                }
                else if (deck.InternalDeckId() == 20)
                {
                    userDeck2 = deck;
                }
                else if (deck.InternalDeckId() == 30)
                {
                    userDeck3 = deck;
                }
                else if (deck.InternalDeckId() == 40)
                {
                    userDeck4 = deck;
                }
                else if (deck.InternalDeckId() == 50)
                {
                    userDeck5 = deck;
                }
                else if (deck.InternalDeckId() == 60)
                {
                    userDeck6 = deck;
                }
                else if (deck.InternalDeckId() == 70)
                {
                    userDeck7 = deck;
                }
                else if (deck.InternalDeckId() == 100)
                {
                    targetDeck1 = (TargetDeck)deck;
                }
                else if (deck.InternalDeckId() == 200)
                {
                    targetDeck2 = (TargetDeck)deck;
                }
                else if (deck.InternalDeckId() == 300)
                {
                    targetDeck3 = (TargetDeck)deck;
                }
                else if (deck.InternalDeckId() == 400)
                {
                    targetDeck4 = (TargetDeck)deck;
                }
                else if (deck.InternalDeckId() == 1000)
                {
                    sourceDeck = (SourceDeck)deck;
                }
                else if (deck.InternalDeckId() == 2000)
                {
                    wasteDeck = (WasteDeck)deck;
                }
            }

            // Add cards into right decks
            for (int i = 0; i < m_list.Count(); i++)
            {
                // Tombstoned card data list
                SolitaireData data = m_list[i];

                // Find card class
                Card c = findCard(ref allCards, data.m_land, data.m_id);
                if (c == null)
                {
                    break;
                }
                c.setTurned(data.m_isTurned);

                // Set card into right deck
                switch (data.m_internalDeckId)
                {
                case 10:
                {
                    userDeck1.AddCard(c);
                    break;
                }

                case 20:
                {
                    userDeck2.AddCard(c);
                    break;
                }

                case 30:
                {
                    userDeck3.AddCard(c);
                    break;
                }

                case 40:
                {
                    userDeck4.AddCard(c);
                    break;
                }

                case 50:
                {
                    userDeck5.AddCard(c);
                    break;
                }

                case 60:
                {
                    userDeck6.AddCard(c);
                    break;
                }

                case 70:
                {
                    userDeck7.AddCard(c);
                    break;
                }

                case 100:
                {
                    targetDeck1.AddCard(c);
                    break;
                }

                case 200:
                {
                    targetDeck2.AddCard(c);
                    break;
                }

                case 300:
                {
                    targetDeck3.AddCard(c);
                    break;
                }

                case 400:
                {
                    targetDeck4.AddCard(c);
                    break;
                }

                case 1000:
                {
                    sourceDeck.AddCard(c);
                    break;
                }

                case 2000:
                {
                    wasteDeck.AddCard(c);
                    break;
                }
                }
            }
        }