Exemple #1
0
        public override bool[,] MovimentosPossiveis()
        {
            bool[,] tempMatriz = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas];

            Posicao tempPosicao = new Posicao(0, 0);

            // acima
            tempPosicao.AlterarPosicao(Posicao.Linha - 1, Posicao.Coluna);
            while (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
                if (Tabuleiro.Peca(tempPosicao) != null && Tabuleiro.Peca(tempPosicao).Cor != Cor)
                {
                    break;
                }
                tempPosicao.Linha -= 1;
            }

            // abaixo
            tempPosicao.AlterarPosicao(Posicao.Linha + 1, Posicao.Coluna);
            while (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
                if (Tabuleiro.Peca(tempPosicao) != null && Tabuleiro.Peca(tempPosicao).Cor != Cor)
                {
                    break;
                }
                tempPosicao.Linha += 1;
            }

            // direita
            tempPosicao.AlterarPosicao(Posicao.Linha, Posicao.Coluna + 1);
            while (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
                if (Tabuleiro.Peca(tempPosicao) != null && Tabuleiro.Peca(tempPosicao).Cor != Cor)
                {
                    break;
                }
                tempPosicao.Coluna += 1;
            }

            // esquerda
            tempPosicao.AlterarPosicao(Posicao.Linha, Posicao.Coluna - 1);
            while (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
                if (Tabuleiro.Peca(tempPosicao) != null && Tabuleiro.Peca(tempPosicao).Cor != Cor)
                {
                    break;
                }
                tempPosicao.Coluna -= 1;
            }

            return(tempMatriz);
        }
Exemple #2
0
        public override bool[,] MovimentosPossiveis()
        {
            bool[,] tempMatriz = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas];

            Posicao tempPosicao = new Posicao(0, 0);

            tempPosicao.AlterarPosicao(Posicao.Linha - 1, Posicao.Coluna - 2);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            tempPosicao.AlterarPosicao(Posicao.Linha - 2, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            tempPosicao.AlterarPosicao(Posicao.Linha - 2, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            tempPosicao.AlterarPosicao(Posicao.Linha - 1, Posicao.Coluna + 2);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            tempPosicao.AlterarPosicao(Posicao.Linha + 1, Posicao.Coluna + 2);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            tempPosicao.AlterarPosicao(Posicao.Linha + 2, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            tempPosicao.AlterarPosicao(Posicao.Linha + 2, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            tempPosicao.AlterarPosicao(Posicao.Linha + 1, Posicao.Coluna - 2);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            return(tempMatriz);
        }
Exemple #3
0
        public override bool[,] MovimentosPossiveis()
        {
            bool[,] tempMatriz = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas];

            Posicao tempPosicao = new Posicao(0, 0);

            // acima
            tempPosicao.AlterarPosicao(Posicao.Linha - 1, Posicao.Coluna);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            // ne
            tempPosicao.AlterarPosicao(Posicao.Linha - 1, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            // direita
            tempPosicao.AlterarPosicao(Posicao.Linha, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            // se
            tempPosicao.AlterarPosicao(Posicao.Linha + 1, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            // abaixo
            tempPosicao.AlterarPosicao(Posicao.Linha + 1, Posicao.Coluna);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            // so
            tempPosicao.AlterarPosicao(Posicao.Linha + 1, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            // esquerda
            tempPosicao.AlterarPosicao(Posicao.Linha, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoValida(tempPosicao) && VerificarMovimento(tempPosicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            // no
            tempPosicao.AlterarPosicao(Posicao.Linha - 1, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoValida(Posicao) && VerificarMovimento(Posicao))
            {
                tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
            }

            // roque
            if (Movimentos == 0 && !Partida.Xeque)
            {
                // roque pequeno
                Posicao pt1 = new Posicao(Posicao.Linha, Posicao.Coluna + 3);
                if (TestarTorreRoque(pt1))
                {
                    Posicao p1 = new Posicao(Posicao.Linha, Posicao.Coluna + 1);
                    Posicao p2 = new Posicao(Posicao.Linha, Posicao.Coluna + 2);
                    if (Tabuleiro.Peca(p1) == null && Tabuleiro.Peca(p2) == null)
                    {
                        tempMatriz[Posicao.Linha, Posicao.Coluna + 2] = true;
                    }
                }

                // roque grande
                Posicao pt2 = new Posicao(Posicao.Linha, Posicao.Coluna - 4);
                if (TestarTorreRoque(pt2))
                {
                    Posicao p1 = new Posicao(Posicao.Linha, Posicao.Coluna - 1);
                    Posicao p2 = new Posicao(Posicao.Linha, Posicao.Coluna - 2);
                    Posicao p3 = new Posicao(Posicao.Linha, Posicao.Coluna - 3);
                    if (Tabuleiro.Peca(p1) == null && Tabuleiro.Peca(p2) == null && Tabuleiro.Peca(p3) == null)
                    {
                        tempMatriz[Posicao.Linha, Posicao.Coluna - 2] = true;
                    }
                }
            }

            return(tempMatriz);
        }
Exemple #4
0
        public override bool[,] MovimentosPossiveis()
        {
            bool[,] tempMatriz = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas];

            Posicao tempPosicao = new Posicao(0, 0);

            if (Cor == Cor.Branca)
            {
                tempPosicao.AlterarPosicao(Posicao.Linha - 1, Posicao.Coluna);
                if (Tabuleiro.PosicaoValida(tempPosicao) && VerificaEspacoVazio(tempPosicao))
                {
                    tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
                }

                tempPosicao.AlterarPosicao(Posicao.Linha - 2, Posicao.Coluna);
                if (Tabuleiro.PosicaoValida(tempPosicao) && VerificaEspacoVazio(tempPosicao) && Movimentos == 0)
                {
                    tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
                }

                tempPosicao.AlterarPosicao(Posicao.Linha - 1, Posicao.Coluna - 1);
                if (Tabuleiro.PosicaoValida(tempPosicao) && VerificaInimigo(tempPosicao))
                {
                    tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
                }

                tempPosicao.AlterarPosicao(Posicao.Linha - 1, Posicao.Coluna + 1);
                if (Tabuleiro.PosicaoValida(tempPosicao) && VerificaInimigo(tempPosicao))
                {
                    tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
                }

                // en passant
                if (Posicao.Linha == 3)
                {
                    Posicao esquerda = new Posicao(Posicao.Linha, Posicao.Coluna - 1);
                    if (Tabuleiro.PosicaoValida(esquerda) && VerificaInimigo(esquerda) && Tabuleiro.Peca(esquerda) == Partida.PecaEnPassant)
                    {
                        tempMatriz[esquerda.Linha - 1, esquerda.Coluna] = true;
                    }

                    Posicao direita = new Posicao(Posicao.Linha, Posicao.Coluna + 1);
                    if (Tabuleiro.PosicaoValida(direita) && VerificaInimigo(direita) && Tabuleiro.Peca(direita) == Partida.PecaEnPassant)
                    {
                        tempMatriz[direita.Linha - 1, direita.Coluna] = true;
                    }
                }
            }
            else
            {
                tempPosicao.AlterarPosicao(Posicao.Linha + 1, Posicao.Coluna);
                if (Tabuleiro.PosicaoValida(tempPosicao) && VerificaEspacoVazio(tempPosicao))
                {
                    tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
                }

                tempPosicao.AlterarPosicao(Posicao.Linha + 2, Posicao.Coluna);
                if (Tabuleiro.PosicaoValida(tempPosicao) && VerificaEspacoVazio(tempPosicao) && Movimentos == 0)
                {
                    tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
                }

                tempPosicao.AlterarPosicao(Posicao.Linha + 1, Posicao.Coluna - 1);
                if (Tabuleiro.PosicaoValida(tempPosicao) && VerificaInimigo(tempPosicao))
                {
                    tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
                }

                tempPosicao.AlterarPosicao(Posicao.Linha + 1, Posicao.Coluna + 1);
                if (Tabuleiro.PosicaoValida(tempPosicao) && VerificaInimigo(tempPosicao))
                {
                    tempMatriz[tempPosicao.Linha, tempPosicao.Coluna] = true;
                }

                // en passant
                if (Posicao.Linha == 4)
                {
                    Posicao esquerda = new Posicao(Posicao.Linha, Posicao.Coluna - 1);
                    if (Tabuleiro.PosicaoValida(esquerda) && VerificaInimigo(esquerda) && Tabuleiro.Peca(esquerda) == Partida.PecaEnPassant)
                    {
                        tempMatriz[esquerda.Linha + 1, esquerda.Coluna] = true;
                    }

                    Posicao direita = new Posicao(Posicao.Linha, Posicao.Coluna + 1);
                    if (Tabuleiro.PosicaoValida(direita) && VerificaInimigo(direita) && Tabuleiro.Peca(direita) == Partida.PecaEnPassant)
                    {
                        tempMatriz[direita.Linha + 1, direita.Coluna] = true;
                    }
                }
            }

            return(tempMatriz);
        }