Exemple #1
0
  /**
   * Retorna uma carta aleatoria do baralho.
   *
   * @return Carta
   * @throws IndexOutOfBoundsException
   */
  public Carta get() throws IndexOutOfBoundsException {
    int index = randomizer.nextInt(baralho.size());
    Carta c = baralho.get(index);
    baralho.remove(index);

    return c;
  }
Exemple #2
0
  /**
   * Verifica se pode adicionar uma sequencia de cartas a uma pilha.
   *
   * @param s
   * @param index
   * @return True/False
   * @throws GameException
   */
  public boolean canPut(DoubleLinkedList<Carta> s, int index) throws GameException {
    try {
      boolean verificar = false;
      if (s.size() == 0) return false;
      // verificar a primeira carta antes de verificar as restantes
      if (pilhas[index].size() != 0
              && s.getFirst().valor().ordinal() == pilhas[index].getLast().valor().ordinal() - 1
              && s.getFirst().naipe().ordinal() % 2 != pilhas[index].getLast().naipe().ordinal() % 2
          || pilhas[index].size() == 0 && s.getFirst().valor() == Carta.Valor.REI) {
        verificar = true;
      }

      if (verificar) {
        // verificar as seguintes
        int valInicial = s.getFirst().valor().ordinal();
        int naipeInicial = s.getFirst().naipe().ordinal() % 2;
        for (Carta c : s) {
          // naipe e valor estao de acordo com os valores actuais requeridos
          if (!c.isVoltadaParaCima()) {
            return false;
          }
          if (c.valor().ordinal() == valInicial && c.naipe().ordinal() % 2 == naipeInicial) {
            // actualizar a cor do naipe requerida na seguinte carta
            // decrementar o valor da carta seguinte visto que é em
            // ordem decrescente, K até AS
            valInicial = valInicial - 1;
            naipeInicial = (naipeInicial + 1) % 2;
          } else {
            return false;
          }
        }
        // cartas estão na ordem correcta.
        return true;
      }

      return false;
    } catch (Exception e) {
      throw new GameException(GameException.GAME_EXCEPTION_CANT_PUT_CARD_IN_ZONEC);
    }
  }