Exemplo n.º 1
0
        private void NewGame()
        {
            cells = new OpenCell[4];
            for (int i = 0; i < 4; i++)
            {
                int xc = Width / 2 - Width / 8 * (i + 1);
                cells[i]   = new OpenCell();
                cells[i].X = xc;
                cells[i].Y = 0;
            }

            foundations = new Foundation[4];
            for (int i = 0; i < 4; ++i)
            {
                foundations[i] = new Foundation(i, Width / 2 + Width / 8 * i, 0);
            }
            //deck = new deck();
            tableau = new Tableau(new deck(), 0, Card.CardHeight + 20, Width);

            gameData = new Stack <GameData>();

            selectedOrderedCascade = null;
            selectedCellWithCard   = null;

            // save initial game state, to be able to restart the game
            initialGameState = new GameData(tableau, foundations, cells, selectedOrderedCascade, selectedCellWithCard);
        }
Exemplo n.º 2
0
        public OrderedCascade SelectOrderedCascade(Card card)
        {
            if (cards.Count == 0)
            {
                return(null);
            }

            OrderedCascade cascade = new OrderedCascade(this);

            cascade.Add(card);
            LinkedListNode <Card> node = cards.Find(card);

            node = node.Next;
            while (node != null)
            {
                if (!IsOrderedCards(node.Previous.Value, node.Value))
                {
                    return(null);
                }
                cascade.Add(node.Value);
                node = node.Next;
            }

            return(cascade);
        }
Exemplo n.º 3
0
 private void InitGameFromState(GameData state)
 {
     tableau                = state.Tableau;
     foundations            = state.Foundations;
     cells                  = state.Cells;
     selectedCellWithCard   = state.SelectedCellWithCard;
     selectedOrderedCascade = state.SelectedOrderedCascade;
 }
Exemplo n.º 4
0
 private void UnselectOrderedCascade()
 {
     if (selectedOrderedCascade != null)
     {
         selectedOrderedCascade.SetSelected(false);
         selectedOrderedCascade = null;
     }
 }
Exemplo n.º 5
0
        private void SelectOrderedCascadeFromCascade(Cascade cascade, int mouseX, int mouseY)
        {
            Card           card           = cascade.SelectCard(mouseX, mouseY);
            OrderedCascade orderedCascade = cascade.SelectOrderedCascade(card);

            if (orderedCascade != null)
            {
                UnselectOrderedCascade();
                UnselectCellWithCard(false);
                selectedOrderedCascade = orderedCascade;
                selectedOrderedCascade.SetSelected(true);
            }
        }
Exemplo n.º 6
0
        public bool TryMove(OrderedCascade orderedCascade)
        {
            if (cell.Count == 0 && orderedCascade.Cards.Count == 1)
            {
                Card card = orderedCascade.Cards.Last.Value;
                card.X = x;
                card.Y = y;
                cell.Push(card);
                orderedCascade.Cascade.Cards.Remove(card);
                return(true);
            }

            return(false);
        }
Exemplo n.º 7
0
        public bool TryMoveOrderedCascade(OrderedCascade orderedCascade)
        {
            if (orderedCascade.Count == 1)
            {
                Card cardToMove = orderedCascade.GetFirst();
                if (TryAddCard(cardToMove))
                {
                    orderedCascade.Cascade.Cards.Remove(cardToMove);
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 8
0
        public GameData(Tableau tableau, Foundation[] foundations, OpenCell[] cells, OrderedCascade selectedOrderedCascade, OpenCell selectedCell)
        {
            Cells = new OpenCell[cells.Length];
            for (int i = 0; i < 4; i++)
            {
                Cells[i]   = new OpenCell();
                Cells[i].X = cells[i].X;
                Cells[i].Y = cells[i].Y;
                Card card = cells[i].Top();
                if (card != null)
                {
                    Cells[i].Push(card.GetCopy());
                    if (selectedCell != null && card.IsEqual(selectedCell.Top()))
                    {
                        SelectedCellWithCard = Cells[i];
                    }
                }
            }

            Foundations = new Foundation[4];
            for (int i = 0; i < 4; ++i)
            {
                Foundations[i] = new Foundation(foundations[i].Suit, foundations[i].X, foundations[i].Y);
                Card card = foundations[i].Top();
                if (card != null)
                {
                    Foundations[i].Push(card.GetCopy());
                }
            }

            Tableau = tableau.GetCopy();

            if (selectedOrderedCascade != null)
            {
                SelectedOrderedCascade = Tableau.FindOrderedCascadeByCard(selectedOrderedCascade.Cards.First.Value);
            }
        }
Exemplo n.º 9
0
        public bool TryMoveOrderedCascade(OrderedCascade orderedCascade, int maxNumberOfSuperMoves)
        {
            if (orderedCascade.Count > maxNumberOfSuperMoves)
            {
                return(false);
            }
            Card cardToMove = orderedCascade.GetFirst();

            if (cards.Count == 0 || IsOrderedCards(cards.Last.Value, cardToMove))
            {
                foreach (Card c in orderedCascade.Cards)
                {
                    c.X = x;
                    c.Y = y + cards.Count * DeltaCardY;
                    cards.AddLast(c);
                    orderedCascade.Cascade.Cards.Remove(c);
                }
                return(true);
            }
            else
            {
                return(false);
            }
        }