using System;
using System.Collections.Generic;
using OrderStacks.model.card;
using OrderStacks.model.deck;
using OrderStacks.model.gameActions.abstractRules;
using OrderStacks.model.gameActions.classic;
using OrderStacks.model.piles;
namespace OrderStacks.model.gameActions.decimals
{
public class GameModeDecimal : GameMode
{
/**
* Deck de carte
* Piles du jeu
*
* Constructeur
*/
public GameModeDecimal(Piles piles, Deck deck) : base(piles, deck)
{
}
/**
* Nombre de joueur
* Pseudo du/des joueur(s)
*
* Fonction permettant de charger les paramètres de jeu
*/
override public void load(int nbPlayer, List players)
{
gameActions.Add(new PiocherClassic(Piles));
gameActions.Add(new JouerUneCarteDecimal(Piles));
gameActions.Add(new TerminerSonTourDecimal(Piles));
defineNbMaxCard(nbPlayer);
distribueCard(players);
}
/**
* Liste de carte du joueur actif
* Joueur actif
*
* Fonction permettant au joueur actif de piocher une carte
*/
override public void pioche(List currentHand, Player player)
{
Message = "";
((PiocherClassic)gameActions[0]).pioche(currentHand, deck, player, nbMaxCard);
quickSort(currentHand, 0, currentHand.Count - 1);
}
/**
* Joueur actif
* Liste de carte du joeuur actif
* Liste des cartes jouées durant le tour du joueur actif
* Pile séléctionnée
* Valeur de la carte en train d'être joué
*
* Fonction permettant de tenter de jouer une carte
*
* Booléen de carte joué
*/
override public bool playCard(decimal valueCard, List currentHand, int orderedStackSelected, Player player, List CurrentCardPlayed)
{
Message = "";
if (((JouerUneCarteDecimal)gameActions[1]).play(valueCard, currentHand, orderedStackSelected, player, CurrentCardPlayed))
{
return true;
}
else
{
if (!end)
{
Message = ((JouerUneCarteDecimal)gameActions[1]).ErrorMessage;
}
return false;
}
}
/**
* Liste de carte du joueur actif
* Liste des cartes jouées durant le tour du joueur actif
* Joueur actif
*
* Fonction permettant de lancer la fin du tour et de vérifier la fin du jeu
*
* Booléen de fin de jeu
*/
override public bool endTurn(List currentHand, List CurrentCardPlayed, Player player)
{
Message = "";
if (((TerminerSonTourDecimal)gameActions[2]).end(currentHand, CurrentCardPlayed))
{
pioche(currentHand, player);
CurrentCardPlayed.Clear();
OnPlayerChanged(null);
return end;
}
else
{
Message = ((TerminerSonTourDecimal)gameActions[2]).ErrorMessage;
return false;
}
}
/**
* Liste de carte du joueur actif
*
* Fonction permettant de vérifier si c'est la fin du jeu
*/
override public void TestEndGame(List currentHand)
{
if (((TerminerSonTourDecimal)gameActions[2]).Test(currentHand))
{
end = false;
}
else
{
OnEndGame(new EventArgs());
end = true;
}
}
}
}