From d19e9ab6f1f53ba0c238fd4a9c83170015a2d450 Mon Sep 17 00:00:00 2001 From: cldupland Date: Mon, 2 Dec 2019 12:00:58 +0100 Subject: [PATCH] =?UTF-8?q?Modification=20de=20la=20g=C3=A9n=C3=A9ration?= =?UTF-8?q?=20des=20fractions,=20des=20placements=20et=20d=C3=A9but=20d'im?= =?UTF-8?q?pl=C3=A9mentation=20du=20pas=20pour=20les=20fractions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Documentations/Instruction | 5 +- TheGameExtreme/TheGameExtreme.csproj | 1 + TheGameExtreme/model/Parametreur.cs | 3 +- TheGameExtreme/model/deck/FractionDeck.cs | 24 +++++- .../{ => abstractRules}/GameAction.cs | 2 +- .../{classic => abstractRules}/GameMode.cs | 70 +++-------------- .../abstractRules/JouerUneCarte.cs | 21 +++++ .../gameActions/abstractRules/Piocher.cs | 17 ++++ .../abstractRules/TerminerSonTour.cs | 31 ++++++++ .../gameActions/classic/GameModeClassic.cs | 78 +++++++++++++++++++ ...uerUneCarte.cs => JouerUneCarteClassic.cs} | 12 ++- .../classic/{Piocher.cs => PiocherClassic.cs} | 12 +-- ...erSonTour.cs => TerminerSonTourClassic.cs} | 28 ++----- .../gameActions/decimals/GameModeDecimal.cs | 23 ++++-- .../decimals/JouerUneCarteDecimal.cs | 38 ++++++++- .../decimals/TerminerSonTourDecimal.cs | 21 ++++- .../extreme/ExtremeJouerUneCarte.cs | 14 +++- .../model/gameActions/extreme/ExtremeMode.cs | 29 ++++++- .../gameActions/extreme/ExtremePiocher.cs | 10 ++- .../extreme/ExtremeTerminerSonTour.cs | 19 ++++- TheGameExtreme/model/manager/GameManager.cs | 1 - TheGameExtreme/view/MainPage.xaml.cs | 38 ++++++--- TheGameExtreme/view/TouchManipulationCard.cs | 16 ++-- TheGameExtreme/viewmodel/Main.cs | 7 +- 24 files changed, 381 insertions(+), 139 deletions(-) rename TheGameExtreme/model/gameActions/{ => abstractRules}/GameAction.cs (85%) rename TheGameExtreme/model/gameActions/{classic => abstractRules}/GameMode.cs (57%) create mode 100644 TheGameExtreme/model/gameActions/abstractRules/JouerUneCarte.cs create mode 100644 TheGameExtreme/model/gameActions/abstractRules/Piocher.cs create mode 100644 TheGameExtreme/model/gameActions/abstractRules/TerminerSonTour.cs create mode 100644 TheGameExtreme/model/gameActions/classic/GameModeClassic.cs rename TheGameExtreme/model/gameActions/classic/{JouerUneCarte.cs => JouerUneCarteClassic.cs} (82%) rename TheGameExtreme/model/gameActions/classic/{Piocher.cs => PiocherClassic.cs} (69%) rename TheGameExtreme/model/gameActions/classic/{TerminerSonTour.cs => TerminerSonTourClassic.cs} (67%) diff --git a/Documentations/Instruction b/Documentations/Instruction index bd9455b..5db19cd 100644 --- a/Documentations/Instruction +++ b/Documentations/Instruction @@ -2,4 +2,7 @@ Mono-utilisateur: - Multilangue - Changer les thèmes et les couleurs (en option) V => pour l'instant thème blanc et noir - Option pour mettre/enlever le pas de 10 - - gérer les différents pas pour les différents deck (multiples, etc...) \ No newline at end of file + - gérer les différents pas pour les différents deck (multiples, etc...) + - Largeur carte pour millième V + - Génération fraction -> toutes celles qui ont un chiffre au numérateur et/ou au dénominateur unique + les fractions ayant un numérateur et un dénominateur entre 1 et 25 puis si non suffisant, entre 1 et 50 + - Bluetooth \ No newline at end of file diff --git a/TheGameExtreme/TheGameExtreme.csproj b/TheGameExtreme/TheGameExtreme.csproj index 614aeac..416b90d 100644 --- a/TheGameExtreme/TheGameExtreme.csproj +++ b/TheGameExtreme/TheGameExtreme.csproj @@ -29,6 +29,7 @@ + diff --git a/TheGameExtreme/model/Parametreur.cs b/TheGameExtreme/model/Parametreur.cs index 9b63a37..b1e0da0 100644 --- a/TheGameExtreme/model/Parametreur.cs +++ b/TheGameExtreme/model/Parametreur.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; -using TheGameExtreme.model.gameActions.classic; -using TheGameExtreme.model.piles; +using TheGameExtreme.model.gameActions.abstractRules; namespace TheGameExtreme.model { diff --git a/TheGameExtreme/model/deck/FractionDeck.cs b/TheGameExtreme/model/deck/FractionDeck.cs index 72e86b2..1b1d361 100644 --- a/TheGameExtreme/model/deck/FractionDeck.cs +++ b/TheGameExtreme/model/deck/FractionDeck.cs @@ -12,11 +12,29 @@ namespace TheGameExtreme.model.deck public FractionDeck(int nbCard, decimal borneMin, decimal borneMax) : base(nbCard) { Random random = new Random(); + + for (int j = 1; j < 10; j++) + { + for (int i = 1; i < 10; i++) + { + if (deck.Count < nbCard) + { + InsertionDichotomique(deck, 0, deck.Count - 1, new FractionCard(new Fraction(i, j))); + } + else + { + return; + } + } + } + while (deck.Count < nbCard) { - int numerateur = random.Next(1, 99); - int denominateur = random.Next(1, 99); - if ((decimal)(numerateur / denominateur) > borneMin && (decimal)(numerateur / denominateur) < borneMax) + int numerateur = random.Next(10, 25); + int denominateur = random.Next(10, 25); + + decimal d = (decimal)numerateur / (decimal)denominateur; + if (d.CompareTo(borneMin) > 0 && d.CompareTo(borneMax) < 0) { int pgcd = PGCD(numerateur, denominateur); while (pgcd != 1) diff --git a/TheGameExtreme/model/gameActions/GameAction.cs b/TheGameExtreme/model/gameActions/abstractRules/GameAction.cs similarity index 85% rename from TheGameExtreme/model/gameActions/GameAction.cs rename to TheGameExtreme/model/gameActions/abstractRules/GameAction.cs index adcd739..e684c6a 100644 --- a/TheGameExtreme/model/gameActions/GameAction.cs +++ b/TheGameExtreme/model/gameActions/abstractRules/GameAction.cs @@ -1,7 +1,7 @@ using System; using TheGameExtreme.model.piles; -namespace TheGameExtreme.model.gameActions +namespace TheGameExtreme.model.gameActions.abstractRules { public abstract class GameAction { diff --git a/TheGameExtreme/model/gameActions/classic/GameMode.cs b/TheGameExtreme/model/gameActions/abstractRules/GameMode.cs similarity index 57% rename from TheGameExtreme/model/gameActions/classic/GameMode.cs rename to TheGameExtreme/model/gameActions/abstractRules/GameMode.cs index f615fb9..82277f8 100644 --- a/TheGameExtreme/model/gameActions/classic/GameMode.cs +++ b/TheGameExtreme/model/gameActions/abstractRules/GameMode.cs @@ -5,11 +5,10 @@ using TheGameExtreme.model.deck; using TheGameExtreme.model.@event; using TheGameExtreme.model.piles; -namespace TheGameExtreme.model.gameActions.classic +namespace TheGameExtreme.model.gameActions.abstractRules { - public class GameMode + public abstract class GameMode { - protected List gameActions; public Piles Piles { get; protected set; } public int NbCardAtBeginOfTurn { get; set; } @@ -35,22 +34,14 @@ namespace TheGameExtreme.model.gameActions.classic #endregion - public GameMode(Piles piles, Deck deck) + protected GameMode(Piles piles, Deck deck) { gameActions = new List(); Piles = piles; this.deck = deck; } - public void load(int nbPlayer, List players) - { - gameActions.Add(new Piocher(Piles)); - gameActions.Add(new JouerUneCarte(Piles)); - gameActions.Add(new TerminerSonTour(Piles)); - - defineNbMaxCard(nbPlayer); - distribueCard(players); - } + public abstract void load(int nbPlayer, List players); protected void defineNbMaxCard(int nbPlayer) { @@ -109,60 +100,17 @@ namespace TheGameExtreme.model.gameActions.classic deck.removeAt(r); } List cards = player.getCardList(); - quickSort(cards, 0, cards.Count-1); + quickSort(cards, 0, cards.Count - 1); }); } - public void pioche(List currentHand, Player player) - { - Message = null; - ((Piocher)gameActions[0]).pioche(currentHand, deck, player, nbMaxCard); - quickSort(currentHand, 0, currentHand.Count - 1); - } + public abstract void pioche(List currentHand, Player player); - public bool playCard(decimal valueCard, List currentHand, int orderedStackSelected, Player player, List CurrentCardPlayed) - { - Message = null; - if (((JouerUneCarte)gameActions[1]).play(valueCard, currentHand, orderedStackSelected, player, CurrentCardPlayed)) - { - return true; - } - else - { - Message = ((JouerUneCarte)gameActions[1]).ErrorMessage; - return false; - } - } + public abstract bool playCard(decimal valueCard, List currentHand, int orderedStackSelected, Player player, List CurrentCardPlayed); - public bool endTurn(List currentHand, List CurrentCardPlayed, Player player) - { - Message = null; - if (((TerminerSonTour)gameActions[2]).end(currentHand, CurrentCardPlayed)) - { - pioche(currentHand, player); - CurrentCardPlayed.Clear(); - OnPlayerChanged(null); - return end; - } - else - { - Message = ((TerminerSonTour)gameActions[2]).ErrorMessage; - return false; - } - } + public abstract bool endTurn(List currentHand, List CurrentCardPlayed, Player player); - public void TestEndGame(List currentHand) - { - if (((TerminerSonTour)gameActions[2]).Test(currentHand)) - { - end = false; - } - else - { - OnEndGame(new EventArgs()); - end = true; - } - } + public abstract void TestEndGame(List currentHand); public string getScore() { diff --git a/TheGameExtreme/model/gameActions/abstractRules/JouerUneCarte.cs b/TheGameExtreme/model/gameActions/abstractRules/JouerUneCarte.cs new file mode 100644 index 0000000..5dce339 --- /dev/null +++ b/TheGameExtreme/model/gameActions/abstractRules/JouerUneCarte.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using TheGameExtreme.model.card; +using TheGameExtreme.model.piles; + +namespace TheGameExtreme.model.gameActions.abstractRules +{ + public abstract class JouerUneCarte : GameAction + { + + public Card OldCard { get; set; } + + protected JouerUneCarte(Piles ListOrderedStacks) : base(ListOrderedStacks) + { + } + + public abstract bool play(decimal valueCard, List CurrentHand, int orderedStackSelected, Player player, List CurrentCardPlayed); + + protected abstract bool Rule(Card card, Stack stack, bool bottomUp, Player player, List CurrentCardPlayed); + } +} diff --git a/TheGameExtreme/model/gameActions/abstractRules/Piocher.cs b/TheGameExtreme/model/gameActions/abstractRules/Piocher.cs new file mode 100644 index 0000000..1a39a12 --- /dev/null +++ b/TheGameExtreme/model/gameActions/abstractRules/Piocher.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using TheGameExtreme.model.card; +using TheGameExtreme.model.deck; +using TheGameExtreme.model.piles; + +namespace TheGameExtreme.model.gameActions.abstractRules +{ + public abstract class Piocher : GameAction + { + public Piocher(Piles ListOrderedStacks) : base(ListOrderedStacks) + { + } + + public abstract void pioche(List CurrentHand, Deck deck, Player player, int nbMaxCard); + } +} diff --git a/TheGameExtreme/model/gameActions/abstractRules/TerminerSonTour.cs b/TheGameExtreme/model/gameActions/abstractRules/TerminerSonTour.cs new file mode 100644 index 0000000..7411786 --- /dev/null +++ b/TheGameExtreme/model/gameActions/abstractRules/TerminerSonTour.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using TheGameExtreme.model.card; +using TheGameExtreme.model.piles; + +namespace TheGameExtreme.model.gameActions.abstractRules +{ + public abstract class TerminerSonTour : GameAction + { + protected TerminerSonTour(Piles ListOrderedStacks) : base(ListOrderedStacks) + { + } + + public abstract bool end(List CurrentHand, List CurrentCardPlayed); + + public bool Test(List CurrentHand) + { + if (CurrentHand.Count != 0) + { + List playableCard = new List(); + tryToFindSoluce(playableCard, CurrentHand); + return testEndGame(playableCard); + } + return false; + } + + protected abstract void tryToFindSoluce(List playableCard, List CurrentHand); + + protected abstract bool testEndGame(List playableCard); + } +} diff --git a/TheGameExtreme/model/gameActions/classic/GameModeClassic.cs b/TheGameExtreme/model/gameActions/classic/GameModeClassic.cs new file mode 100644 index 0000000..0058a88 --- /dev/null +++ b/TheGameExtreme/model/gameActions/classic/GameModeClassic.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using TheGameExtreme.model.card; +using TheGameExtreme.model.deck; +using TheGameExtreme.model.gameActions.abstractRules; +using TheGameExtreme.model.piles; + +namespace TheGameExtreme.model.gameActions.classic +{ + public class GameModeClassic : GameMode + { + + public GameModeClassic(Piles piles, Deck deck) : base(piles, deck) + { + } + + override public void load(int nbPlayer, List players) + { + gameActions.Add(new PiocherClassic(Piles)); + gameActions.Add(new JouerUneCarteClassic(Piles)); + gameActions.Add(new TerminerSonTourClassic(Piles)); + + defineNbMaxCard(nbPlayer); + distribueCard(players); + } + + override public void pioche(List currentHand, Player player) + { + Message = null; + ((PiocherClassic)gameActions[0]).pioche(currentHand, deck, player, nbMaxCard); + quickSort(currentHand, 0, currentHand.Count - 1); + } + + override public bool playCard(decimal valueCard, List currentHand, int orderedStackSelected, Player player, List CurrentCardPlayed) + { + Message = null; + if (((JouerUneCarteClassic)gameActions[1]).play(valueCard, currentHand, orderedStackSelected, player, CurrentCardPlayed)) + { + return true; + } + else + { + Message = ((JouerUneCarteClassic)gameActions[1]).ErrorMessage; + return false; + } + } + + override public bool endTurn(List currentHand, List CurrentCardPlayed, Player player) + { + Message = null; + if (((TerminerSonTourClassic)gameActions[2]).end(currentHand, CurrentCardPlayed)) + { + pioche(currentHand, player); + CurrentCardPlayed.Clear(); + OnPlayerChanged(null); + return end; + } + else + { + Message = ((TerminerSonTourClassic)gameActions[2]).ErrorMessage; + return false; + } + } + + override public void TestEndGame(List currentHand) + { + if (((TerminerSonTourClassic)gameActions[2]).Test(currentHand)) + { + end = false; + } + else + { + OnEndGame(new EventArgs()); + end = true; + } + } + } +} diff --git a/TheGameExtreme/model/gameActions/classic/JouerUneCarte.cs b/TheGameExtreme/model/gameActions/classic/JouerUneCarteClassic.cs similarity index 82% rename from TheGameExtreme/model/gameActions/classic/JouerUneCarte.cs rename to TheGameExtreme/model/gameActions/classic/JouerUneCarteClassic.cs index 83e1a86..75f8aef 100644 --- a/TheGameExtreme/model/gameActions/classic/JouerUneCarte.cs +++ b/TheGameExtreme/model/gameActions/classic/JouerUneCarteClassic.cs @@ -1,21 +1,19 @@ using System; using System.Collections.Generic; using TheGameExtreme.model.card; +using TheGameExtreme.model.gameActions.abstractRules; using TheGameExtreme.model.piles; namespace TheGameExtreme.model.gameActions.classic { - public class JouerUneCarte : GameAction + public class JouerUneCarteClassic : JouerUneCarte { - public Card OldCard { get; set; } - - - public JouerUneCarte(Piles ListOrderedStacks) : base(ListOrderedStacks) + public JouerUneCarteClassic(Piles ListOrderedStacks) : base(ListOrderedStacks) { } - public bool play(decimal valueCard, List CurrentHand, int orderedStackSelected, Player player, List CurrentCardPlayed) + override public bool play(decimal valueCard, List CurrentHand, int orderedStackSelected, Player player, List CurrentCardPlayed) { foreach (Card card in CurrentHand) { @@ -50,7 +48,7 @@ namespace TheGameExtreme.model.gameActions.classic return false; } - protected bool Rule(Card card, Stack stack, bool bottomUp, Player player, List CurrentCardPlayed) + override protected bool Rule(Card card, Stack stack, bool bottomUp, Player player, List CurrentCardPlayed) { if ((bottomUp && card.Value.CompareTo(stack.Peek().Value) > 0) || (!bottomUp && card.Value.CompareTo(stack.Peek().Value) < 0) || card.Value.CompareTo(stack.Peek().Value - 10) == 0 || card.Value.CompareTo(stack.Peek().Value + 10) == 0) { diff --git a/TheGameExtreme/model/gameActions/classic/Piocher.cs b/TheGameExtreme/model/gameActions/classic/PiocherClassic.cs similarity index 69% rename from TheGameExtreme/model/gameActions/classic/Piocher.cs rename to TheGameExtreme/model/gameActions/classic/PiocherClassic.cs index d0a913c..06eebf9 100644 --- a/TheGameExtreme/model/gameActions/classic/Piocher.cs +++ b/TheGameExtreme/model/gameActions/classic/PiocherClassic.cs @@ -2,23 +2,19 @@ using System.Collections.Generic; using TheGameExtreme.model.card; using TheGameExtreme.model.deck; +using TheGameExtreme.model.gameActions.abstractRules; using TheGameExtreme.model.piles; namespace TheGameExtreme.model.gameActions.classic { - public class Piocher : GameAction + public class PiocherClassic : Piocher { - public Piocher(Piles ListOrderedStacks) : base(ListOrderedStacks) + public PiocherClassic(Piles ListOrderedStacks) : base(ListOrderedStacks) { } - protected bool checkRule() - { - return true; - } - - public void pioche(List CurrentHand, Deck deck, Player player, int nbMaxCard) + override public void pioche(List CurrentHand, Deck deck, Player player, int nbMaxCard) { int nbPickedCard = nbMaxCard - CurrentHand.Count; for (int i = 0; i < nbPickedCard; i++) diff --git a/TheGameExtreme/model/gameActions/classic/TerminerSonTour.cs b/TheGameExtreme/model/gameActions/classic/TerminerSonTourClassic.cs similarity index 67% rename from TheGameExtreme/model/gameActions/classic/TerminerSonTour.cs rename to TheGameExtreme/model/gameActions/classic/TerminerSonTourClassic.cs index ca56d1f..8fa7a6a 100644 --- a/TheGameExtreme/model/gameActions/classic/TerminerSonTour.cs +++ b/TheGameExtreme/model/gameActions/classic/TerminerSonTourClassic.cs @@ -1,24 +1,23 @@ using System; using System.Collections.Generic; using TheGameExtreme.model.card; -using TheGameExtreme.model.card.rapidCard; +using TheGameExtreme.model.gameActions.abstractRules; using TheGameExtreme.model.piles; namespace TheGameExtreme.model.gameActions.classic { - public class TerminerSonTour : GameAction + public class TerminerSonTourClassic : TerminerSonTour { - public TerminerSonTour(Piles ListOrderedStacks) : base(ListOrderedStacks) + public TerminerSonTourClassic(Piles ListOrderedStacks) : base(ListOrderedStacks) { } - public bool end(List CurrentHand, List CurrentCardPlayed) + override public bool end(List CurrentHand, List CurrentCardPlayed) { - // Si carte qui fait piocher que d'un, vérifier la bonne pioche (penser si elle vient d'être recouverte) - // Sinon if (CurrentHand.Count == 0 || CurrentCardPlayed.Count >= 2) - { // Ne pas oublié de gérer les ThreeCard + { + // Vérifier la fin du jeu return true; } else @@ -29,18 +28,7 @@ namespace TheGameExtreme.model.gameActions.classic } - public bool Test(List CurrentHand) - { - if (CurrentHand.Count != 0) - { - List playableCard = new List(); - tryToFindSoluce(playableCard, CurrentHand); - return testEndGame(playableCard); - } - return false; - } - - protected void tryToFindSoluce(List playableCard, List CurrentHand) + override protected void tryToFindSoluce(List playableCard, List CurrentHand) { CurrentHand.ForEach(card => { @@ -65,7 +53,7 @@ namespace TheGameExtreme.model.gameActions.classic }); } - protected bool testEndGame(List playableCard) + override protected bool testEndGame(List playableCard) { //if (playableCard.Count == 2) //{ diff --git a/TheGameExtreme/model/gameActions/decimals/GameModeDecimal.cs b/TheGameExtreme/model/gameActions/decimals/GameModeDecimal.cs index 455a1ab..a9972a6 100644 --- a/TheGameExtreme/model/gameActions/decimals/GameModeDecimal.cs +++ b/TheGameExtreme/model/gameActions/decimals/GameModeDecimal.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using TheGameExtreme.model.card; using TheGameExtreme.model.deck; +using TheGameExtreme.model.gameActions.abstractRules; using TheGameExtreme.model.gameActions.classic; using TheGameExtreme.model.piles; @@ -13,16 +14,24 @@ namespace TheGameExtreme.model.gameActions.decimals { } - new public void load(int nbPlayer, List players) + override public void load(int nbPlayer, List players) { - base.load(nbPlayer, players); - gameActions.RemoveAt(1); - gameActions.RemoveAt(2); + gameActions.Add(new PiocherClassic(Piles)); gameActions.Add(new JouerUneCarteDecimal(Piles)); gameActions.Add(new TerminerSonTourDecimal(Piles)); + + defineNbMaxCard(nbPlayer); + distribueCard(players); + } + + override public void pioche(List currentHand, Player player) + { + Message = null; + ((PiocherClassic)gameActions[0]).pioche(currentHand, deck, player, nbMaxCard); + quickSort(currentHand, 0, currentHand.Count - 1); } - new public bool playCard(decimal valueCard, List currentHand, int orderedStackSelected, Player player, List CurrentCardPlayed) + override public bool playCard(decimal valueCard, List currentHand, int orderedStackSelected, Player player, List CurrentCardPlayed) { Message = null; if (((JouerUneCarteDecimal)gameActions[1]).play(valueCard, currentHand, orderedStackSelected, player, CurrentCardPlayed)) @@ -36,7 +45,7 @@ namespace TheGameExtreme.model.gameActions.decimals } } - new public bool endTurn(List currentHand, List CurrentCardPlayed, Player player) + override public bool endTurn(List currentHand, List CurrentCardPlayed, Player player) { Message = null; if (((TerminerSonTourDecimal)gameActions[2]).end(currentHand, CurrentCardPlayed)) @@ -53,7 +62,7 @@ namespace TheGameExtreme.model.gameActions.decimals } } - new public void TestEndGame(List currentHand) + override public void TestEndGame(List currentHand) { if (((TerminerSonTourDecimal)gameActions[2]).Test(currentHand)) { diff --git a/TheGameExtreme/model/gameActions/decimals/JouerUneCarteDecimal.cs b/TheGameExtreme/model/gameActions/decimals/JouerUneCarteDecimal.cs index 78516c1..5c482bc 100644 --- a/TheGameExtreme/model/gameActions/decimals/JouerUneCarteDecimal.cs +++ b/TheGameExtreme/model/gameActions/decimals/JouerUneCarteDecimal.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using TheGameExtreme.model.card; +using TheGameExtreme.model.gameActions.abstractRules; using TheGameExtreme.model.gameActions.classic; using TheGameExtreme.model.piles; @@ -12,7 +13,42 @@ namespace TheGameExtreme.model.gameActions.decimals { } - new protected bool Rule(Card card, Stack stack, bool bottomUp, Player player, List CurrentCardPlayed) + override public bool play(decimal valueCard, List CurrentHand, int orderedStackSelected, Player player, List CurrentCardPlayed) + { + foreach (Card card in CurrentHand) + { + if (valueCard.CompareTo(card.Value) == 0) + { + if (orderedStackSelected >= 0 && orderedStackSelected < ListOrderedStacks.Size) + { + bool success; + if (orderedStackSelected < (ListOrderedStacks.Size * 0.5)) + { + ErrorMessage = null; + success = Rule(card, ListOrderedStacks.getStack(orderedStackSelected), true, player, CurrentCardPlayed); + } + else + { + ErrorMessage = null; + success = Rule(card, ListOrderedStacks.getStack(orderedStackSelected), false, player, CurrentCardPlayed); + } + if (success) + { + CurrentHand.Remove(card); + } + return success; + } + else + { + ErrorMessage = AppRessource.StrCantGetStack; + } + } + } + ErrorMessage = AppRessource.StrCardDoesntExist; + return false; + } + + override protected bool Rule(Card card, Stack stack, bool bottomUp, Player player, List CurrentCardPlayed) { if ((bottomUp && card.Value > stack.Peek().Value) || (!bottomUp && card.Value < stack.Peek().Value)) { diff --git a/TheGameExtreme/model/gameActions/decimals/TerminerSonTourDecimal.cs b/TheGameExtreme/model/gameActions/decimals/TerminerSonTourDecimal.cs index 840ea38..581c323 100644 --- a/TheGameExtreme/model/gameActions/decimals/TerminerSonTourDecimal.cs +++ b/TheGameExtreme/model/gameActions/decimals/TerminerSonTourDecimal.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using TheGameExtreme.model.card; -using TheGameExtreme.model.gameActions.classic; +using TheGameExtreme.model.gameActions.abstractRules; using TheGameExtreme.model.piles; namespace TheGameExtreme.model.gameActions.decimals @@ -12,7 +12,22 @@ namespace TheGameExtreme.model.gameActions.decimals { } - new protected void tryToFindSoluce(List playableCard, List CurrentHand) + override public bool end(List CurrentHand, List CurrentCardPlayed) + { + if (CurrentHand.Count == 0 || CurrentCardPlayed.Count >= 2) + { + // Vérifier la fin du jeu + return true; + } + else + { + ErrorMessage = AppRessource.StrCardPlayedLessThanTwo; + return false; + } + + } + + override protected void tryToFindSoluce(List playableCard, List CurrentHand) { CurrentHand.ForEach(card => { @@ -37,7 +52,7 @@ namespace TheGameExtreme.model.gameActions.decimals }); } - new protected bool testEndGame(List playableCard) + override protected bool testEndGame(List playableCard) { if (playableCard.Count < 2) { diff --git a/TheGameExtreme/model/gameActions/extreme/ExtremeJouerUneCarte.cs b/TheGameExtreme/model/gameActions/extreme/ExtremeJouerUneCarte.cs index 389a57c..9082eeb 100644 --- a/TheGameExtreme/model/gameActions/extreme/ExtremeJouerUneCarte.cs +++ b/TheGameExtreme/model/gameActions/extreme/ExtremeJouerUneCarte.cs @@ -1,5 +1,7 @@ using System; -using TheGameExtreme.model.gameActions.classic; +using System.Collections.Generic; +using TheGameExtreme.model.card; +using TheGameExtreme.model.gameActions.abstractRules; using TheGameExtreme.model.piles; namespace TheGameExtreme.model.gameActions.extreme @@ -9,5 +11,15 @@ namespace TheGameExtreme.model.gameActions.extreme public ExtremeJouerUneCarte(Piles ListOrderedStacks) : base(ListOrderedStacks) { } + + public override bool play(decimal valueCard, List CurrentHand, int orderedStackSelected, Player player, List CurrentCardPlayed) + { + throw new NotImplementedException(); + } + + protected override bool Rule(Card card, Stack stack, bool bottomUp, Player player, List CurrentCardPlayed) + { + throw new NotImplementedException(); + } } } diff --git a/TheGameExtreme/model/gameActions/extreme/ExtremeMode.cs b/TheGameExtreme/model/gameActions/extreme/ExtremeMode.cs index 02ccb86..acd51f5 100644 --- a/TheGameExtreme/model/gameActions/extreme/ExtremeMode.cs +++ b/TheGameExtreme/model/gameActions/extreme/ExtremeMode.cs @@ -1,6 +1,8 @@ using System; +using System.Collections.Generic; +using TheGameExtreme.model.card; using TheGameExtreme.model.deck; -using TheGameExtreme.model.gameActions.classic; +using TheGameExtreme.model.gameActions.abstractRules; using TheGameExtreme.model.piles; namespace TheGameExtreme.model.gameActions.extreme @@ -13,5 +15,30 @@ namespace TheGameExtreme.model.gameActions.extreme gameActions.Add(new ExtremeJouerUneCarte(Piles)); gameActions.Add(new ExtremeTerminerSonTour(Piles)); } + + public override bool endTurn(List currentHand, List CurrentCardPlayed, Player player) + { + throw new NotImplementedException(); + } + + public override void load(int nbPlayer, List players) + { + throw new NotImplementedException(); + } + + public override void pioche(List currentHand, Player player) + { + throw new NotImplementedException(); + } + + public override bool playCard(decimal valueCard, List currentHand, int orderedStackSelected, Player player, List CurrentCardPlayed) + { + throw new NotImplementedException(); + } + + public override void TestEndGame(List currentHand) + { + throw new NotImplementedException(); + } } } diff --git a/TheGameExtreme/model/gameActions/extreme/ExtremePiocher.cs b/TheGameExtreme/model/gameActions/extreme/ExtremePiocher.cs index 9440010..0a29937 100644 --- a/TheGameExtreme/model/gameActions/extreme/ExtremePiocher.cs +++ b/TheGameExtreme/model/gameActions/extreme/ExtremePiocher.cs @@ -1,5 +1,8 @@ using System; -using TheGameExtreme.model.gameActions.classic; +using System.Collections.Generic; +using TheGameExtreme.model.card; +using TheGameExtreme.model.deck; +using TheGameExtreme.model.gameActions.abstractRules; using TheGameExtreme.model.piles; namespace TheGameExtreme.model.gameActions.extreme @@ -9,5 +12,10 @@ namespace TheGameExtreme.model.gameActions.extreme public ExtremePiocher(Piles ListOrderedStacks) : base(ListOrderedStacks) { } + + public override void pioche(List CurrentHand, Deck deck, Player player, int nbMaxCard) + { + throw new NotImplementedException(); + } } } diff --git a/TheGameExtreme/model/gameActions/extreme/ExtremeTerminerSonTour.cs b/TheGameExtreme/model/gameActions/extreme/ExtremeTerminerSonTour.cs index 4880007..7e6aa5c 100644 --- a/TheGameExtreme/model/gameActions/extreme/ExtremeTerminerSonTour.cs +++ b/TheGameExtreme/model/gameActions/extreme/ExtremeTerminerSonTour.cs @@ -1,5 +1,7 @@ using System; -using TheGameExtreme.model.gameActions.classic; +using System.Collections.Generic; +using TheGameExtreme.model.card; +using TheGameExtreme.model.gameActions.abstractRules; using TheGameExtreme.model.piles; namespace TheGameExtreme.model.gameActions.extreme @@ -9,5 +11,20 @@ namespace TheGameExtreme.model.gameActions.extreme public ExtremeTerminerSonTour(Piles ListOrderedStacks) : base(ListOrderedStacks) { } + + public override bool end(List CurrentHand, List CurrentCardPlayed) + { + throw new NotImplementedException(); + } + + protected override bool testEndGame(List playableCard) + { + throw new NotImplementedException(); + } + + protected override void tryToFindSoluce(List playableCard, List CurrentHand) + { + throw new NotImplementedException(); + } } } diff --git a/TheGameExtreme/model/manager/GameManager.cs b/TheGameExtreme/model/manager/GameManager.cs index f5400a1..8da0d5c 100644 --- a/TheGameExtreme/model/manager/GameManager.cs +++ b/TheGameExtreme/model/manager/GameManager.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.ComponentModel; using TheGameExtreme.model.card; using TheGameExtreme.model.@event; -using TheGameExtreme.model.gameActions; using TheGameExtreme.model.piles; namespace TheGameExtreme.model.manager diff --git a/TheGameExtreme/view/MainPage.xaml.cs b/TheGameExtreme/view/MainPage.xaml.cs index 7f3ff00..05daa9e 100644 --- a/TheGameExtreme/view/MainPage.xaml.cs +++ b/TheGameExtreme/view/MainPage.xaml.cs @@ -216,16 +216,25 @@ namespace TheGameExtreme.view stackCollection.Clear(); SKPaint textPaint = new SKPaint(); - float textWidth = textPaint.MeasureText("001"); - float textSize = 0.05f * (float)DeviceDisplay.MainDisplayInfo.Width * textPaint.TextSize / textWidth; - SKPoint position = new SKPoint((float)((DeviceDisplay.MainDisplayInfo.Width * 0.9) / (viewmodel.getListOrderedStacks().Count * 2)) - textPaint.MeasureText("01") * 0.5f, (float)((DeviceDisplay.MainDisplayInfo.Height * 0.1) + (DeviceDisplay.MainDisplayInfo.Height * 0.9) * 0.01 + 2 * textSize)); + SKPoint position = new SKPoint((float)((DeviceDisplay.MainDisplayInfo.Width * 0.9) / (viewmodel.getListOrderedStacks().Count * 2)) + (float)(DeviceDisplay.MainDisplayInfo.Width * 0.01), (float)((DeviceDisplay.MainDisplayInfo.Height * 0.1) + (DeviceDisplay.MainDisplayInfo.Height * 0.9) * 0.01 + 2 * (0.05f * (float)DeviceDisplay.MainDisplayInfo.Width * textPaint.TextSize / textPaint.MeasureText("001")))); + + float inflateWidth; + if (indexMode == 4) + { + inflateWidth = 0.01f * (float)DeviceDisplay.MainDisplayInfo.Width; + } + else + { + inflateWidth = 0.02f * (float)DeviceDisplay.MainDisplayInfo.Width; + } for (int i = 0; i < viewmodel.getListOrderedStacks().Count; i++) { textPaint = new SKPaint(); - textPaint.TextSize = textSize; + textPaint.TextSize = 0.05f * (float)DeviceDisplay.MainDisplayInfo.Width * textPaint.TextSize / textPaint.MeasureText("000"); + position.X -= textPaint.MeasureText(viewmodel.getListOrderedStacks()[i].Peek().Value.ToString()) * 0.5f; - stackCollection.Add(new TouchManipulationCard(textPaint, viewmodel.getListOrderedStacks()[i].Peek()) + stackCollection.Add(new TouchManipulationCard(textPaint, viewmodel.getListOrderedStacks()[i].Peek(), inflateWidth) { Matrix = SKMatrix.MakeTranslation(position.X, position.Y), InitialMatrix = SKMatrix.MakeTranslation(position.X, position.Y), @@ -243,17 +252,26 @@ namespace TheGameExtreme.view private void InflateHand() { SKPaint textPaint = new SKPaint(); - float textWidth = textPaint.MeasureText("001"); - float textSize = 0.05f * (float)DeviceDisplay.MainDisplayInfo.Width * textPaint.TextSize / textWidth; - SKPoint position = new SKPoint((float)((DeviceDisplay.MainDisplayInfo.Width * 0.9) / (viewmodel.CurrentHand.Count * 2)) - textPaint.MeasureText("01") * 0.5f + (float)(DeviceDisplay.MainDisplayInfo.Width * 0.01), (float)((DeviceDisplay.MainDisplayInfo.Height * 0.9) - (DeviceDisplay.MainDisplayInfo.Height * 0.9) * 0.1 - 2 * textSize)); + SKPoint position = new SKPoint((float)((DeviceDisplay.MainDisplayInfo.Width * 0.9) / (viewmodel.CurrentHand.Count * 2)) + (float)(DeviceDisplay.MainDisplayInfo.Width * 0.01), (float)((DeviceDisplay.MainDisplayInfo.Height * 0.9) - (DeviceDisplay.MainDisplayInfo.Height * 0.9) * 0.1 - 2 * (0.05f * (float)DeviceDisplay.MainDisplayInfo.Width * textPaint.TextSize / textPaint.MeasureText("001")))); + + float inflateWidth; + if (indexMode == 4) + { + inflateWidth = 0.01f * (float)DeviceDisplay.MainDisplayInfo.Width; + } + else + { + inflateWidth = 0.015f * (float)DeviceDisplay.MainDisplayInfo.Width; + } for (int i = 0; i < viewmodel.CurrentHand.Count; i++) { textPaint = new SKPaint(); - textPaint.TextSize = textSize; + float textWidth = textPaint.MeasureText(viewmodel.CurrentHand[i].Value.ToString()); + textPaint.TextSize = 0.05f * (float)DeviceDisplay.MainDisplayInfo.Width * textPaint.TextSize / textPaint.MeasureText("000"); position.X -= (float)(textWidth * 0.5); - textCollection.Add(new TouchManipulationCard(textPaint, viewmodel.CurrentHand[i]) + textCollection.Add(new TouchManipulationCard(textPaint, viewmodel.CurrentHand[i], inflateWidth) { Matrix = SKMatrix.MakeTranslation(position.X, position.Y), InitialMatrix = SKMatrix.MakeTranslation(position.X, position.Y), diff --git a/TheGameExtreme/view/TouchManipulationCard.cs b/TheGameExtreme/view/TouchManipulationCard.cs index f39f23c..beaa262 100644 --- a/TheGameExtreme/view/TouchManipulationCard.cs +++ b/TheGameExtreme/view/TouchManipulationCard.cs @@ -20,7 +20,7 @@ namespace TheGameExtreme.view Dictionary touchDictionary = new Dictionary(); public CardVM Value; public string display; - private float width = 0.02f * (float)DeviceDisplay.MainDisplayInfo.Width; + private float width; private float height; @@ -28,7 +28,7 @@ namespace TheGameExtreme.view * Objet dessiné * Carte qui est dessiné par le textPaint */ - public TouchManipulationCard(SKPaint textPaint, CardVM value) + public TouchManipulationCard(SKPaint textPaint, CardVM value, float width) { this.textPaint = textPaint; Value = value; @@ -42,17 +42,19 @@ namespace TheGameExtreme.view } display = Value.ToString(); + + this.width = width; height = 2f * width; if (!display.Contains(",") && !display.Contains(".") && !display.Contains("/")) { - if (decimal.Parse(display) <= -10) + if (Value.Value.CompareTo(-10m) <= 0) { - width -= textPaint.MeasureText("0") * 0.5f; + this.width -= textPaint.MeasureText("0") * 0.5f; } - else if (decimal.Parse(display) >= 0 && decimal.Parse(display) < 10) + if (Value.Value.CompareTo(0m) >= 0 && Value.Value.CompareTo(10) < 0) { - width += textPaint.MeasureText("0") * 0.5f; + this.width += textPaint.MeasureText("0") * 0.5f; } } @@ -157,7 +159,7 @@ namespace TheGameExtreme.view SKPoint transformedPoint = inverseMatrix.MapPoint(location); // Check if it's in the untransformed bitmap rectangle - SKRect rect = new SKRect(-width, -height * 1.5f, width * 2.5f + 5, height); + SKRect rect = new SKRect(-width, -height - textPaint.TextSize + 10, width + textPaint.MeasureText(display), height + 10); return rect.Contains(transformedPoint); } return false; diff --git a/TheGameExtreme/viewmodel/Main.cs b/TheGameExtreme/viewmodel/Main.cs index cf2401f..aeb03b3 100644 --- a/TheGameExtreme/viewmodel/Main.cs +++ b/TheGameExtreme/viewmodel/Main.cs @@ -5,6 +5,7 @@ using TheGameExtreme.model; using TheGameExtreme.model.card; using TheGameExtreme.model.deck; using TheGameExtreme.model.@event; +using TheGameExtreme.model.gameActions.abstractRules; using TheGameExtreme.model.gameActions.classic; using TheGameExtreme.model.gameActions.decimals; using TheGameExtreme.model.manager; @@ -59,10 +60,10 @@ namespace TheGameExtreme.viewmodel switch (indexMode) { case 0: - gameMode = new GameMode(new ClassicPiles(nbPile), new ClassicDeck(nbCard, 1, 99)); + gameMode = new GameModeClassic(new ClassicPiles(nbPile), new ClassicDeck(nbCard, 1, 99)); break; case 1: - gameMode = new GameMode(new PilesMoins51To51(nbPile), new RelativeDeck(nbCard, -49, 49)); + gameMode = new GameModeClassic(new PilesMoins51To51(nbPile), new RelativeDeck(nbCard, -49, 49)); break; case 2: gameMode = new GameModeDecimal(new Piles0To10(nbPile), new DizaineDeck(nbCard, 0.1m, 9.9m)); @@ -77,7 +78,7 @@ namespace TheGameExtreme.viewmodel gameMode = new GameModeDecimal(new FractionPiles(nbPile), new FractionDeck(nbCard, 0m, 51m)); break; default: - gameMode = new GameMode(new ClassicPiles(nbPile), new ClassicDeck(nbCard, 1, 99)); + gameMode = new GameModeClassic(new ClassicPiles(nbPile), new ClassicDeck(nbCard, 1, 99)); break; } Parametreur parametreur = new Parametreur(gameMode);