/**
   * Returns player's card.
   *
   * @param player AI player.
   * @param opposite player.
   * @return Card object instance or null.
   */
  protected Card getPlayMethodCard(final Player player) {
    Card result = null;
    for (PackIterator iterator = player.getCards().iterator(); iterator.hasNext(); ) {
      final Card card = iterator.next();
      final Pack pack = possibleEnemyCards(player, true);

      final Card bestSuitCard = pack.findMaxSuitCard(card.getSuit());
      final boolean isSingleCard = player.getCards().getSuitCount(card.getSuit()) == 1;

      if (isSingleCard
          && bestSuitCard != null
          && bestSuitCard.getRank().compareTo(card.getRank()) > 0) {
        if (result == null || result.getRank().compareTo(card.getRank()) > 0) {
          result = card;
        }
      }
    }
    return canPlayWithoutLoose(getRival(player), result) ? result : null;
  }
  /**
   * Returns player's card.
   *
   * @param player AI player.
   * @param opposite standard player.
   * @return Card object instance or null.
   */
  protected Card getPlayMethodCard(final Player player) {
    final Card result = player.getCards().findMaxSuitCard(game.getTrumpSuit());
    final Card rivalCard = getRival(player).getPlayedCard();

    if (result != null
        && rivalCard != null
        && (!rivalCard.getSuit().equals(game.getTrumpSuit())
            || rivalCard.getRank().compareTo(result.getRank()) < 0)) {
      if (player.getPoints(game.getTrumpSuit()) + Card.getPoints(rivalCard) + Card.getPoints(result)
          >= SantaseFacade.END_GAME_POINTS) {
        return result;
      }
    }
    return null;
  }