@Override
  public IEstados moveExercito(Regiao regiao, ArrayList<Exercito> exercitos) {
    // Executa acção da carta
    ArrayList<Object> params = new ArrayList<>();
    params.add(regiao);
    params.add(exercitos);

    Carta carta = getJogo().getJogadorActivo().getCartaActiva();
    Accao accao = carta.getAccaoActiva();
    if (accao == null) return this;

    accao.executa(getJogo(), params);

    // Próximo estado
    if (!accao.isUsada()) return this;
    else {
      if (getJogo().getEstadoAnterior().getClass() == AguardaEscolheAccao.class) {
        // Verifica o tipo de carta ("E/OU")
        if (carta.isExecutaTodasAccoes()) {
          if (carta.isTodasAccoesUsadas()) {
            getJogo().passaVez();
            return new AguardaEscolheCarta(getJogo());
          } else return new AguardaEscolheAccao(getJogo());
        } else {
          getJogo().passaVez();
          return new AguardaEscolheCarta(getJogo());
        }
      } else {
        getJogo().passaVez();
        return new AguardaEscolheCarta(getJogo());
      }
    }
  }
  @Override
  public IEstados escolheCartas(int idx) {
    if (getJogo().validaNumCartasFinal()) {
      return new AguardaJokers(getJogo());
    } else {
      Carta cartaAux;

      // Verificar número de moedas
      if (getJogo().getCustoPorIdx(idx) <= getJogo().getJogadorActivo().getMoedas()) {
        // Compra da carta
        getJogo().compraCarta(idx);

        cartaAux = getJogo().getJogadorActivo().getCartaActiva();

        if (cartaAux.getAccoes().get(1) == null) {
          getJogo().getJogadorActivo().getCartaActiva().setAccaoActiva(cartaAux.getAccoes().get(0));

          if (cartaAux.getAccoes().get(0).getClass() == AccaoMoveExercito.class)
            return new AguardaMoveExercito(getJogo());
          else if (cartaAux.getAccoes().get(0).getClass() == AccaoMoveExercitoAgua.class)
            return new AguardaMoveExercitoAgua(getJogo());
          else if (cartaAux.getAccoes().get(0).getClass() == AccaoDestroiExercito.class)
            return new AguardaDestroiExercito(getJogo());
          else if (cartaAux.getAccoes().get(0).getClass() == AccaoColocaExercito.class)
            return new AguardaColocaExercito(getJogo());
          else if (cartaAux.getAccoes().get(0).getClass() == AccaoColocaCidade.class)
            return new AguardaColocaCidade(getJogo());
          else return new AguardaEscolheAccao(getJogo());
        } else return new AguardaEscolheAccao(getJogo());
      } else {
        if (Jogo.debugMode) System.out.println("DEBUG: Sem moedas");
        return this;
      }
    }
  }