Beispiel #1
0
        public override bool[,] movimentosPossiveis()
        {
            bool[,] mat = new bool[tab.linhas, tab.colunas];
            Posicao posicao = new Posicao(0, 0);

            //n
            posicao.mudarValores(pos.linha - 1, pos.coluna);
            while (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
                if (tab.existePeca(posicao))
                {
                    break;
                }
                posicao.linha--;
            }

            //o
            posicao.mudarValores(pos.linha, pos.coluna + 1);
            while (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
                if (tab.existePeca(posicao))
                {
                    break;
                }
                posicao.coluna++;
            }


            //s
            posicao.mudarValores(pos.linha + 1, pos.coluna);
            while (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
                if (tab.existePeca(posicao))
                {
                    break;
                }
                posicao.linha++;
            }


            //l
            posicao.mudarValores(pos.linha, pos.coluna - 1);
            while (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
                if (tab.existePeca(posicao))
                {
                    break;
                }
                posicao.coluna--;
            }

            return(mat);
        }
        public override bool[,] movimentosPossiveis()
        {
            bool[,] mat = new bool[tab.linhas, tab.colunas];
            Posicao posicao = new Posicao(0, 0);

            //cima
            posicao.mudarValores(pos.linha - 2, pos.coluna - 1);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            posicao.mudarValores(pos.linha - 2, pos.coluna + 1);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            //direita
            posicao.mudarValores(pos.linha - 1, pos.coluna + 2);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            //baixo
            posicao.mudarValores(pos.linha + 2, pos.coluna - 1);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            posicao.mudarValores(pos.linha + 2, pos.coluna + 1);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            //esquerda
            posicao.mudarValores(pos.linha - 1, pos.coluna - 2);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            posicao.mudarValores(pos.linha + 1, pos.coluna - 2);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            return(mat);
        }
Beispiel #3
0
        public override bool[,] movimentosPossiveis()
        {
            bool[,] mat = new bool[tab.linhas, tab.colunas];
            Posicao posicao = new Posicao(0, 0);

            //brancos
            if (cor == Cor.Branca)
            {
                posicao.mudarValores(pos.linha - 1, pos.coluna);
                if (tab.posicaoValida(posicao) && livre(posicao))
                {
                    mat[posicao.linha, posicao.coluna] = true;
                }

                posicao.mudarValores(pos.linha - 2, pos.coluna);
                if (tab.posicaoValida(posicao) && livre(posicao) && qteMovimentos == 0)
                {
                    mat[posicao.linha, posicao.coluna] = true;
                }

                posicao.mudarValores(pos.linha - 1, pos.coluna - 1);
                if (tab.posicaoValida(posicao) && existeInimigo(posicao))
                {
                    mat[posicao.linha, posicao.coluna] = true;
                }

                posicao.mudarValores(pos.linha - 1, pos.coluna + 1);
                if (tab.posicaoValida(posicao) && existeInimigo(posicao))
                {
                    mat[posicao.linha, posicao.coluna] = true;
                }

                //#jogada especial enpassant
                if (pos.linha == 3)
                {
                    Posicao esquerda = new Posicao(pos.linha, pos.coluna - 1);
                    if (tab.posicaoValida(esquerda) && existeInimigo(esquerda) && tab.peca(esquerda) == partida.vulneravelEnPassant)
                    {
                        mat[esquerda.linha - 1, esquerda.coluna] = true;
                    }
                    Posicao direita = new Posicao(pos.linha, pos.coluna + 1);
                    if (tab.posicaoValida(direita) && existeInimigo(direita) && tab.peca(direita) == partida.vulneravelEnPassant)
                    {
                        mat[direita.linha - 1, direita.coluna] = true;
                    }
                }
            }
            else
            {
                //pretos
                posicao.mudarValores(pos.linha + 1, pos.coluna);
                if (tab.posicaoValida(posicao) && livre(posicao))
                {
                    mat[posicao.linha, posicao.coluna] = true;
                }

                posicao.mudarValores(pos.linha + 2, pos.coluna);
                if (tab.posicaoValida(posicao) && livre(posicao) && qteMovimentos == 0)
                {
                    mat[posicao.linha, posicao.coluna] = true;
                }

                posicao.mudarValores(pos.linha + 1, pos.coluna - 1);
                if (tab.posicaoValida(posicao) && existeInimigo(posicao))
                {
                    mat[posicao.linha, posicao.coluna] = true;
                }

                posicao.mudarValores(pos.linha + 1, pos.coluna + 1);
                if (tab.posicaoValida(posicao) && existeInimigo(posicao))
                {
                    mat[posicao.linha, posicao.coluna] = true;
                }

                //#jogada especial enpassant
                if (pos.linha == 4)
                {
                    Posicao esquerda = new Posicao(pos.linha, pos.coluna - 1);
                    if (tab.posicaoValida(esquerda) && existeInimigo(esquerda) && tab.peca(esquerda) == partida.vulneravelEnPassant)
                    {
                        mat[esquerda.linha + 1, esquerda.coluna] = true;
                    }
                    Posicao direita = new Posicao(pos.linha, pos.coluna + 1);
                    if (tab.posicaoValida(direita) && existeInimigo(direita) && tab.peca(direita) == partida.vulneravelEnPassant)
                    {
                        mat[direita.linha + 1, direita.coluna] = true;
                    }
                }
            }

            return(mat);
        }
Beispiel #4
0
        public override bool[,] movimentosPossiveis()
        {
            bool[,] mat = new bool[tab.linhas, tab.colunas];
            Posicao posicao = new Posicao(0, 0);

            //n
            posicao.mudarValores(pos.linha - 1, pos.coluna);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            //ne
            posicao.mudarValores(pos.linha - 1, pos.coluna + 1);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            //o
            posicao.mudarValores(pos.linha, pos.coluna + 1);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            //se
            posicao.mudarValores(pos.linha + 1, pos.coluna + 1);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            //s
            posicao.mudarValores(pos.linha + 1, pos.coluna);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            //so
            posicao.mudarValores(pos.linha + 1, pos.coluna - 1);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            //l
            posicao.mudarValores(pos.linha, pos.coluna - 1);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            //no
            posicao.mudarValores(pos.linha - 1, pos.coluna - 1);
            if (tab.posicaoValida(posicao) && podeMover(posicao))
            {
                mat[posicao.linha, posicao.coluna] = true;
            }

            //#jogadaespecial roque
            if (qteMovimentos == 0 && !partida.xeque)
            {
                //#jogadaespecial roque pequeno
                Posicao[] posicoesDireita = new Posicao[3];
                for (int i = 0; i < 3; i++)
                {
                    posicoesDireita[i] = new Posicao(pos.linha, pos.coluna + 1 + i);
                }
                if (testeTorreParaRoque(posicoesDireita[2])) //torre
                {
                    if (tab.peca(posicoesDireita[0]) == null && tab.peca(posicoesDireita[1]) == null)
                    {
                        mat[posicoesDireita[1].linha, posicoesDireita[1].coluna] = true;
                    }
                }

                //#jogadaespecial roque grande
                Posicao[] posicoesEsquerda = new Posicao[4];
                for (int i = 0; i < 4; i++)
                {
                    posicoesEsquerda[i] = new Posicao(pos.linha, pos.coluna - 1 - i);
                }
                if (testeTorreParaRoque(posicoesEsquerda[3])) //torre
                {
                    if (tab.peca(posicoesEsquerda[0]) == null && tab.peca(posicoesEsquerda[1]) == null && tab.peca(posicoesEsquerda[2]) == null)
                    {
                        mat[posicoesEsquerda[1].linha, posicoesEsquerda[1].coluna] = true;
                    }
                }
            }

            return(mat);
        }