Merge branch 'master' of gitlab.iut-clermont.uca.fr:cldupland/thegameextreme

master
Baptiste ARNAUD 6 years ago
commit b13f793aa9

@ -9,7 +9,7 @@ using Android.OS;
namespace TheGameExtreme.Droid namespace TheGameExtreme.Droid
{ {
[Activity(Label = "TheGameExtreme", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] [Activity(Label = "TheGameExtreme", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, ScreenOrientation = ScreenOrientation.Landscape)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{ {
protected override void OnCreate(Bundle savedInstanceState) protected override void OnCreate(Bundle savedInstanceState)

@ -9,7 +9,6 @@
</array> </array>
<key>UISupportedInterfaceOrientations</key> <key>UISupportedInterfaceOrientations</key>
<array> <array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string> <string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string> <string>UIInterfaceOrientationLandscapeRight</string>
</array> </array>

@ -1,10 +1,18 @@
using System; using System;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.deck namespace TheGameExtreme.model.deck
{ {
public class ClassicDeck public class ClassicDeck : Deck
{ {
public ClassicDeck() public ClassicDeck()
{ {
Card card;
for (int i = 2; i <= 99; i++)
{
card = new ClassicCard(i);
deck.Add(card);
}
} }
} }
} }

@ -1,16 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model
{
public abstract class CreationDack
{
private List<Card> deck = new List<Card>();
public CreationDack()
{
}
}
}

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model
{
public abstract class Deck
{
protected List<Card> deck = new List<Card>();
public Deck()
{
}
public int size()
{
return deck.Count;
}
public void removeAt(int index)
{
deck.RemoveAt(index);
}
public Card getCard(int index)
{
return deck[index];
}
}
}

@ -1,10 +1,49 @@
using System; using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.deck namespace TheGameExtreme.model.deck
{ {
public class ExtremeDeck public class ExtremeDeck : Deck
{ {
public ExtremeDeck() public ExtremeDeck()
{ {
Random random = new Random();
List<int> endGame = new List<int>();
while (endGame.Count < 4)
{
int r = random.Next(2, 99);
if (!endGame.Contains(r))
{
endGame.Add(r);
}
}
List<int> threeCard = new List<int>();
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++)
{
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);
}
} }
} }
} }

@ -7,11 +7,13 @@ namespace TheGameExtreme.model.@event
public class PlayerChangedEventArgs : EventArgs public class PlayerChangedEventArgs : EventArgs
{ {
public String Pseudo;
public List<Card> NewCurrentHand; public List<Card> NewCurrentHand;
public PlayerChangedEventArgs(List<Card> newCurrentHand) public PlayerChangedEventArgs(List<Card> newCurrentHand, string pseudo)
{ {
NewCurrentHand = newCurrentHand; NewCurrentHand = newCurrentHand;
Pseudo = pseudo;
} }
} }
} }

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using TheGameExtreme.model.card; using TheGameExtreme.model.card;
using TheGameExtreme.model.deck;
using TheGameExtreme.model.@event; using TheGameExtreme.model.@event;
namespace TheGameExtreme.model.manager namespace TheGameExtreme.model.manager
@ -13,7 +14,7 @@ namespace TheGameExtreme.model.manager
protected int currentIndexPlayer; protected int currentIndexPlayer;
protected List<Player> playerList = new List<Player>(); protected List<Player> playerList = new List<Player>();
public List<Stack<Card>> ListOrderedStacks { get; set; } public List<Stack<Card>> ListOrderedStacks { get; set; }
protected List<Card> deck = new List<Card>(); protected Deck deck;
protected bool win = true; protected bool win = true;
public String EndMessage { get; set; } public String EndMessage { get; set; }
public event EventHandler<TopRangeChangedEventArgs> TopRangeChanged; public event EventHandler<TopRangeChangedEventArgs> TopRangeChanged;
@ -60,41 +61,15 @@ namespace TheGameExtreme.model.manager
protected void createDeck() protected void createDeck()
{ {
Random random = new Random(); switch (true)
List<int> endGame = new List<int>();
while (endGame.Count < 4)
{ {
int r = random.Next(2, 99); case false:
if (!endGame.Contains(r)) deck = new ClassicDeck();
{ break;
endGame.Add(r);
} default:
} deck = new ExtremeDeck();
List<int> threeCard = new List<int>(); break;
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++)
{
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);
} }
} }
@ -119,9 +94,9 @@ namespace TheGameExtreme.model.manager
for (int i = 0; i < nbMaxCard; i++) for (int i = 0; i < nbMaxCard; i++)
{ {
playerList.ForEach(player => { playerList.ForEach(player => {
int r = new Random().Next(0, deck.Count - 1); int r = new Random().Next(0, deck.size() - 1);
player.pioche(deck[r]); player.pioche(deck.getCard(r));
deck.RemoveAt(r); deck.removeAt(r);
}); });
} }
} }

@ -26,7 +26,7 @@ namespace TheGameExtreme.model.manager
currentIndexPlayer = 0; currentIndexPlayer = 0;
} }
CurrentHand = playerList[currentIndexPlayer].getCardList(); CurrentHand = playerList[currentIndexPlayer].getCardList();
OnPlayerChanged(new PlayerChangedEventArgs(CurrentHand)); OnPlayerChanged(new PlayerChangedEventArgs(CurrentHand, playerList[currentIndexPlayer].Pseudo));
nbCardAtBeginOfTurn = CurrentHand.Count; nbCardAtBeginOfTurn = CurrentHand.Count;
CurrentCardPlayed.Clear(); CurrentCardPlayed.Clear();
@ -85,13 +85,13 @@ namespace TheGameExtreme.model.manager
int nbPickedCard = nbMaxCard - CurrentHand.Count; int nbPickedCard = nbMaxCard - CurrentHand.Count;
for (int i = 0; i < nbPickedCard; i++) for (int i = 0; i < nbPickedCard; i++)
{ {
if (deck.Count == 0) if (deck.size() == 0)
{ {
return; return;
} }
int random = new Random().Next(0, deck.Count - 1); int random = new Random().Next(0, deck.size() - 1);
playerList[currentIndexPlayer].pioche(deck[random]); playerList[currentIndexPlayer].pioche(deck.getCard(random));
deck.RemoveAt(random); deck.removeAt(random);
} }
} }

@ -1,164 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
using TheGameExtreme.model.@event;
namespace TheGameExtreme.model.manager
{
public class SoloGameManager : GameManager
{
public SoloGameManager(int nbPlayer, List<String> players)
: base(nbPlayer, players)
{
}
public override bool endTurn()
{
<<<<<<< HEAD
verifyNbCardPlay();
=======
// Vérifie que l'utilisateur a bien joué deux cartes
>>>>>>> c1e072686aecc6833e1faf062739820e55484d86
pioche();
currentIndexPlayer += 1;
if (currentIndexPlayer == playerList.Count)
{
currentIndexPlayer = 0;
}
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
{
displayWinner();
return true;
}
return false;
}
protected void verifyNbCardPlay()
{
foreach (Card cardPlayed in CurrentCardPlayed)
{
if (cardPlayed.GetType() == typeof(ThreeCard))
{
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()
{
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);
}
}
protected override bool isEndGame()
{
if (CurrentHand.Count != 0)
{
List<Card> playableCard = new List<Card>();
tryToFindSoluce(playableCard);
return testEndGame(playableCard);
}
return false;
}
protected override void tryToFindSoluce(List<Card> playableCard)
{
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)
{
playableCard.Add(card);
}
});
}
protected override bool testEndGame(List<Card> playableCard)
{
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;
}
}
}
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;
}
return false;
}
protected override bool effectLose()
{
foreach (Stack<Card> orderedStack in ListOrderedStacks)
{
if (orderedStack.Peek().GetType() == typeof(EndGameCard))
{
return true;
}
}
return false;
}
}
}

@ -16,6 +16,7 @@
<StackLayout <StackLayout
Orientation="Vertical" Orientation="Vertical"
Margin="10,20,10,20"> Margin="10,20,10,20">
<Label x:Name="pseudo" Text="Pseudo" />
<Label Text="Selectionner la pile sur laquel vous souhaitez poser la carte:" /> <Label Text="Selectionner la pile sur laquel vous souhaitez poser la carte:" />
<StackLayout <StackLayout
Orientation="Horizontal" Orientation="Horizontal"

@ -40,6 +40,7 @@ namespace TheGameExtreme
viewmodel.BindingChanged += OnBindingChanged; viewmodel.BindingChanged += OnBindingChanged;
Alert.SetBinding(Label.TextProperty, new Binding("Alert", source: viewmodel)); Alert.SetBinding(Label.TextProperty, new Binding("Alert", source: viewmodel));
pseudo.SetBinding(Label.TextProperty, new Binding("Pseudo", source: viewmodel));
inflateHand(); inflateHand();
@ -148,6 +149,7 @@ namespace TheGameExtreme
viewmodel.BindingChanged += OnBindingChanged; viewmodel.BindingChanged += OnBindingChanged;
Alert.SetBinding(Label.TextProperty, new Binding("Alert", source: viewmodel)); Alert.SetBinding(Label.TextProperty, new Binding("Alert", source: viewmodel));
pseudo.SetBinding(Label.TextProperty, new Binding("Pseudo", source: viewmodel));
inflateHand(); inflateHand();

@ -23,6 +23,16 @@ namespace TheGameExtreme.viewmodel
OnPropertyChanged("Alert"); OnPropertyChanged("Alert");
} }
} }
private string pseudo = "Pseudo";
public String Pseudo
{
get { return pseudo; }
set
{
pseudo = value;
OnPropertyChanged("Pseudo");
}
}
protected virtual void OnPropertyChanged(string info) protected virtual void OnPropertyChanged(string info)
{ {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info)); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info));
@ -30,7 +40,7 @@ namespace TheGameExtreme.viewmodel
private GameManager gameManager; private GameManager gameManager;
public List<Card> CurrentHand { get; set; } public List<Card> CurrentHand { get; set; }
private ObservableCollection<Stack<Card>> ListOrderedStacks; //private ObservableCollection<Stack<Card>> ListOrderedStacks;
public Main() public Main()
@ -43,12 +53,13 @@ namespace TheGameExtreme.viewmodel
CurrentHand = gameManager.CurrentHand; CurrentHand = gameManager.CurrentHand;
ListOrderedStacks = new ObservableCollection<Stack<Card>>(gameManager.ListOrderedStacks); //ListOrderedStacks = new ObservableCollection<Stack<Card>>(gameManager.ListOrderedStacks);
} }
protected internal void OnPlayerChanged(object source, PlayerChangedEventArgs args) protected internal void OnPlayerChanged(object source, PlayerChangedEventArgs args)
{ {
CurrentHand = args.NewCurrentHand; CurrentHand = args.NewCurrentHand;
Pseudo = args.Pseudo;
} }
public void OnTopRangeChanged(object source, TopRangeChangedEventArgs args) public void OnTopRangeChanged(object source, TopRangeChangedEventArgs args)

Loading…
Cancel
Save