diff --git a/Documentations/Cahier des charges.docx b/Documentations/Cahier des charges.docx
index 18a9b6f..925859b 100644
Binary files a/Documentations/Cahier des charges.docx and b/Documentations/Cahier des charges.docx differ
diff --git a/TheGameExtreme/TheGameExtreme.csproj b/TheGameExtreme/TheGameExtreme.csproj
index 58ec1ba..7f44d32 100644
--- a/TheGameExtreme/TheGameExtreme.csproj
+++ b/TheGameExtreme/TheGameExtreme.csproj
@@ -6,16 +6,14 @@
-
-
+
+
-
-
-
+
diff --git a/TheGameExtreme/model/Card.cs b/TheGameExtreme/model/Card/Card.cs
similarity index 80%
rename from TheGameExtreme/model/Card.cs
rename to TheGameExtreme/model/Card/Card.cs
index b3c1b83..e4270b3 100644
--- a/TheGameExtreme/model/Card.cs
+++ b/TheGameExtreme/model/Card/Card.cs
@@ -1,9 +1,9 @@
using System;
using System.ComponentModel;
-namespace TheGameExtreme.model
+namespace TheGameExtreme.model.card
{
- public class Card : INotifyPropertyChanged
+ public abstract class Card : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
@@ -21,7 +21,7 @@ namespace TheGameExtreme.model
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(v));
}
- public Effect Effect { get; private set; }
+ public static readonly bool activate;
public Card(int value)
diff --git a/TheGameExtreme/model/Card/ClassicCard.cs b/TheGameExtreme/model/Card/ClassicCard.cs
new file mode 100644
index 0000000..c490f59
--- /dev/null
+++ b/TheGameExtreme/model/Card/ClassicCard.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace TheGameExtreme.model.card
+{
+ public class ClassicCard : Card
+ {
+ public ClassicCard(int value)
+ : base(value)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/TheGameExtreme/model/Card/EndGameCard.cs b/TheGameExtreme/model/Card/EndGameCard.cs
new file mode 100644
index 0000000..0595bd0
--- /dev/null
+++ b/TheGameExtreme/model/Card/EndGameCard.cs
@@ -0,0 +1,12 @@
+using System;
+namespace TheGameExtreme.model.card
+{
+ public class EndGameCard : Card
+ {
+
+ public EndGameCard(int value)
+ :base(value)
+ {
+ }
+ }
+}
diff --git a/TheGameExtreme/model/Card/ThreeCard.cs b/TheGameExtreme/model/Card/ThreeCard.cs
new file mode 100644
index 0000000..685c010
--- /dev/null
+++ b/TheGameExtreme/model/Card/ThreeCard.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace TheGameExtreme.model.card
+{
+ public class ThreeCard : Card
+ {
+ public ThreeCard(int value)
+ :base(value)
+ {
+ }
+ }
+}
diff --git a/TheGameExtreme/model/Player.cs b/TheGameExtreme/model/Player.cs
index e66f016..ee06ab5 100644
--- a/TheGameExtreme/model/Player.cs
+++ b/TheGameExtreme/model/Player.cs
@@ -1,6 +1,6 @@
using System;
using System.Collections.Generic;
-using TheGameExtreme.model.effect;
+using TheGameExtreme.model.card;
using TheGameExtreme.model.@event;
namespace TheGameExtreme.model
diff --git a/TheGameExtreme/model/effect/Effect.cs b/TheGameExtreme/model/effect/Effect.cs
deleted file mode 100644
index d8aa9b6..0000000
--- a/TheGameExtreme/model/effect/Effect.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-namespace TheGameExtreme.model
-{
- public class Effect
- {
- public Effect()
- {
- }
- }
-}
diff --git a/TheGameExtreme/model/effect/FastEffect.cs b/TheGameExtreme/model/effect/FastEffect.cs
deleted file mode 100644
index 7a6296a..0000000
--- a/TheGameExtreme/model/effect/FastEffect.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-namespace TheGameExtreme.model.effect
-{
- public class FastEffect : Effect
- {
- public FastEffect()
- {
- }
- }
-}
diff --git a/TheGameExtreme/model/effect/InfiniteEffect.cs b/TheGameExtreme/model/effect/InfiniteEffect.cs
deleted file mode 100644
index 39bf284..0000000
--- a/TheGameExtreme/model/effect/InfiniteEffect.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-namespace TheGameExtreme.model.effect
-{
- public class InfiniteEffect : Effect
- {
- public InfiniteEffect()
- {
- }
- }
-}
diff --git a/TheGameExtreme/model/effect/StopCom.cs b/TheGameExtreme/model/effect/StopCom.cs
deleted file mode 100644
index a6e93dc..0000000
--- a/TheGameExtreme/model/effect/StopCom.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-namespace TheGameExtreme.model.effect
-{
- public class StopCom
- {
- public StopCom()
- {
- }
- }
-}
diff --git a/TheGameExtreme/model/effect/fastEffect/EndGame.cs b/TheGameExtreme/model/effect/fastEffect/EndGame.cs
deleted file mode 100644
index 013b47f..0000000
--- a/TheGameExtreme/model/effect/fastEffect/EndGame.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-namespace TheGameExtreme.model.effect
-{
- public class EndGame : FastEffect
- {
- public EndGame()
- {
- }
- }
-}
diff --git a/TheGameExtreme/model/effect/fastEffect/GameTurnStop.cs b/TheGameExtreme/model/effect/fastEffect/GameTurnStop.cs
deleted file mode 100644
index d619e6c..0000000
--- a/TheGameExtreme/model/effect/fastEffect/GameTurnStop.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-namespace TheGameExtreme.model.effect
-{
- public class GameTurnStop : FastEffect
- {
- public GameTurnStop()
- {
- }
- }
-}
diff --git a/TheGameExtreme/model/effect/fastEffect/ThreeCard.cs b/TheGameExtreme/model/effect/fastEffect/ThreeCard.cs
deleted file mode 100644
index 17676c9..0000000
--- a/TheGameExtreme/model/effect/fastEffect/ThreeCard.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-namespace TheGameExtreme.model.effect
-{
- public class ThreeCard : FastEffect
- {
- public ThreeCard()
- {
- }
- }
-}
diff --git a/TheGameExtreme/model/effect/infiniteEffect/CommunicationStop.cs b/TheGameExtreme/model/effect/infiniteEffect/CommunicationStop.cs
deleted file mode 100644
index 232cc12..0000000
--- a/TheGameExtreme/model/effect/infiniteEffect/CommunicationStop.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-namespace TheGameExtreme.model.effect
-{
- public class CommunicationStop : InfiniteEffect
- {
- public CommunicationStop()
- {
- }
- }
-}
diff --git a/TheGameExtreme/model/effect/infiniteEffect/OneCardDrawable.cs b/TheGameExtreme/model/effect/infiniteEffect/OneCardDrawable.cs
deleted file mode 100644
index 191a0b8..0000000
--- a/TheGameExtreme/model/effect/infiniteEffect/OneCardDrawable.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-namespace TheGameExtreme.model.effect
-{
- public class OneCardDrawable : InfiniteEffect
- {
- public OneCardDrawable()
- {
- }
- }
-}
diff --git a/TheGameExtreme/model/effect/infiniteEffect/OneStack.cs b/TheGameExtreme/model/effect/infiniteEffect/OneStack.cs
deleted file mode 100644
index e320253..0000000
--- a/TheGameExtreme/model/effect/infiniteEffect/OneStack.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-namespace TheGameExtreme.model.effect
-{
- public class OneStack : InfiniteEffect
- {
- public OneStack()
- {
- }
- }
-}
diff --git a/TheGameExtreme/model/effect/infiniteEffect/RetroStop.cs b/TheGameExtreme/model/effect/infiniteEffect/RetroStop.cs
deleted file mode 100644
index a6d2a5d..0000000
--- a/TheGameExtreme/model/effect/infiniteEffect/RetroStop.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-namespace TheGameExtreme.model.effect
-{
- public class RetroStop : InfiniteEffect
- {
- public RetroStop()
- {
- }
- }
-}
diff --git a/TheGameExtreme/model/event/HandCardChangeEventArgs.cs b/TheGameExtreme/model/event/HandCardChangeEventArgs.cs
index d4eb0e3..1961739 100644
--- a/TheGameExtreme/model/event/HandCardChangeEventArgs.cs
+++ b/TheGameExtreme/model/event/HandCardChangeEventArgs.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using TheGameExtreme.model.card;
namespace TheGameExtreme.model.@event
{
diff --git a/TheGameExtreme/model/event/PlayerChangedEventArgs.cs b/TheGameExtreme/model/event/PlayerChangedEventArgs.cs
index 161e1a0..4e9095f 100644
--- a/TheGameExtreme/model/event/PlayerChangedEventArgs.cs
+++ b/TheGameExtreme/model/event/PlayerChangedEventArgs.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using TheGameExtreme.model.card;
namespace TheGameExtreme.model.@event
{
diff --git a/TheGameExtreme/model/event/TopRangeChangedEventArgs.cs b/TheGameExtreme/model/event/TopRangeChangedEventArgs.cs
index 0698b3b..59f2e35 100644
--- a/TheGameExtreme/model/event/TopRangeChangedEventArgs.cs
+++ b/TheGameExtreme/model/event/TopRangeChangedEventArgs.cs
@@ -1,4 +1,6 @@
using System;
+using TheGameExtreme.model.card;
+
namespace TheGameExtreme.model.@event
{
public class TopRangeChangedEventArgs : EventArgs
diff --git a/TheGameExtreme/model/manager/GameManager.cs b/TheGameExtreme/model/manager/GameManager.cs
index 0d48137..204c286 100644
--- a/TheGameExtreme/model/manager/GameManager.cs
+++ b/TheGameExtreme/model/manager/GameManager.cs
@@ -1,6 +1,6 @@
using System;
using System.Collections.Generic;
-using TheGameExtreme.model.effect;
+using TheGameExtreme.model.card;
using TheGameExtreme.model.@event;
namespace TheGameExtreme.model.manager
@@ -12,13 +12,15 @@ namespace TheGameExtreme.model.manager
protected int nbMaxCard;
protected int currentIndexPlayer;
protected List playerList = new List();
- protected List infiniteEffectsConstraintsList = new List();
public List> ListOrderedStacks { get; set; }
protected List deck = new List();
protected bool win = true;
+ public String EndMessage { get; set; }
public event EventHandler TopRangeChanged;
public event EventHandler PlayerChanged;
public List CurrentHand { get; set; }
+ protected int nbCardAtBeginOfTurn;
+ protected List CurrentCardPlayed = new List();
public GameManager(int nbPlayer, List players)
@@ -38,11 +40,11 @@ namespace TheGameExtreme.model.manager
{
if (i < 2)
{
- ListOrderedStacks[i].Push(new Card(1));
+ ListOrderedStacks[i].Push(new ClassicCard(1));
}
else
{
- ListOrderedStacks[i].Push(new Card(100));
+ ListOrderedStacks[i].Push(new ClassicCard(100));
}
}
@@ -51,13 +53,46 @@ namespace TheGameExtreme.model.manager
distribueCard();
CurrentHand = playerList[currentIndexPlayer].getCardList();
+ nbCardAtBeginOfTurn = CurrentHand.Count;
}
protected void createDeck()
{
+ Random random = new Random();
+ List endGame = new List();
+ while (endGame.Count < 4)
+ {
+ int r = random.Next(2, 99);
+ if (!endGame.Contains(r))
+ {
+ endGame.Add(r);
+ }
+ }
+ List threeCard = new List();
+ while (threeCard.Count < 4)
+ {
+ int r = random.Next(2, 99);
+ if (!endGame.Contains(r) && !threeCard.Contains(r))
+ {
+ threeCard.Add(r);
+ }
+ }
+ Card card;
for (int i = 2; i <= 99; i++)
{
- deck.Add(new Card(i));
+ if (endGame.Contains(i))
+ {
+ card = new EndGameCard(i);
+ }
+ else if (threeCard.Contains(i))
+ {
+ card = new ThreeCard(i);
+ }
+ else
+ {
+ card = new ClassicCard(i);
+ }
+ deck.Add(card);
}
}
@@ -121,6 +156,7 @@ namespace TheGameExtreme.model.manager
{
Card oldCard = orderedStack.Peek();
playerList[currentIndexPlayer].joue(card);
+ CurrentCardPlayed.Add(card);
orderedStack.Push(card);
OnTopRangeChanged(new TopRangeChangedEventArgs(card, oldCard, ListOrderedStacks.IndexOf(orderedStack)));
}
@@ -152,7 +188,7 @@ namespace TheGameExtreme.model.manager
}
}
- abstract public void endTurn();
+ abstract public bool endTurn();
abstract protected void pioche();
diff --git a/TheGameExtreme/model/manager/SoloGameManager.cs b/TheGameExtreme/model/manager/SoloGameManager.cs
index 2e9d9bc..f6fd159 100644
--- a/TheGameExtreme/model/manager/SoloGameManager.cs
+++ b/TheGameExtreme/model/manager/SoloGameManager.cs
@@ -1,6 +1,6 @@
using System;
using System.Collections.Generic;
-using TheGameExtreme.model.effect;
+using TheGameExtreme.model.card;
using TheGameExtreme.model.@event;
namespace TheGameExtreme.model.manager
@@ -14,9 +14,9 @@ namespace TheGameExtreme.model.manager
}
- public override void endTurn()
+ public override bool endTurn()
{
- // Vérifie que l'utilisateur a bien joué deux cartes
+ verifyNbCardPlay();
pioche();
@@ -27,18 +27,55 @@ namespace TheGameExtreme.model.manager
}
CurrentHand = playerList[currentIndexPlayer].getCardList();
OnPlayerChanged(new PlayerChangedEventArgs(CurrentHand));
+ nbCardAtBeginOfTurn = CurrentHand.Count;
+ CurrentCardPlayed.Clear();
if (isEndGame()) // Ajouter le score en calculant les cartes restantes dans la pile et dans les mains des joueurs
{
- if (win)
- {
- Console.WriteLine("Le jeu est terminé!\n Bravo vous avez gagné!");
- }
- else
+ displayWinner();
+ return true;
+ }
+
+ return false;
+ }
+
+ protected void verifyNbCardPlay()
+ {
+ foreach (Card cardPlayed in CurrentCardPlayed)
+ {
+ if (cardPlayed.GetType() == typeof(ThreeCard))
{
- Console.WriteLine("Le jeu est terminé!\n Désolé, vous avez perdu... Essayez encore!");
+ if ((nbCardAtBeginOfTurn - CurrentHand.Count) < 3) // Penser à vérifier s'il a joué une ThreeCard pour regarder s'il a bien joué 3 cartes
+ {
+ testIsEndGame();
+ }
+ return;
}
}
+ if ((nbCardAtBeginOfTurn - CurrentHand.Count) < 2) // Penser à vérifier s'il a joué une ThreeCard pour regarder s'il a bien joué 3 cartes
+ {
+ testIsEndGame();
+ }
+ }
+
+ protected void testIsEndGame()
+ {
+ if (isEndGame())
+ {
+ displayWinner();
+ }
+ else
+ {
+ throw new Exception("Vous n'avez pas joué assez de carte!");
+ }
+ }
+
+ protected void displayWinner()
+ {
+ if (win)
+ {
+ EndMessage = "Le jeu est terminé!\n Bravo vous avez gagné!";
+ }
}
protected override void pioche()
@@ -46,6 +83,10 @@ namespace TheGameExtreme.model.manager
int nbPickedCard = nbMaxCard - CurrentHand.Count;
for (int i = 0; i < nbPickedCard; i++)
{
+ if (deck.Count == 0)
+ {
+ return;
+ }
int random = new Random().Next(0, deck.Count - 1);
playerList[currentIndexPlayer].pioche(deck[random]);
deck.RemoveAt(random);
@@ -67,7 +108,7 @@ namespace TheGameExtreme.model.manager
{
CurrentHand.ForEach(card =>
{
- if (card.Value < ListOrderedStacks[0].Peek().Value || card.Value < ListOrderedStacks[1].Peek().Value || card.Value > ListOrderedStacks[2].Peek().Value || card.Value > ListOrderedStacks[3].Peek().Value)
+ if (card.Value > ListOrderedStacks[0].Peek().Value || card.Value > ListOrderedStacks[1].Peek().Value || card.Value < ListOrderedStacks[2].Peek().Value || card.Value < ListOrderedStacks[3].Peek().Value)
{
playableCard.Add(card);
}
@@ -76,13 +117,14 @@ namespace TheGameExtreme.model.manager
protected override bool testEndGame(List playableCard)
{
- if (playableCard.Count < 3 && playableCard.Count >= 2)
+ if (playableCard.Count == 2)
{
foreach (Card c in playableCard)
{
if (c.Equals(typeof(ThreeCard)))
{
win = false;
+ EndMessage = "Le jeu est terminé!\n Désolé, vous avez perdu... Vous deviez jouer trois cartes à cause de l'effet \"Trois cartes joué\" hors votre jeu ne permet pas d'en jouer autant! Essayez encore!";
return true;
}
}
@@ -90,11 +132,13 @@ namespace TheGameExtreme.model.manager
else if (playableCard.Count < 2)
{
win = false;
+ EndMessage = "Le jeu est terminé!\n Désolé, vous avez perdu... Essayez encore!";
return true;
}
else if (effectLose())
{
win = false;
+ EndMessage = "Désolé, vous n'avez pas recouvert la tête de mort... Réessayez ;)";
return true;
}
@@ -105,7 +149,7 @@ namespace TheGameExtreme.model.manager
{
foreach (Stack orderedStack in ListOrderedStacks)
{
- if (orderedStack.Peek().GetType() == typeof(EndGame))
+ if (orderedStack.Peek().GetType() == typeof(EndGameCard))
{
return true;
}
diff --git a/TheGameExtreme/view/MainPage.xaml b/TheGameExtreme/view/MainPage.xaml
index 2094d4b..cac5c5b 100644
--- a/TheGameExtreme/view/MainPage.xaml
+++ b/TheGameExtreme/view/MainPage.xaml
@@ -19,7 +19,7 @@
-
+
@@ -28,7 +28,7 @@
-
+
@@ -37,7 +37,7 @@
-
+
@@ -46,7 +46,7 @@
-
+
@@ -69,6 +69,7 @@
diff --git a/TheGameExtreme/view/MainPage.xaml.cs b/TheGameExtreme/view/MainPage.xaml.cs
index f850d00..968e749 100644
--- a/TheGameExtreme/view/MainPage.xaml.cs
+++ b/TheGameExtreme/view/MainPage.xaml.cs
@@ -18,13 +18,23 @@ namespace TheGameExtreme
[DesignTimeVisible(false)]
public partial class MainPage : ContentPage
{
-
+ private bool isFirst = true;
private Main viewmodel;
+ private List stacks = new List();
+ Button button = new Button();
+
public MainPage()
{
InitializeComponent();
+ stacks.Add(checkbox0);
+ stacks.Add(checkbox1);
+ stacks.Add(checkbox2);
+ stacks.Add(checkbox3);
+ button.Text = "Retry";
+ button.Clicked += retry;
+
viewmodel = new Main();
viewmodel.BindingChanged += OnBindingChanged;
@@ -91,35 +101,67 @@ namespace TheGameExtreme
{
viewmodel.Alert = "";
- int numStack;
- if (checkbox0.IsChecked)
+ int numStack = 0;
+ bool hasFind = false;
+ stacks.ForEach(checkbox =>
{
- numStack = 0;
- }
- else if (checkbox1.IsChecked)
+ if (checkbox.IsChecked)
+ {
+ hasFind = true;
+ if (viewmodel.played(numStack, Convert.ToInt32((sender as Button).Text)))
+ {
+ botPanel.Children.Add(button);
+ }
+ }
+ numStack += 1;
+ });
+
+ if (!hasFind)
{
- numStack = 1;
+ viewmodel.Alert = "Aucune pile selectionné! Veuillez séléctionner une pile.";
+ return;
}
- else if (checkbox2.IsChecked)
+ }
+
+ private void radioButton(object sender, EventArgs args)
+ {
+ if (isFirst)
{
- numStack = 2;
+ isFirst = false;
+
+ stacks.ForEach(checkbox =>
+ {
+ if (!checkbox.Equals(sender))
+ {
+ checkbox.IsChecked = false;
+ }
+ });
+
+ isFirst = true;
}
- else if (checkbox3.IsChecked)
+ }
+
+ private void retry(object sender, EventArgs args)
+ {
+ viewmodel = new Main();
+
+ viewmodel.BindingChanged += OnBindingChanged;
+
+ Alert.SetBinding(Label.TextProperty, new Binding("Alert", source: viewmodel));
+
+ inflateHand();
+ }
+
+ private void endTurn(object sender, EventArgs args)
+ {
+ if (viewmodel.endTurn())
{
- numStack = 3;
+ botPanel.Children.Add(button);
}
else
{
- viewmodel.Alert = "Aucune pile selectionné! Veuillez séléctionner une pile.";
- return;
+ inflateHand();
}
- viewmodel.played(numStack, Convert.ToInt32((sender as Button).Text));
- }
-
- private void endTurn(object sender, EventArgs args)
- {
- viewmodel.endTurn();
- inflateHand();
}
}
}
diff --git a/TheGameExtreme/viewmodel/Main.cs b/TheGameExtreme/viewmodel/Main.cs
index f1eb7d1..928731a 100644
--- a/TheGameExtreme/viewmodel/Main.cs
+++ b/TheGameExtreme/viewmodel/Main.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
-using TheGameExtreme.model;
+using TheGameExtreme.model.card;
using TheGameExtreme.model.@event;
using TheGameExtreme.model.manager;
@@ -56,35 +56,60 @@ namespace TheGameExtreme.viewmodel
BindingChanged?.Invoke(this, args);
}
- public void played(int numStack, int valueCard)
+ /**
+ *
+ *
+ * @return booléen de fin de jeu
+ */
+ public bool played(int numStack, int valueCard)
{
if (gameManager.isCanPlay())
{
- playOneCard(numStack, valueCard);
+ return playOneCard(numStack, valueCard);
}
else
{
Alert = "Le joueur n'a plus de carte dans sa main!";
// Faire un toast
+ return false;
}
}
- private void playOneCard(int numStack, int valueCard)
+ /**
+ *
+ *
+ * @return booléen de fin de jeu
+ */
+ private bool playOneCard(int numStack, int valueCard)
{
try
{
gameManager.joue(valueCard, numStack);
- }
+ if (gameManager.EndMessage != null)
+ {
+ Alert = gameManager.EndMessage;
+ return true;
+ }
+ }
catch(Exception e)
{
// Faire un toast
Alert = e.Message;
}
-}
+ return false;
+ }
- public void endTurn()
+ public bool endTurn()
{
- gameManager.endTurn();
+ try
+ {
+ return gameManager.endTurn();
+ }
+ catch(Exception e)
+ {
+ Alert = e.Message;
+ return false;
+ }
}
}