Ajout de la possibilité d'iimplémentation de règle

master
cldupland 6 years ago
parent b00eb55fd0
commit e7c0991826

@ -17,7 +17,8 @@
<Folder Include="model\rule\" />
<Folder Include="model\rule\playRules\" />
<Folder Include="model\Card\rapidCard\" />
<Folder Include="model\rule\endRule\" />
<Folder Include="model\rule\endTurnRules\" />
<Folder Include="model\rule\beforeEndTurnRules\" />
</ItemGroup>
<ItemGroup>
<Compile Remove="model\effect\StopColm.cs" />

@ -2,7 +2,8 @@
using System.Collections.Generic;
using TheGameExtreme.model.card;
using TheGameExtreme.model.rule;
using TheGameExtreme.model.rule.endRule;
using TheGameExtreme.model.rule.beforeEndTurnRules;
using TheGameExtreme.model.rule.endTurnRules;
using TheGameExtreme.model.rule.playRules;
namespace TheGameExtreme.model
@ -11,6 +12,7 @@ namespace TheGameExtreme.model
{
private List<Rule> playRule = new List<Rule>();
private List<Rule> beforeEndTurnRule = new List<Rule>();
private List<Rule> endTurnRule = new List<Rule>();
private List<Rule> commonRule = new List<Rule>();
@ -28,17 +30,38 @@ namespace TheGameExtreme.model
endTurnRule?.Add(rule);
}
public void addBeforeEndTurnRule(BeforeEndTurnRule rule)
{
beforeEndTurnRule?.Add(rule);
}
public void addCommonRule(Rule rule)
{
// Vérifier que se ne soit ni une PlayRule, ni une EndTurnRule ?
commonRule?.Add(rule);
}
public bool checkPlayRule(Card card, Stack<Card> orderedStack, bool bottomUp)
public bool checkPlayRule(Card card, Stack<Card> orderedStack, bool bottomUp, List<Card> CurrentHand)
{
foreach(PlayRule rule in playRule)
{
if (!rule.Test(card, orderedStack, bottomUp)) // Gestion des messages pour savoir qu'elle règle n'est pas respecter.
if (rule.Test(card, orderedStack, bottomUp, CurrentHand)) // Gestion des messages pour savoir qu'elle règle n'est pas respecter.
{
return true;
}
}
foreach (Rule rule in commonRule)
{
}
return false;
}
public bool checkBeforeEndTurnRule(List<Card> CurrentCardPlayed, int nbCardAtBeginOfTurn, List<Card> CurrentHand)
{
foreach (BeforeEndTurnRule rule in beforeEndTurnRule)
{
if (!rule.Test(CurrentCardPlayed, nbCardAtBeginOfTurn, CurrentHand)) // Gestion des messages pour savoir qu'elle règle n'est pas respecter.
{
return false;
}
@ -50,11 +73,11 @@ namespace TheGameExtreme.model
return true;
}
public bool checkEndTurnRule()
public bool checkEndTurnRule(List<Card> CurrentCardPlayed, int nbCardAtBeginOfTurn, List<Card> CurrentHand)
{
foreach (EndTurnRule rule in endTurnRule)
{
if (!rule.Test()) // Gestion des messages pour savoir qu'elle règle n'est pas respecter.
if (!rule.Test(CurrentCardPlayed, nbCardAtBeginOfTurn, CurrentHand)) // Gestion des messages pour savoir qu'elle règle n'est pas respecter.
{
return false;
}

@ -3,7 +3,8 @@ using System.Collections.Generic;
using TheGameExtreme.model.card;
using TheGameExtreme.model.deck;
using TheGameExtreme.model.@event;
using TheGameExtreme.model.rule.endRule;
using TheGameExtreme.model.rule.beforeEndTurnRules;
using TheGameExtreme.model.rule.endTurnRules;
using TheGameExtreme.model.rule.playRules;
namespace TheGameExtreme.model.manager
@ -38,6 +39,20 @@ namespace TheGameExtreme.model.manager
players.ForEach(player => playerList.Add(new Player(player)));
initStacks();
initRule();
createDeck();
defineNbMaxCard();
distribueCard();
CurrentHand = playerList[currentIndexPlayer].getCardList();
nbCardAtBeginOfTurn = CurrentHand.Count;
}
protected void initStacks()
{
ListOrderedStacks.Add(new Stack<Card>());
ListOrderedStacks.Add(new Stack<Card>());
ListOrderedStacks.Add(new Stack<Card>());
@ -54,21 +69,19 @@ namespace TheGameExtreme.model.manager
ListOrderedStacks[i].Push(new ClassicCard(100));
}
}
}
protected void initRule()
{
gameMode = new GameMode();
gameMode.addPlayRule(new Ascendant());
gameMode.addPlayRule(new Descendant());
gameMode.addPlayRule(new PasDeDix());
//gameMode.addPlayRule(new VoidHand());
gameMode.addBeforeEndTurnRule(new NbCardPlay());
gameMode.addEndTurnRule(new EndGame(ListOrderedStacks));
gameMode.addEndTurnRule(new VoidDeck());
gameMode.addEndTurnRule(new VoidHand());
createDeck();
defineNbMaxCard();
distribueCard();
CurrentHand = playerList[currentIndexPlayer].getCardList();
nbCardAtBeginOfTurn = CurrentHand.Count;
//gameMode.addEndTurnRule(new VoidDeck());
//gameMode.addEndTurnRule(new CompleteHand());
}
protected void createDeck()
@ -146,17 +159,17 @@ namespace TheGameExtreme.model.manager
protected void testPossibility(Card card, Stack<Card> orderedStack, bool bottomUp)
{
if (gameMode.checkPlayRule(card, orderedStack, bottomUp))
if (gameMode.checkPlayRule(card, orderedStack, bottomUp, CurrentHand))
{
Card oldCard = orderedStack.Peek();
playerList[currentIndexPlayer].joue(card);
CurrentCardPlayed.Add(card);
orderedStack.Push(card);
OnTopRangeChanged(new TopRangeChangedEventArgs(card, oldCard, ListOrderedStacks.IndexOf(orderedStack)));
if (CurrentHand.Count == 0)
{
endTurn(); // Presque bon, oublie juste d'afficher les nouvelles cartes
}
//if (CurrentHand.Count == 0)
//{
// endTurn(); // Presque bon, oublie juste d'afficher les nouvelles cartes
//}
}
else
{

@ -18,29 +18,40 @@ namespace TheGameExtreme.model.manager
public override bool endTurn()
{
//if (gameMode.checkEndTurnRule())
//{
verifyNbCardPlay();
if (gameMode.checkBeforeEndTurnRule(CurrentCardPlayed, nbCardAtBeginOfTurn, CurrentHand))
{
//verifyNbCardPlay();
pioche();
//}
currentIndexPlayer += 1;
if (currentIndexPlayer == playerList.Count)
{
currentIndexPlayer = 0;
}
CurrentHand = playerList[currentIndexPlayer].getCardList();
OnPlayerChanged(new PlayerChangedEventArgs(CurrentHand, playerList[currentIndexPlayer].Pseudo));
nbCardAtBeginOfTurn = CurrentHand.Count;
CurrentCardPlayed.Clear();
if (gameMode.checkEndTurnRule(CurrentCardPlayed, nbCardAtBeginOfTurn, CurrentHand))
{
//if (isEndGame()) // Ajouter le score en calculant les cartes restantes dans la pile et dans les mains des joueurs
//{
// displayWinner();
// return true;
//}
currentIndexPlayer += 1;
if (currentIndexPlayer == playerList.Count)
{
currentIndexPlayer = 0;
return false;
}
else
{
return true;
}
}
CurrentHand = playerList[currentIndexPlayer].getCardList();
OnPlayerChanged(new PlayerChangedEventArgs(CurrentHand, playerList[currentIndexPlayer].Pseudo));
nbCardAtBeginOfTurn = CurrentHand.Count;
CurrentCardPlayed.Clear();
if (isEndGame()) // Ajouter le score en calculant les cartes restantes dans la pile et dans les mains des joueurs
else
{
displayWinner();
return true;
return false;
}
return false;
}
protected void verifyNbCardPlay()

@ -6,10 +6,6 @@ namespace TheGameExtreme.model.rule
public abstract class Rule
{
public Rule()
{
}
public bool Test()
{
throw new NotImplementedException();

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

@ -1,18 +0,0 @@
using System;
using System.Collections.Generic;
using TheGameExtreme.model.card;
namespace TheGameExtreme.model.rule.endRule
{
public class VoidHand : EndTurnRule
{
public VoidHand()
{
}
public override bool Test(List<Card> CurrentCardPlayed, int nbCardAtBeginOfTurn, List<Card> CurrentHand)
{
throw new NotImplementedException();
}
}
}

@ -0,0 +1,24 @@
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;
}
}
}

@ -3,11 +3,13 @@ using System.Collections.Generic;
using TheGameExtreme.model.card;
using TheGameExtreme.model.card.rapidCard;
namespace TheGameExtreme.model.rule.endRule
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)
@ -45,15 +47,15 @@ namespace TheGameExtreme.model.rule.endRule
{
if (Equals(c.getName(), ThreeCard.CARD_THREE))
{
return true;
return false;
}
}
}
else if (playableCard.Count < 2)
{
return true;
return false;
}
return false;
return true;
}
}

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

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

@ -9,11 +9,7 @@ namespace TheGameExtreme.model.rule.playRules
public static readonly String REGLE_ASCENDANT = "Ascendant";
public Ascendant()
{
}
override public bool Test(Card playedCard, Stack<Card> stack, bool bottomUp)
override public bool Test(Card playedCard, Stack<Card> stack, bool bottomUp, List<Card> CurrentHand)
{
if (bottomUp && playedCard.Value > stack.Peek().Value)
{

@ -9,13 +9,9 @@ namespace TheGameExtreme.model.rule.playRules
public static readonly String REGLE_DESCENDANT = "Descendant";
public Descendant()
override public bool Test(Card playedCard, Stack<Card> stack, bool bottomUp, List<Card> CurrentHand)
{
}
override public bool Test(Card playedCard, Stack<Card> stack, bool bottomUp)
{
if (bottomUp && playedCard.Value > stack.Peek().Value)
if (!bottomUp && playedCard.Value < stack.Peek().Value)
{
return true;
}

@ -9,11 +9,7 @@ namespace TheGameExtreme.model.rule.playRules
public static readonly String REGLE_PASDEDIX = "PasDeDix";
public PasDeDix()
{
}
override public bool Test(Card playedCard, Stack<Card> stack, bool bottomUp)
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)
{

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

@ -0,0 +1,22 @@
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;
}
}
}

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"

Loading…
Cancel
Save