Fin de la version brouillon du model

master
cldupland 6 years ago
parent 93dde67e78
commit 2d1df465e8

@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model;
using TheGameExtreme.model.gameActions.classic;
namespace TheGameExtreme
{
public class Parametreur
{
public GameMode GameMode { get; set; }
public List<Player> players = new List<Player>();
public int NbPlayer { get; set; }
public Parametreur(GameMode gameMode)
{
GameMode = gameMode;
}
public void Prepare()
{
NbPlayer = players.Count;
GameMode.load(NbPlayer, players);
}
public void AddPlayer(Player player)
{
if (player != null)
{
players.Add(player);
}
}
}
}

@ -14,11 +14,7 @@
<Folder Include="viewmodel\" /> <Folder Include="viewmodel\" />
<Folder Include="model\card\" /> <Folder Include="model\card\" />
<Folder Include="model\deck\" /> <Folder Include="model\deck\" />
<Folder Include="model\rule\" />
<Folder Include="model\rule\playRules\" />
<Folder Include="model\Card\rapidCard\" /> <Folder Include="model\Card\rapidCard\" />
<Folder Include="model\rule\endTurnRules\" />
<Folder Include="model\rule\beforeEndTurnRules\" />
<Folder Include="model\gameActions\" /> <Folder Include="model\gameActions\" />
<Folder Include="model\gameActions\extreme\" /> <Folder Include="model\gameActions\extreme\" />
<Folder Include="model\gameActions\classic\" /> <Folder Include="model\gameActions\classic\" />

@ -3,23 +3,23 @@ using System.ComponentModel;
namespace TheGameExtreme.model.card namespace TheGameExtreme.model.card
{ {
public abstract class Card : INotifyPropertyChanged public abstract class Card // : INotifyPropertyChanged
{ {
public event PropertyChangedEventHandler PropertyChanged; //public event PropertyChangedEventHandler PropertyChanged;
private int value; private int value;
public int Value public int Value
{ {
get { return value; } get { return value; }
set { set {
this.value = value; this.value = value;
OnPropertyChange("Value"); //OnPropertyChange("Value");
} }
} }
private void OnPropertyChange(string v) //private void OnPropertyChange(string v)
{ //{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(v)); // PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(v));
} //}
public Card(int value) public Card(int value)

@ -123,7 +123,7 @@ namespace TheGameExtreme.model.gameActions.classic
nbCardAtBeginOfTurn = currentHand.Count; nbCardAtBeginOfTurn = currentHand.Count;
CurrentCardPlayed.Clear(); CurrentCardPlayed.Clear();
OnPlayerChanged(new PlayerChangedEventArgs(currentHand, player.Pseudo)); OnPlayerChanged(null);
return false; return false;
} }
else else

@ -13,12 +13,8 @@ namespace TheGameExtreme.model.manager
/* GameMaster implémente un mode de jeu (classe fille de gameMode qui connait les actions a effectué en fonction du mode de jeu */ /* GameMaster implémente un mode de jeu (classe fille de gameMode qui connait les actions a effectué en fonction du mode de jeu */
protected GameMode gameMode; protected Parametreur preparateur;
public readonly int nbPlayer;
protected List<Player> players = new List<Player>();
public Piles ListOrderedStacks { get; set; } public Piles ListOrderedStacks { get; set; }
//protected int nbCardAtBeginOfTurn;
protected int nbMaxCard;
protected List<Card> CurrentCardPlayed = new List<Card>(); protected List<Card> CurrentCardPlayed = new List<Card>();
public String EndMessage { get; set; } public String EndMessage { get; set; }
protected int currentIndexPlayer; protected int currentIndexPlayer;
@ -48,55 +44,50 @@ namespace TheGameExtreme.model.manager
{ {
TopRangeChanged?.Invoke(this, args); TopRangeChanged?.Invoke(this, args);
} }
protected internal void OnPlayerChanged(PlayerChangedEventArgs args) protected internal void OnPlayerChanged(object source, PlayerChangedEventArgs args)
{ {
currentIndexPlayer += 1; currentIndexPlayer += 1;
if (currentIndexPlayer == players.Count) if (currentIndexPlayer == preparateur.players.Count)
{ {
currentIndexPlayer = 0; currentIndexPlayer = 0;
} }
CurrentHand = players[currentIndexPlayer].getCardList(); CurrentHand = preparateur.players[currentIndexPlayer].getCardList();
PlayerChanged?.Invoke(this, args); PlayerChanged?.Invoke(this, new PlayerChangedEventArgs(CurrentHand, preparateur.players[currentIndexPlayer].Pseudo));
} }
#endregion #endregion
//protected bool win = true; protected GameManager(Parametreur parametreur)
//public String EndMessage { get; set; }
protected GameManager(List<string> playersNames, GameMode gameMode)
{ {
nbPlayer = playersNames.Count; this.preparateur = parametreur;
playersNames.ForEach(playerName => players.Add(new Player(playerName)));
parametreur.Prepare();
this.gameMode = gameMode; parametreur.GameMode.TopRangeChanged += OnTopRangeChanged;
gameMode.load(nbPlayer, players);
gameMode.TopRangeChanged += OnTopRangeChanged; parametreur.GameMode.PlayerChanged += OnPlayerChanged;
CurrentHand = players[0].getCardList(); CurrentHand = parametreur.players[0].getCardList();
} }
public void joue(int valueCard, int orderedStackSelected) public void joue(int valueCard, int orderedStackSelected)
{ {
gameMode.playCard(valueCard, currentHand, orderedStackSelected, players[currentIndexPlayer], CurrentCardPlayed); // Mettre le joueur actif preparateur.GameMode.playCard(valueCard, currentHand, orderedStackSelected, preparateur.players[currentIndexPlayer], CurrentCardPlayed); // Mettre le joueur actif
EndMessage = gameMode.Message; EndMessage = preparateur.GameMode.Message;
} }
public bool endTurn() public bool endTurn()
{ {
if(gameMode.endTurn(currentHand, CurrentCardPlayed, players[currentIndexPlayer])) if(preparateur.GameMode.endTurn(currentHand, CurrentCardPlayed, preparateur.players[currentIndexPlayer]))
{ {
EndMessage = gameMode.Message; EndMessage = preparateur.GameMode.Message;
if (isEndGame()) if (isEndGame())
{ {
EndMessage = gameMode.Message; EndMessage = preparateur.GameMode.Message;
return true; return true;
} }
else else
@ -112,7 +103,7 @@ namespace TheGameExtreme.model.manager
private bool isEndGame() private bool isEndGame()
{ {
return gameMode.isEndGame(currentHand); return preparateur.GameMode.isEndGame(currentHand);
} }

@ -6,7 +6,7 @@ namespace TheGameExtreme.model.manager
{ {
public abstract class MultiplayerGameManager : GameManager public abstract class MultiplayerGameManager : GameManager
{ {
protected MultiplayerGameManager(List<string> players, GameMode gameMode) : base(players, gameMode) protected MultiplayerGameManager(Parametreur parametreur) : base(parametreur)
{ {
} }
} }

@ -7,8 +7,8 @@ namespace TheGameExtreme.model.manager
public class SoloGameManager : GameManager public class SoloGameManager : GameManager
{ {
public SoloGameManager(List<String> players, GameMode gameMode) public SoloGameManager(Parametreur parametreur)
: base(players, gameMode) : base(parametreur)
{ {
} }

@ -7,7 +7,7 @@ namespace TheGameExtreme.model.manager
{ {
public class LocalGameManager : MultiplayerGameManager public class LocalGameManager : MultiplayerGameManager
{ {
public LocalGameManager(List<string> players, GameMode gameMode) : base(players, gameMode) public LocalGameManager(Parametreur parametreur) : base(parametreur)
{ {
} }

@ -7,7 +7,7 @@ namespace TheGameExtreme.model.manager.multiplayer
{ {
public class RemoteGameManager : MultiplayerGameManager public class RemoteGameManager : MultiplayerGameManager
{ {
public RemoteGameManager(List<string> players, GameMode gameMode) : base(players, gameMode) public RemoteGameManager(Parametreur parametreur) : base(parametreur)
{ {
} }

@ -1,10 +0,0 @@
using System;
namespace TheGameExtreme.model.rule
{
public class InfinitEffect : Rule
{
public InfinitEffect()
{
}
}
}

@ -1,38 +0,0 @@
using System;
namespace TheGameExtreme.model.rule
{
public class RapidEffect : Rule
{
public RapidEffect()
{
}
// Checker les cartes du haut de pile et celle joué.
//protected bool effectLose()
//{
// foreach (Stack<Card> orderedStack in ListOrderedStacks)
// {
// if (Equals(orderedStack.Peek().getName(), EndGameCard.CARD_ENDGAME))
// {
// return true;
// }
// }
// return false;
//}
//foreach (Card cardPlayed in CurrentCardPlayed)
//{
// if (Equals(cardPlayed.GetType(), ThreeCard.CARD_THREE))
// {
// if ((nbCardAtBeginOfTurn - CurrentHand.Count) < 3)
// {
// return true;
// }
// }
//}
}
}

@ -1,15 +0,0 @@
using System;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.rule
{
public abstract class Rule
{
public bool Test()
{
throw new NotImplementedException();
}
}
}

@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.rule.beforeEndTurnRules
{
public abstract class BeforeEndTurnRule : Rule
{
public abstract bool Test(List<Card> CurrentCardPlayed, int nbCardAtBeginOfTurn, List<Card> CurrentHand);
}
}

@ -1,24 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.rule.beforeEndTurnRules
{
public class NbCardPlay : BeforeEndTurnRule
{
override public bool Test(List<Card> CurrentCardPlayed, int nbCardAtBeginOfTurn, List<Card> CurrentHand)
{
if (CurrentHand.Count == 0)
{
return true;
}
if ((nbCardAtBeginOfTurn - CurrentHand.Count) < 2)
{
return false;
}
return true;
}
}
}

@ -1,24 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.rule.endTurnRules
{
public class CompleteHand : EndTurnRule
{
public static readonly String REGLE_COMPLETEHAND = "Complete Hand";
public override bool Test(List<Card> CurrentCardPlayed, int nbCardAtBeginOfTurn, List<Card> CurrentHand)
{
// Si carte qui fait piocher que d'un, vérifier la bonne pioche (penser si elle vient d'être recouverte)
// Sinon
if (nbCardAtBeginOfTurn == CurrentCardPlayed.Count)
{
return true;
}
return false;
}
}
}

@ -1,62 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
using TheGameExtreme.model.card.rapidCard;
namespace TheGameExtreme.model.rule.endTurnRules
{
public class EndGame : EndTurnRule
{
public static readonly String REGLE_ENDGAME = "End Game";
public List<Stack<Card>> ListOrderedStacks { get; set; }
public EndGame(List<Stack<Card>> ListOrderedStacks)
{
this.ListOrderedStacks = ListOrderedStacks;
}
public override bool Test(List<Card> CurrentCardPlayed, int nbCardAtBeginOfTurn, List<Card> CurrentHand)
{
if (CurrentHand.Count != 0)
{
List<Card> playableCard = new List<Card>();
tryToFindSoluce(playableCard, CurrentHand);
return testEndGame(playableCard);
}
return false;
}
protected void tryToFindSoluce(List<Card> playableCard, List<Card> CurrentHand)
{
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 bool testEndGame(List<Card> playableCard)
{
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;
}
return true;
}
}
}

@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.rule.endTurnRules
{
public abstract class EndTurnRule : Rule
{
public abstract bool Test(List<Card> CurrentCardPlayed, int nbCardAtBeginOfTurn, List<Card> CurrentHand);
}
}

@ -1,17 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.rule.endTurnRules
{
public class VoidDeck : EndTurnRule
{
public static readonly String REGLE_VOIDDECK = "Void Deck";
public override bool Test(List<Card> CurrentCardPlayed, int nbCardAtBeginOfTurn, List<Card> CurrentHand)
{
throw new NotImplementedException();
}
}
}

@ -1,22 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.rule.playRules
{
public class Ascendant : PlayRule
{
public static readonly String REGLE_ASCENDANT = "Ascendant";
override public bool Test(Card playedCard, Stack<Card> stack, bool bottomUp, List<Card> CurrentHand)
{
if (bottomUp && playedCard.Value > stack.Peek().Value)
{
return true;
}
return false;
}
}
}

@ -1,21 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.rule.playRules
{
public class Descendant : PlayRule
{
public static readonly String REGLE_DESCENDANT = "Descendant";
override public bool Test(Card playedCard, Stack<Card> stack, bool bottomUp, List<Card> CurrentHand)
{
if (!bottomUp && playedCard.Value < stack.Peek().Value)
{
return true;
}
return false;
}
}
}

@ -1,22 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.rule.playRules
{
public class PasDeDix : PlayRule
{
public static readonly String REGLE_PASDEDIX = "PasDeDix";
override public bool Test(Card playedCard, Stack<Card> stack, bool bottomUp, List<Card> CurrentHand)
{
if ((stack.Peek().Value + 10) == playedCard.Value || (stack.Peek().Value - 10) == playedCard.Value)
{
return true;
}
return false;
}
}
}

@ -1,11 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.rule.playRules
{
public abstract class PlayRule : Rule
{
public abstract bool Test(Card playedCard, Stack<Card> stack, bool bottomUp, List<Card> CurrentHand);
}
}

@ -1,22 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.rule.playRules
{
public class VoidHand : PlayRule
{
public static readonly String REGLE_VOIDHAND = "Void Hand";
override public bool Test(Card playedCard, Stack<Card> stack, bool bottomUp, List<Card> CurrentHand)
{
if (CurrentHand.Count == 0)
{
return false;
}
return true;
}
}
}

@ -33,12 +33,19 @@ namespace TheGameExtreme.view
viewmodel.BindingChanged += OnBindingChanged; viewmodel.BindingChanged += OnBindingChanged;
//viewmodel.PlayerChanged += OnPlayerChanged;
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)); pseudo.SetBinding(Label.TextProperty, new Binding("Pseudo", source: viewmodel));
inflateHand(); inflateHand();
} }
//private void OnPlayerChanged(object sender, PlayerChangedEventArgs args)
//{
// inflateHand();
//}
private void inflateHand() private void inflateHand()
{ {
Hand.Children.Clear(); Hand.Children.Clear();
@ -145,6 +152,7 @@ namespace TheGameExtreme.view
private void endTurn(object sender, EventArgs args) private void endTurn(object sender, EventArgs args)
{ {
viewmodel.Alert = "";
if (viewmodel.endTurn()) if (viewmodel.endTurn())
{ {
botPanel.Children.Add(button); botPanel.Children.Add(button);

@ -0,0 +1,33 @@
using System;
using System.ComponentModel;
using TheGameExtreme.model.card;
namespace TheGameExtreme.viewmodel
{
public class CardVM : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public Card View { get; set; }
private int value;
public int Value {
get { return value; }
set
{
this.value = value;
OnPropertyChanged("Value");
}
}
protected virtual void OnPropertyChanged(string info)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info));
}
public CardVM(Card view)
{
View = view;
Value = view.Value;
}
}
}

@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.ComponentModel; using System.ComponentModel;
using TheGameExtreme.model;
using TheGameExtreme.model.card; using TheGameExtreme.model.card;
using TheGameExtreme.model.@event; using TheGameExtreme.model.@event;
using TheGameExtreme.model.gameActions.classic; using TheGameExtreme.model.gameActions.classic;
@ -12,8 +13,10 @@ namespace TheGameExtreme.viewmodel
public class Main : INotifyPropertyChanged public class Main : INotifyPropertyChanged
{ {
//public event EventHandler<PlayerChangedEventArgs> PlayerChanged;
public event EventHandler<TopRangeChangedEventArgs> BindingChanged; public event EventHandler<TopRangeChangedEventArgs> BindingChanged;
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
private List<PlayerVM> players = new List<PlayerVM>();
private string alert = ""; private string alert = "";
public String Alert public String Alert
{ {
@ -46,14 +49,20 @@ namespace TheGameExtreme.viewmodel
public Main() public Main()
{ {
gameManager = new SoloGameManager(new List<String> { "Clément", "Baptiste" }, new GameMode()) ; // Donner le nom des joueurs List<string> playersNames = new List<string> { "Clément", "Baptiste" };
playersNames.ForEach(name => players.Add(new PlayerVM(new Player(name))));
Parametreur parametreur = new Parametreur(new GameMode());
players.ForEach(player => parametreur.AddPlayer(player.View));
gameManager = new SoloGameManager(parametreur) ; // Donner le nom des joueurs
gameManager.TopRangeChanged += OnTopRangeChanged; gameManager.TopRangeChanged += OnBindingChanged;
gameManager.PlayerChanged += OnPlayerChanged; gameManager.PlayerChanged += OnPlayerChanged;
CurrentHand = gameManager.CurrentHand; CurrentHand = gameManager.CurrentHand;
Pseudo = players[0].Pseudo;
//ListOrderedStacks = new ObservableCollection<Stack<Card>>(gameManager.ListOrderedStacks); //ListOrderedStacks = new ObservableCollection<Stack<Card>>(gameManager.ListOrderedStacks);
} }
@ -61,9 +70,10 @@ namespace TheGameExtreme.viewmodel
{ {
CurrentHand = args.NewCurrentHand; CurrentHand = args.NewCurrentHand;
Pseudo = args.Pseudo; Pseudo = args.Pseudo;
//PlayerChanged?.Invoke(this, args);
} }
public void OnTopRangeChanged(object source, TopRangeChangedEventArgs args) public void OnBindingChanged(object source, TopRangeChangedEventArgs args)
{ {
BindingChanged?.Invoke(this, args); BindingChanged?.Invoke(this, args);
} }

@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model;
using TheGameExtreme.model.card;
using TheGameExtreme.model.@event;
namespace TheGameExtreme.viewmodel
{
public class PlayerVM
{
public Player View { get; set; }
public string Pseudo { get; set; }
private List<CardVM> cardList = new List<CardVM>();
//public event EventHandler<HandCardChangedEventArgs> HandCardChanged;
public PlayerVM(Player view)
{
View = view;
Pseudo = view.Pseudo;
view.getCardList().ForEach(card => cardList.Add(new CardVM(card)));
View.HandCardChanged += OnHandCardChanged;
}
private void OnHandCardChanged(object sender, HandCardChangedEventArgs args)
{
if (args.NewCard == null)
{
cardList.RemoveAt(args.Position);
}
else
{
cardList.Insert(args.Position, new CardVM(args.NewCard));
}
}
public void pioche(CardVM card)
{
View.pioche(card.View);
}
public List<CardVM> getCardList()
{
return cardList;
}
}
}
Loading…
Cancel
Save