private void movimentarPeca(Jogada jogada) throws PecaAlheiaException, MovimentoInvalidoException, CaminhoBloqueadoException, CasaVaziaException {

        Posicao posicaoInicial = jogada.getPosicaoInicial();
        Posicao posicaoFinal = jogada.getPosicaoFinal();

        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.mover(posicaoFinal)) {
                /*verifica se a peca possui caminho desobstruido para fazer o movimento*/
                if (jogo.getTabuleiro().verificaCaminhoMovimento(posicaoInicial, posicaoFinal)) {
                    /*se a peca movida for um rei, atualiza sua posicao*/
                    if (peca.getNome().equals(NomePecas.Rei)) {
                        if (peca.getCor().equals(Cores.branco)) {
                            jogo.getTabuleiro().setPosicaoReiBranco(posicaoFinal);
                        } else {
                            jogo.getTabuleiro().setPosicaoReiPreto(posicaoFinal);
                        }
                        peca.actMovimentou();
                    }
                    jogo.getTabuleiro().moverPeca(posicaoInicial.getColuna(), posicaoInicial.getLinha(), posicaoFinal.getColuna(), posicaoFinal.getLinha());
                    GUIControl.getInstanceOf().mensagemMoverPeca(posicaoInicial, posicaoFinal, jogo.getVez());
                    ultimaJogada = peca;
                } else {
                    throw new CaminhoBloqueadoException();
                }
            } else {
                throw new MovimentoInvalidoException();
            }
        }
    }