✨
This commit is contained in:
117
Logic/GameLogic.cs
Normal file
117
Logic/GameLogic.cs
Normal file
@ -0,0 +1,117 @@
|
||||
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<int> deck;
|
||||
public List<IGameEntity> Entities;
|
||||
private Texture2D _SpriteSheet;
|
||||
|
||||
public List<CardPosition> DeckHidden = new List<CardPosition>();
|
||||
public List<CardPosition> DeckRevealed = new List<CardPosition>();
|
||||
|
||||
private void Shuffle<T>(List<T> 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<int> GenerateDeck() {
|
||||
List<int> newDeck = new List<int>();
|
||||
|
||||
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<IGameEntity> entities, Texture2D _spriteSheet) {
|
||||
deck = GenerateDeck();
|
||||
Entities = entities;
|
||||
|
||||
_SpriteSheet = _spriteSheet;
|
||||
PlayCards();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user