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); }
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); }
private void InitGameFromState(GameData state) { tableau = state.Tableau; foundations = state.Foundations; cells = state.Cells; selectedCellWithCard = state.SelectedCellWithCard; selectedOrderedCascade = state.SelectedOrderedCascade; }
private void UnselectOrderedCascade() { if (selectedOrderedCascade != null) { selectedOrderedCascade.SetSelected(false); selectedOrderedCascade = null; } }
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); } }
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); }
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); }
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); } }
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); } }