using System; using System.Collections.Generic; using TheGameExtreme.model.card; using TheGameExtreme.model.deck; using TheGameExtreme.model.@event; using TheGameExtreme.model.piles; namespace TheGameExtreme.model.gameActions.abstractRules { public abstract class GameMode { protected List gameActions; public Piles Piles { get; protected set; } public int NbCardAtBeginOfTurn { get; set; } protected Deck deck; protected int nbMaxCard; public string Message { get; set; } protected bool end; #region public event EventHandler EndGame; public event EventHandler PlayerChanged; protected internal void OnEndGame(EventArgs args) { EndGame?.Invoke(this, args); } protected internal void OnPlayerChanged(PlayerChangedEventArgs args) { PlayerChanged?.Invoke(this, args); } #endregion protected GameMode(Piles piles, Deck deck) { gameActions = new List(); Piles = piles; this.deck = deck; } public abstract void load(int nbPlayer, List players); protected void defineNbMaxCard(int nbPlayer) { switch (nbPlayer) { case 1: nbMaxCard = 8; NbCardAtBeginOfTurn = 8; break; case 2: nbMaxCard = 7; NbCardAtBeginOfTurn = 7; break; default: nbMaxCard = 6; NbCardAtBeginOfTurn = 6; break; } } protected void quickSort(List ar, int start, int end) { if (start < end) { Card pivot = ar[end]; int pIndex = start; Card swap; for (int i = start; i < end; i++) { if (ar[i].Value.CompareTo(pivot.Value) < 0) { swap = ar[pIndex]; ar[pIndex] = ar[i]; ar[i] = swap; pIndex++; } } ar[end] = ar[pIndex]; ar[pIndex] = pivot; quickSort(ar, start, pIndex - 1); quickSort(ar, pIndex + 1, end); } } protected void distribueCard(List players) { players.ForEach(player => { for (int i = 0; i < nbMaxCard; i++) { int r = new Random().Next(0, deck.size() - 1); player.pioche(deck.getCard(r)); deck.removeAt(r); } List cards = player.getCardList(); quickSort(cards, 0, cards.Count - 1); }); } public abstract void pioche(List currentHand, Player player); public abstract bool playCard(decimal valueCard, List currentHand, int orderedStackSelected, Player player, List CurrentCardPlayed); public abstract bool endTurn(List currentHand, List CurrentCardPlayed, Player player); public abstract void TestEndGame(List currentHand); public string getScore() { return deck.size().ToString(); } } }