@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; } } }