private List<Posicao> posicoesPossiveisTorre(Posicao posicao) {

        List<Posicao> posicoesPossiveis = new ArrayList<>();
        int[] posicoesVariantes = new int[2];
        int colunaAtual, linhaAtual;

        /*
         * a cada etapa de iteracao serao verificadas uma horizontal e uma
         * vertical. o sentido da verificacao depende do sinhal do numero, a
         * saber: 1- direita e cima 2- esquerda e baixo
         */
        posicoesVariantes[0] = 1;
        posicoesVariantes[1] = -1;

        /* inicializa a posicao original */
        colunaAtual = posicao.getColuna();
        linhaAtual = posicao.getLinha();

        for (int posicaoVariante = 0; posicaoVariante <= 1; posicaoVariante++) {
            /* movimento horizontal */
            colunaAtual += posicoesVariantes[posicaoVariante];
            /*
             * verifica se a posicao esta dentro do tabuleiro. nao eh necessario
             * verificar a linha, pois a mesma nao eh alterada
             */
            while (colunaAtual >= 0 && colunaAtual <= 7) {
                Peca peca = this.getCasas(colunaAtual, linhaAtual);
                /* verifica se tem alguma coisa na posicao */
                if (peca != null) {
                    /*
                     * se tiver e a cor for branca, pode capturar alem disso,
                     * nao eh necessario continuar verificando a reta apos
                     * encontrar o primeiro obstaculo
                     */
                    if (!peca.getCor().equals(this.getCasas(posicao).getCor())) {
                        posicoesPossiveis.add(new Posicao(colunaAtual,
                                linhaAtual));
                    }
                    break;
                } else {
                    /* pode se mover para a posicao */
                    posicoesPossiveis.add(new Posicao(colunaAtual, linhaAtual));
                    colunaAtual += posicoesVariantes[posicaoVariante];
                }

            }

            /* movimento vertical */
            /* reseta a coluna */
            colunaAtual = posicao.getColuna();
            linhaAtual += posicoesVariantes[posicaoVariante];
            /*
             * verifica se a posicao esta dentro do tabuleiro. nao eh necessario
             * verificar a coluna, pois a mesma nao eh alterada
             */
            while (linhaAtual >= 0 && linhaAtual <= 7) {
                Peca peca = this.getCasas(colunaAtual, linhaAtual);
                /* verifica se tem alguma coisa na posicao */
                if (peca != null) {
                    /*
                     * se tiver e a cor for branca, pode capturar alem disso,
                     * nao eh necessario continuar verificando a reta apos
                     * encontrar o primeiro obstaculo
                     */
                    if (!peca.getCor().equals(this.getCasas(posicao).getCor())) {
                        posicoesPossiveis.add(new Posicao(colunaAtual,
                                linhaAtual));
                    }
                    break;
                } else {
                    /* pode se mover para a posicao */
                    posicoesPossiveis.add(new Posicao(colunaAtual, linhaAtual));
                    linhaAtual += posicoesVariantes[posicaoVariante];
                }
            }
            /* reseta a linha */
            linhaAtual = posicao.getLinha();

        }

        return posicoesPossiveis;
    }