private void capturarPeca(Posicao posicaoInicial, Posicao posicaoFinal) throws CasaVaziaException, PecaAlheiaException, CaminhoBloqueadoException, MovimentoInvalidoException, CapturaInvalidaPecaInexistenteException, CapturaInvalidaPecaPropriaException {

        PecaAbstrata peca = (PecaAbstrata) jogo.getTabuleiro().getCasas(posicaoInicial.getColuna(), posicaoInicial.getLinha());
        if (peca == null) {
            throw new CasaVaziaException();
        }

        if (!peca.getCor().equals(jogo.getVez().getCor())) {
            throw new PecaAlheiaException();
        } else {
            /*verifica se a peca eh capaz de fazer o movimento*/
            if (peca.capturar(posicaoFinal)) {
                /*verifica se a peca possui caminho desobstruido para fazer o movimento*/
                if (jogo.getTabuleiro().verificaCaminhoCaptura(posicaoInicial, posicaoFinal, jogo)) {
                    if (peca.getNome().equals(NomePecas.Rei)) {
                        if (peca.getCor().equals(Cores.branco)) {
                            jogo.getTabuleiro().setPosicaoReiBranco(posicaoFinal);
                        } else {
                            jogo.getTabuleiro().setPosicaoReiPreto(posicaoFinal);
                        }
                        peca.actMovimentou();
                    }
                    PecaAbstrata pecaCapturada = (PecaAbstrata) jogo.getTabuleiro().capturarPeca(posicaoInicial, posicaoFinal);
                    ultimaJogada = peca;
                    /*retira a peca capturada das pecas que o jogador possui*/
                    if (jogo.getVez().equals(jogo.getBranco())) {
                        jogo.getTabuleiro().getPecasPretas().remove(pecaCapturada);
                    } else {
                        jogo.getTabuleiro().getPecasBrancas().remove(pecaCapturada);
                    }
                    /*adiciona a peca captura na lista de pecas capturadas do jogador da vez*/
                    jogo.getVez().getPecasCapturadas().add(pecaCapturada);
                    if (jogo.getQuantidadePecasCapturadas() == 0) {
                        controladorTela.exibirMensagem("FIRST BLOOD!");
                    }
                    controladorTela.exibirMensagem(jogo.getVez().getNome() + " capturou " + pecaCapturada.getNome() + "! Mais " + pecaCapturada.getValor() + " pontos para voce!");
                    jogo.setQuantidadePecasCapturadas(jogo.getQuantidadePecasCapturadas() + 1);
                } else {
                    throw new CaminhoBloqueadoException();
                }
            } else {
                throw new MovimentoInvalidoException();
            }
        }
    }