diff --git a/TheGameExtreme/TheGameExtreme.csproj b/TheGameExtreme/TheGameExtreme.csproj
index 5e389d5..adc2aea 100644
--- a/TheGameExtreme/TheGameExtreme.csproj
+++ b/TheGameExtreme/TheGameExtreme.csproj
@@ -24,6 +24,7 @@
+
diff --git a/TheGameExtreme/model/deck/CentaineDeck.cs b/TheGameExtreme/model/deck/CentaineDeck.cs
index 8aff325..a21c8ac 100644
--- a/TheGameExtreme/model/deck/CentaineDeck.cs
+++ b/TheGameExtreme/model/deck/CentaineDeck.cs
@@ -1,10 +1,21 @@
using System;
+using TheGameExtreme.model.card;
+using TheGameExtreme.model.card.cardType;
+
namespace TheGameExtreme.model.deck
{
- public class CentaineDeck
+ public class CentaineDeck : Deck
{
public CentaineDeck()
{
+ decimal d;
+ Random random = new Random();
+
+ for (int i = -499; i <= 499; i += 10)
+ {
+ d = (decimal)(random.Next(i, i+10)) / 100;
+ deck.Add(new ClassicCard(d));
+ }
}
}
}
diff --git a/TheGameExtreme/model/deck/ClassicDeck.cs b/TheGameExtreme/model/deck/ClassicDeck.cs
index 199369d..9394a7d 100644
--- a/TheGameExtreme/model/deck/ClassicDeck.cs
+++ b/TheGameExtreme/model/deck/ClassicDeck.cs
@@ -8,11 +8,9 @@ namespace TheGameExtreme.model.deck
{
public ClassicDeck()
{
- Card card;
for (int i = 2; i <= 99; i++)
{
- card = new ClassicCard(i);
- deck.Add(card);
+ deck.Add(new ClassicCard(i));
}
}
}
diff --git a/TheGameExtreme/model/deck/DecimalDeck.cs b/TheGameExtreme/model/deck/DecimalDeck.cs
index 4904879..91c3860 100644
--- a/TheGameExtreme/model/deck/DecimalDeck.cs
+++ b/TheGameExtreme/model/deck/DecimalDeck.cs
@@ -8,11 +8,9 @@ namespace TheGameExtreme.model.deck
{
public DecimalDeck()
{
- Card card;
for (decimal i = 0.02m; i <= 0.99m; i += 0.01m)
{
- card = new ClassicCard(i);
- deck.Add(card);
+ deck.Add(new ClassicCard(i));
}
}
}
diff --git a/TheGameExtreme/model/deck/Deck.cs b/TheGameExtreme/model/deck/Deck.cs
index b54a510..f39dac8 100644
--- a/TheGameExtreme/model/deck/Deck.cs
+++ b/TheGameExtreme/model/deck/Deck.cs
@@ -23,5 +23,42 @@ namespace TheGameExtreme.model.deck
{
return deck[index];
}
+
+ protected void InsertionDichotomique(List deck, int start, int end, Card card)
+ {
+ int mediane = (end - start) % 2 + start;
+ if (mediane > deck.Count - 1)
+ {
+ deck.Add(card);
+ return;
+ }
+ int comparateur = deck[mediane].Value.CompareTo(card.Value);
+ if (mediane == end)
+ {
+ if (comparateur > 0)
+ {
+ deck.Insert(start, card);
+ }
+ else
+ {
+ deck.Insert(end, card);
+ }
+ return;
+ }
+ if (comparateur == 0)
+ {
+ return;
+ }
+ else if (comparateur > 0)
+ {
+ InsertionDichotomique(deck, start, mediane, card);
+ return;
+ }
+ else
+ {
+ InsertionDichotomique(deck, mediane, end, card);
+ return;
+ }
+ }
}
}
diff --git a/TheGameExtreme/model/deck/DizaineDeck.cs b/TheGameExtreme/model/deck/DizaineDeck.cs
index 743030d..ed7e5ab 100644
--- a/TheGameExtreme/model/deck/DizaineDeck.cs
+++ b/TheGameExtreme/model/deck/DizaineDeck.cs
@@ -8,15 +8,9 @@ namespace TheGameExtreme.model.deck
{
public DizaineDeck()
{
- Card card;
- decimal d;
- Random random = new Random();
- while (deck.Count < 99)
+ for (decimal i = -4.9m; i <= 4.9m; i += 0.1m)
{
- d = (decimal)(random.Next(1, 49)) / 10;
- // Recherche dicotomique pour insertion -> si déjà insérer break et grâce au while, il continuera le bon nombre de fois.
- card = new ClassicCard(d);
- deck.Add(card);
+ deck.Add(new ClassicCard(i));
}
}
}
diff --git a/TheGameExtreme/model/deck/MilliemeDeck.cs b/TheGameExtreme/model/deck/MilliemeDeck.cs
index de83c98..0255801 100644
--- a/TheGameExtreme/model/deck/MilliemeDeck.cs
+++ b/TheGameExtreme/model/deck/MilliemeDeck.cs
@@ -1,10 +1,21 @@
using System;
+using TheGameExtreme.model.card;
+using TheGameExtreme.model.card.cardType;
+
namespace TheGameExtreme.model.deck
{
- public class MilliemeDeck
+ public class MilliemeDeck : Deck
{
public MilliemeDeck()
{
+ decimal d;
+ Random random = new Random();
+
+ for (int i = -4999; i <= 4999; i += 100)
+ {
+ d = (decimal)(random.Next(i, i + 100)) / 1000;
+ deck.Add(new ClassicCard(d));
+ }
}
}
}
diff --git a/TheGameExtreme/model/deck/_50Range100Deck.cs b/TheGameExtreme/model/deck/_50Range100Deck.cs
index 708d539..97cf127 100644
--- a/TheGameExtreme/model/deck/_50Range100Deck.cs
+++ b/TheGameExtreme/model/deck/_50Range100Deck.cs
@@ -8,11 +8,9 @@ namespace TheGameExtreme.model.deck
{
public _50Range100Deck()
{
- Card card;
for (int i = -49; i <= 49; i++)
{
- card = new ClassicCard(i);
- deck.Add(card);
+ deck.Add(new ClassicCard(i));
}
}
}
diff --git a/TheGameExtreme/model/gameActions/classic/JouerUneCarte.cs b/TheGameExtreme/model/gameActions/classic/JouerUneCarte.cs
index 23f2aa4..9c8e1e2 100644
--- a/TheGameExtreme/model/gameActions/classic/JouerUneCarte.cs
+++ b/TheGameExtreme/model/gameActions/classic/JouerUneCarte.cs
@@ -27,12 +27,12 @@ namespace TheGameExtreme.model.gameActions.classic
if (orderedStackSelected < (ListOrderedStacks.Size * 0.5))
{
ErrorMessage = null;
- success = rule(card, ListOrderedStacks.getStack(orderedStackSelected), true, player, CurrentCardPlayed);
+ success = Rule(card, ListOrderedStacks.getStack(orderedStackSelected), true, player, CurrentCardPlayed);
}
else
{
ErrorMessage = null;
- success = rule(card, ListOrderedStacks.getStack(orderedStackSelected), false, player, CurrentCardPlayed);
+ success = Rule(card, ListOrderedStacks.getStack(orderedStackSelected), false, player, CurrentCardPlayed);
}
if (success)
{
@@ -50,7 +50,7 @@ namespace TheGameExtreme.model.gameActions.classic
return false;
}
- private bool rule(Card card, Stack stack, bool bottomUp, Player player, List CurrentCardPlayed)
+ 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) || card.Value.CompareTo(stack.Peek().Value - 10) == 0 || card.Value.CompareTo(stack.Peek().Value + 10) == 0)
{
diff --git a/TheGameExtreme/model/gameActions/classic/TerminerSonTour.cs b/TheGameExtreme/model/gameActions/classic/TerminerSonTour.cs
index c7f2348..ca56d1f 100644
--- a/TheGameExtreme/model/gameActions/classic/TerminerSonTour.cs
+++ b/TheGameExtreme/model/gameActions/classic/TerminerSonTour.cs
@@ -53,12 +53,13 @@ namespace TheGameExtreme.model.gameActions.classic
playableCard.Add(card);
}
}
- else
+ else if (card.Value < ListOrderedStacks.getStack(i).Peek().Value)
{
- if (card.Value < ListOrderedStacks.getStack(i).Peek().Value)
- {
- playableCard.Add(card);
- }
+ playableCard.Add(card);
+ }
+ else if (card.Value.CompareTo(ListOrderedStacks.getStack(i).Peek().Value - 10) == 0 || card.Value.CompareTo(ListOrderedStacks.getStack(i).Peek().Value + 10) == 0)
+ {
+ playableCard.Add(card);
}
}
});
@@ -66,17 +67,18 @@ namespace TheGameExtreme.model.gameActions.classic
protected bool testEndGame(List playableCard)
{
- if (playableCard.Count == 2)
- {
- foreach (Card c in playableCard)
- {
- if (Equals(c.getName(), ThreeCard.CARD_THREE))
- {
- return false;
- }
- }
- }
- else if (playableCard.Count < 2)
+ //if (playableCard.Count == 2)
+ //{
+ // foreach (Card c in playableCard)
+ // {
+ // if (Equals(c.getName(), ThreeCard.CARD_THREE))
+ // {
+ // return false;
+ // }
+ // }
+ //}
+ //else
+ if (playableCard.Count < 2)
{
return false;
}
diff --git a/TheGameExtreme/model/gameActions/decimals/GameModeDecimal.cs b/TheGameExtreme/model/gameActions/decimals/GameModeDecimal.cs
new file mode 100644
index 0000000..455a1ab
--- /dev/null
+++ b/TheGameExtreme/model/gameActions/decimals/GameModeDecimal.cs
@@ -0,0 +1,69 @@
+using System;
+using System.Collections.Generic;
+using TheGameExtreme.model.card;
+using TheGameExtreme.model.deck;
+using TheGameExtreme.model.gameActions.classic;
+using TheGameExtreme.model.piles;
+
+namespace TheGameExtreme.model.gameActions.decimals
+{
+ public class GameModeDecimal : GameMode
+ {
+ public GameModeDecimal(Piles piles, Deck deck) : base(piles, deck)
+ {
+ }
+
+ new public void load(int nbPlayer, List players)
+ {
+ base.load(nbPlayer, players);
+ gameActions.RemoveAt(1);
+ gameActions.RemoveAt(2);
+ gameActions.Add(new JouerUneCarteDecimal(Piles));
+ gameActions.Add(new TerminerSonTourDecimal(Piles));
+ }
+
+ new 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))
+ {
+ return true;
+ }
+ else
+ {
+ Message = ((JouerUneCarte)gameActions[1]).ErrorMessage;
+ return false;
+ }
+ }
+
+ new public bool endTurn(List currentHand, List CurrentCardPlayed, Player player)
+ {
+ Message = null;
+ if (((TerminerSonTourDecimal)gameActions[2]).end(currentHand, CurrentCardPlayed))
+ {
+ pioche(currentHand, player);
+ CurrentCardPlayed.Clear();
+ OnPlayerChanged(null);
+ return end;
+ }
+ else
+ {
+ Message = ((TerminerSonTour)gameActions[2]).ErrorMessage;
+ return false;
+ }
+ }
+
+ new public void TestEndGame(List currentHand)
+ {
+ if (((TerminerSonTourDecimal)gameActions[2]).Test(currentHand))
+ {
+ end = false;
+ }
+ else
+ {
+ OnEndGame(new EventArgs());
+ end = true;
+ }
+ }
+ }
+}
diff --git a/TheGameExtreme/model/gameActions/decimals/JouerUneCarteDecimal.cs b/TheGameExtreme/model/gameActions/decimals/JouerUneCarteDecimal.cs
new file mode 100644
index 0000000..59e09f8
--- /dev/null
+++ b/TheGameExtreme/model/gameActions/decimals/JouerUneCarteDecimal.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using TheGameExtreme.model.card;
+using TheGameExtreme.model.gameActions.classic;
+using TheGameExtreme.model.piles;
+
+namespace TheGameExtreme.model.gameActions.decimals
+{
+ public class JouerUneCarteDecimal : JouerUneCarte
+ {
+ public JouerUneCarteDecimal(Piles ListOrderedStacks) : base(ListOrderedStacks)
+ {
+ }
+
+ new 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))
+ {
+ OldCard = stack.Peek();
+ player.joue(card);
+ CurrentCardPlayed.Add(card);
+ stack.Push(card);
+ return true;
+ }
+ else if (card.Value.CompareTo(stack.Peek().Value - 0.1m) == 0 || card.Value.CompareTo(stack.Peek().Value + 0.1m) == 0 || card.Value.CompareTo(stack.Peek().Value - 0.01m) == 0 || card.Value.CompareTo(stack.Peek().Value + 0.01m) == 0 || card.Value.CompareTo(stack.Peek().Value - 0.001m) == 0 || card.Value.CompareTo(stack.Peek().Value + 0.001m) == 0)
+ {
+ OldCard = stack.Peek();
+ player.joue(card);
+ CurrentCardPlayed.Add(card);
+ stack.Push(card);
+ return true;
+ }
+ else
+ {
+ ErrorMessage = AppRessource.StrWrongStack;
+ return false;
+ }
+ }
+ }
+}
diff --git a/TheGameExtreme/model/gameActions/decimals/TerminerSonTourDecimal.cs b/TheGameExtreme/model/gameActions/decimals/TerminerSonTourDecimal.cs
new file mode 100644
index 0000000..840ea38
--- /dev/null
+++ b/TheGameExtreme/model/gameActions/decimals/TerminerSonTourDecimal.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using TheGameExtreme.model.card;
+using TheGameExtreme.model.gameActions.classic;
+using TheGameExtreme.model.piles;
+
+namespace TheGameExtreme.model.gameActions.decimals
+{
+ public class TerminerSonTourDecimal : TerminerSonTour
+ {
+ public TerminerSonTourDecimal(Piles ListOrderedStacks) : base(ListOrderedStacks)
+ {
+ }
+
+ new protected void tryToFindSoluce(List playableCard, List CurrentHand)
+ {
+ CurrentHand.ForEach(card =>
+ {
+ for (int i = 0; i < ListOrderedStacks.Size; i++)
+ {
+ if (i < (ListOrderedStacks.Size * 0.5))
+ {
+ if (card.Value > ListOrderedStacks.getStack(i).Peek().Value)
+ {
+ playableCard.Add(card);
+ }
+ }
+ else if (card.Value < ListOrderedStacks.getStack(i).Peek().Value)
+ {
+ playableCard.Add(card);
+ }
+ else if (card.Value.CompareTo(ListOrderedStacks.getStack(i).Peek().Value - 0.1m) == 0 || card.Value.CompareTo(ListOrderedStacks.getStack(i).Peek().Value + 0.1m) == 0 || card.Value.CompareTo(ListOrderedStacks.getStack(i).Peek().Value - 0.01m) == 0 || card.Value.CompareTo(ListOrderedStacks.getStack(i).Peek().Value + 0.01m) == 0 || card.Value.CompareTo(ListOrderedStacks.getStack(i).Peek().Value - 0.001m) == 0 || card.Value.CompareTo(ListOrderedStacks.getStack(i).Peek().Value + 0.001m) == 0)
+ {
+ playableCard.Add(card);
+ }
+ }
+ });
+ }
+
+ new protected bool testEndGame(List playableCard)
+ {
+ if (playableCard.Count < 2)
+ {
+ return false;
+ }
+ return true;
+ }
+ }
+}
diff --git a/TheGameExtreme/model/piles/DecimalPiles.cs b/TheGameExtreme/model/piles/DecimalPilesMoins5To5.cs
similarity index 58%
rename from TheGameExtreme/model/piles/DecimalPiles.cs
rename to TheGameExtreme/model/piles/DecimalPilesMoins5To5.cs
index 4824423..5fedffb 100644
--- a/TheGameExtreme/model/piles/DecimalPiles.cs
+++ b/TheGameExtreme/model/piles/DecimalPilesMoins5To5.cs
@@ -3,20 +3,20 @@ using TheGameExtreme.model.card.cardType;
namespace TheGameExtreme.model.piles
{
- public class DecimalPiles : Piles
+ public class DecimalPilesMoins5To5 : Piles
{
- public DecimalPiles(int nbPile) : base(nbPile)
+ public DecimalPilesMoins5To5(int nbPile) : base(nbPile)
{
for (int i = 0; i < nbPile; i++)
{
if (i < (nbPile * 0.5))
{
- ListOrderedStacks[i].Push(new ClassicCard(0.01m));
+ ListOrderedStacks[i].Push(new ClassicCard(-5m));
}
else
{
- ListOrderedStacks[i].Push(new ClassicCard(1m));
+ ListOrderedStacks[i].Push(new ClassicCard(5m));
}
}
}
diff --git a/TheGameExtreme/view/GamePreparationPage.xaml.cs b/TheGameExtreme/view/GamePreparationPage.xaml.cs
index c8378b0..9b5f8f5 100644
--- a/TheGameExtreme/view/GamePreparationPage.xaml.cs
+++ b/TheGameExtreme/view/GamePreparationPage.xaml.cs
@@ -8,8 +8,8 @@ namespace TheGameExtreme.view
public partial class GamePreparationPage : ContentPage
{
public List listNbPlayer = new List { 1, 2, 3, 4, 5 };
- public List listGameMode = new List { "entières", "relatives", "décimales", "fractionnées" };
- public List listNbStack = new List { 4, 5, 6, 7, 8 };
+ public List listGameMode = new List { "entières", "relatives", "décimales", "dizaine", "centaine", "millième", "fractionnées" };
+ public List listNbStack = new List { 4, 6, 8 };
public GamePreparationPage()
@@ -47,7 +47,7 @@ namespace TheGameExtreme.view
}
}
- await Navigation.PushAsync(new MainPage(playersNames));
+ await Navigation.PushAsync(new MainPage(playersNames, (int)SelectNbStack.SelectedItem, (int)SelectMode.SelectedIndex));
}
private void ChangedPseudo(object sender, EventArgs args)
diff --git a/TheGameExtreme/view/MainPage.xaml.cs b/TheGameExtreme/view/MainPage.xaml.cs
index 09d8b8e..0afbf9a 100644
--- a/TheGameExtreme/view/MainPage.xaml.cs
+++ b/TheGameExtreme/view/MainPage.xaml.cs
@@ -22,23 +22,27 @@ namespace TheGameExtreme.view
{
private Main viewmodel;
Button button;
- List playersNames;
+ private List playersNames;
+ private int nbPile;
+ private int indexMode;
List textCollection = new List();
List stackCollection = new List();
Dictionary textDictionary = new Dictionary();
private SKCanvas canvas;
- public MainPage(List playersNames)
+ public MainPage(List playersNames, int nbPile, int indexMode)
{
this.playersNames = playersNames;
+ this.nbPile = nbPile;
+ this.indexMode = indexMode;
InitializeComponent();
NavigationPage.SetHasNavigationBar(this, false);
EndTurnButton.Text = AppRessource.StrEndTurn; // Trouver le moyen d'avoir du binding
- viewmodel = new Main(playersNames);
+ viewmodel = new Main(playersNames, nbPile, indexMode);
viewmodel.EndGame += OnEndGame;
@@ -242,7 +246,7 @@ namespace TheGameExtreme.view
private void retry(object sender, EventArgs args)
{
- viewmodel = new Main(playersNames);
+ viewmodel = new Main(playersNames, nbPile, indexMode);
viewmodel.EndGame += OnEndGame;
diff --git a/TheGameExtreme/viewmodel/Main.cs b/TheGameExtreme/viewmodel/Main.cs
index bdabef8..2549665 100644
--- a/TheGameExtreme/viewmodel/Main.cs
+++ b/TheGameExtreme/viewmodel/Main.cs
@@ -6,6 +6,7 @@ using TheGameExtreme.model.card;
using TheGameExtreme.model.deck;
using TheGameExtreme.model.@event;
using TheGameExtreme.model.gameActions.classic;
+using TheGameExtreme.model.gameActions.decimals;
using TheGameExtreme.model.manager;
using TheGameExtreme.model.piles;
@@ -51,11 +52,38 @@ namespace TheGameExtreme.viewmodel
public List> listOrderedStacks = new List>();
- public Main(List playersNames)
+ public Main(List playersNames, int nbPile, int indexMode)
{
- int nbPile = 4;
playersNames.ForEach(name => players.Add(new PlayerVM(new Player(name))));
- Parametreur parametreur = new Parametreur(new GameMode(new ClassicPiles(nbPile), new ClassicDeck()));
+ GameMode gameMode;
+ switch (indexMode)
+ {
+ case 0:
+ gameMode = new GameMode(new ClassicPiles(nbPile), new ClassicDeck());
+ break;
+ case 1:
+ gameMode = new GameMode(new _50Range100Piles(nbPile), new _50Range100Deck());
+ break;
+ case 2:
+ gameMode = new GameMode(new DecimalPilesMoins5To5(nbPile), new DecimalDeck());
+ break;
+ case 3:
+ gameMode = new GameModeDecimal(new DecimalPilesMoins5To5(nbPile), new DizaineDeck());
+ break;
+ case 4:
+ gameMode = new GameMode(new DecimalPilesMoins5To5(nbPile), new CentaineDeck());
+ break;
+ case 5:
+ gameMode = new GameMode(new DecimalPilesMoins5To5(nbPile), new MilliemeDeck());
+ break;
+ //case 6:
+ // // Fraction
+ // break;
+ default:
+ gameMode = new GameMode(new ClassicPiles(nbPile), new ClassicDeck());
+ break;
+ }
+ Parametreur parametreur = new Parametreur(gameMode);
players.ForEach(player => parametreur.AddPlayer(player.View));
gameManager = new SoloGameManager(parametreur);
@@ -101,6 +129,7 @@ namespace TheGameExtreme.viewmodel
public void OnEndGame(object source, EventArgs args)
{
+ Alert = gameManager.EndMessage;
EndGame?.Invoke(source, args);
}