using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System.Collections.Generic; using Solitaire.Entities; using System.Linq; namespace Solitaire.Logic { public class GameLogic { public List deck; public List Entities; private Texture2D _SpriteSheet; public List DeckHidden = new List(); public List DeckRevealed = new List(); private void Shuffle(List list) { System.Random random = new System.Random(); int n = list.Count; while (n > 1) { int k = random.Next(n); n--; T temp = list[k]; list[k] = list[n]; list[n] = temp; } } private List GenerateDeck() { List newDeck = new List(); int i = 0; while (i < 52) { newDeck.Add(i++); } Shuffle(newDeck); return newDeck; } private Card DrawCard() { Card card = new Card( deck[0], true, new Vector2(0,0), _SpriteSheet ); deck.RemoveAt(0); return card; } private void PlayCards() { Card card; CardPosition lastCard; for (int i = 0; i < 7; i++) { card = null; lastCard = new CardPosition(new Vector2(14 + (i * 40),60)); Entities.Add(lastCard); for (int n = 0; n <= i; n ++) { card = DrawCard(); card.parent = lastCard; lastCard.child = card; Entities.Add((Card)card); lastCard = card; } card.UnHide(); } CardPosition topPile; for (int i = 0; i < 4; i++) { topPile = new CardPosition(new Vector2(134 + (i * 40),8)); topPile.TopPile = true; Entities.Add(topPile); } CardPosition deckHidden = new EmptyDeck(new Vector2(14, 8)); deckHidden.Deck = true; deckHidden.DrawOrder = 100; DeckHidden.Add(deckHidden); Entities.Add(deckHidden); CardPosition deckRevealed = new CardPosition(new Vector2(54, 8)); deckRevealed.Deck = true; DeckRevealed.Add(deckRevealed); while (deck.Count() > 0) { card = DrawCard(); card.parent = DeckHidden.Last(); card.Offset = 0; card.Deck = true; DeckHidden.Last().child = card; DeckHidden.Add(card); Entities.Add(card); } } public void FlipDeck() { CardPosition card; while (DeckRevealed.Count() > 1) { card = DeckRevealed.Last(); card.child = null; ((Card)card).parent = DeckHidden.Last(); DeckHidden.Last().child = card; DeckRevealed.Remove(card); DeckHidden.Add(card); ((Card)card).Hide(); ((Card)card).SetPosition(new Vector2(0,0)); card.DrawOrder = ((Card)card).parent.DrawOrder + 1; } } public GameLogic(List entities, Texture2D _spriteSheet) { deck = GenerateDeck(); Entities = entities; _SpriteSheet = _spriteSheet; PlayCards(); } } }