}
// Dans le cas contraire, il faut tester les cas
else
{
Pack carpet = new Pack(game.getCarpet().getCards());
Card playedCard = game.getPlayers().get(numPlayer).getHand().getCards().get(numCard);
// Si la premi�re carte jou�e n'est pas un atout...
if (!carpet.getCards().get(0).isTrump())
{
// ...et que la carte s�lectionn�e est de la m�me couleur alors elle est valide.
if (carpet.getCards().get(0).getColor().equals(playedCard.getColor()))
{
return true;
}
// ...et que la carte s�lectionn�e est un atout...
else if (playedCard.isTrump())
{
// ...et que le joueur dispose d'une carte de la bonne couleur dans sa main...
for (Card c : game.getPlayers().get(numPlayer).getHand().getCards())
{
// ...alors la carte n'est pas valide.
if (carpet.getCards().get(0).getColor().equals(c.getColor()))
{
return false;
}
}
Pack playedTrumps = new Pack();
for (int i = 1; i < carpet.getCards().size(); i++)
{
if (carpet.getCards().get(i).isTrump())
{
playedTrumps.getCards().add(carpet.getCards().get(i));
}
}
// ...et qu'aucun autre autout n'a �t� jou�...
if (playedTrumps.getCards().size() == 0)
{
// ...alors la carte est valide.
return true;
}
// ...et qu'un autre atout (ou plusieurs) a d�j� �t� pos� sur le pli...
else
{
Card highestCard = playedTrumps.getCards().get(0);
for (Card c : playedTrumps.getCards())
{
highestCard = Card.max(playedCard, c);
}
// ...et que le joueur a pos� l'atout le plus haut...
if (playedCard.getName().equals(highestCard.getName()))
{
// ...alors la carte est valide.
return true;
}
// ...et que le joueur n'a pas choisi un atout plus haut...
else
{
for (Card c : game.getPlayers().get(numPlayer).getHand().getCards())
{
if (c.isTrump())
{
highestCard = Card.max(highestCard, c);
// ...et qu'il poss�de un atout sup�rieur au plus haut pos�...
if (highestCard.getName().equals(c.getName()))
{
// ...alors la carte n'est pas valide.
return false;
}
}
}
// ...et qu'il ne poss�de pas un atout sup�rieur au plus haut pos�
// ...alors la carte est valide.
return true;
}
}
}
// ...et que la carte diff�re en couleur...
else
{
// ...si une autre carte de la bonne couleur existe...
for (Card c : game.getPlayers().get(numPlayer).getHand().getCards())
{
// ...alors la carte n'est pas valide.
if (carpet.getCards().get(0).getColor().equals(c.getColor()))
{
return false;
}
}
// ...sinon si le pli est assez grand...
if (carpetSize > 1)
{
Card alliedCard = carpet.getCards().get(carpetSize - 2);
Card highestCard = carpet.getCards().get(0);
// ..et si la carte de l'alli� n'est pas un atout...
if (!alliedCard.isTrump())
{
Pack playedTrumps = new Pack();
for (int i = 0; i < carpet.getCards().size(); i++)
{
if (carpet.getCards().get(i).isTrump())
{
playedTrumps.getCards().add(carpet.getCards().get(i));
}
}
for (int i = 1; i < carpetSize; i ++)
{
if (carpet.getCards().get(i).getColor().equals(carpet.getCards().get(0).getColor()))
{
highestCard = Card.max(highestCard, carpet.getCards().get(i));
}
}
// ...et qu'elle est la plus forte du pli courant...
if ((alliedCard.getName().equals(highestCard.getName())) && (playedTrumps.getCards().size() == 0))
{
// ...alors la carte est valide.
return true;
}
// ...et qu'elle n'est pas la plus forte...
else
{
// ...et que le joueur poss�de un atout
for (Card c : game.getPlayers().get(numPlayer).getHand().getCards())
{
if (c.isTrump())
{
// ...alors la carte n'est pas valide.
return false;
}
}
// ...et que le joueur ne poss�de pas d'atouts, alors la carte est valide.
return true;
}
}
// ...et si la carte de l'alli� est un atout...
else
{
Pack playedTrumps = new Pack();
for (int i = 0; i < carpet.getCards().size(); i++)
{
if (carpet.getCards().get(i).isTrump())
{
playedTrumps.getCards().add(carpet.getCards().get(i));
}
}
// ...et qu'il est le seul atout coupant le pli...
if (playedTrumps.getCards().size() == 1)
{
// ...alors la carte est valide.
return true;
}
// ...et qu'il n'est pas le seul atout coupant le pli...
else
{
highestCard = playedTrumps.getCards().get(0);
for (Card c : playedTrumps.getCards())
{
highestCard = Card.max(highestCard, c);
}
// ...et qu'il poss�de l'atout le plus haut
if (highestCard.equals(alliedCard))
{
// ...alors la carte est valide.
return true;
}
// ...et qu'il ne poss�de pas l'atout le plus haut...
else
{
// ...et que le joueur poss�de un atout
for (Card c : game.getPlayers().get(numPlayer).getHand().getCards())
{
if (c.isTrump())
{
// ...alors la carte n'est pas valide.
return false;
}
}
// ...et que le joueur ne poss�de pas d'atouts, alors la carte est valide.
return true;
}
}
}
}
// ...sinon si le pli est trop petit...
else
{
// ...et que le joueur poss�de un atout
for (Card c : game.getPlayers().get(numPlayer).getHand().getCards())
{
if (c.isTrump())
{
// ...alors la carte n'est pas valide.
return false;
}
}
// ...sinon la carte est valide.
return true;
}
}
}
// Si la premi�re carte jou�e est un atout...
else
{
// ...et que la carte choisie est un atout...
if (playedCard.isTrump())
{
// (on cr�� une liste contenant tous les atouts jou�s)
Pack playedTrumps = new Pack();
for (int i = 0; i < carpet.getCards().size(); i++)
{
if (carpet.getCards().get(i).isTrump())
{
playedTrumps.getCards().add(carpet.getCards().get(i));
}
}
Card highestCard = playedTrumps.getCards().get(0);
for (Card c : playedTrumps.getCards())
{
highestCard = Card.max(highestCard, c);
}
highestCard = Card.max(highestCard, playedCard);
// ...et que le joueur a pos� l'atout le plus haut...
if (playedCard.getName().equals(highestCard.getName()))
{
// ...alors la carte est valide.
return true;
}
// ...et que le joueur n'a pas choisi un atout plus haut...
else
{
for (Card c : game.getPlayers().get(numPlayer).getHand().getCards())
{
if (c.isTrump())
{
highestCard = Card.max(highestCard, c);
// ...et qu'il poss�de un atout sup�rieur au plus haut pos�...
if (highestCard.getName().equals(c.getName()))
{
// ...alors la carte n'est pas valide.
return false;
}
}