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

            Posicao p = new Posicao(Posicao.Linha, Posicao.Coluna);

            //ACIMA
            p.SetPosicao(p.Linha - 1, p.Coluna);
            while (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
                if (Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor != this.Cor)
                {
                    break;
                }
                p.Linha -= 1;
            }

            //ABAIXO
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(p.Linha + 1, p.Coluna);
            while (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
                if (Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor != this.Cor)
                {
                    break;
                }
                p.Linha += 1;
            }

            //DIREITA
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(p.Linha, p.Coluna + 1);
            while (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
                if (Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor != this.Cor)
                {
                    break;
                }
                p.Coluna += 1;
            }

            //ESQUERDA
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(p.Linha, p.Coluna - 1);
            while (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
                if (Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor != this.Cor)
                {
                    break;
                }
                p.Coluna -= 1;
            }


            return(movimentos);
        }
Example #2
0
        public override bool[,] MovimentosPossiveis()
        {
            bool[,] movimentos = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas];
            Posicao inicial = Posicao;
            Posicao p       = new Posicao(Posicao.Linha, Posicao.Coluna);

            //N
            p.SetPosicao(p.Linha - 1, p.Coluna);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            ////NE
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(p.Linha - 1, p.Coluna + 1);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            //L
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(p.Linha, p.Coluna + 1);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            //SE
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(p.Linha + 1, p.Coluna + 1);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            //S
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(p.Linha + 1, p.Coluna);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            //SO
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(p.Linha + 1, p.Coluna - 1);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            //O
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(p.Linha, p.Coluna - 1);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            //NO
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(p.Linha - 1, p.Coluna - 1);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            //ROQUE PEQUENO
            if (QtdeMovimentos == 0 && !partida.JogadorEmXeque)
            {
                Posicao T1 = new Posicao(this.Posicao.Linha, this.Posicao.Coluna + 3);
                if (Tabuleiro.PosicaoValida(T1) && TorreElegivelRoque(T1))
                {
                    Posicao P1 = new Posicao(Posicao.Linha, Posicao.Coluna + 1);
                    Posicao P2 = new Posicao(Posicao.Linha, Posicao.Coluna + 2);

                    if (Tabuleiro.PosicaoValida(P1) && Tabuleiro.PosicaoValida(P2))
                    {
                        if (Tabuleiro.Peca(P1) == null && Tabuleiro.Peca(P2) == null)
                        {
                            movimentos[Posicao.Linha, Posicao.Coluna + 2] = true;
                        }
                    }
                }
            }

            ////ROQUE GRANDE
            if (QtdeMovimentos == 0 && !partida.JogadorEmXeque)
            {
                Posicao T2 = new Posicao(Posicao.Linha, Posicao.Coluna - 4);
                if (Tabuleiro.PosicaoValida(T2) && TorreElegivelRoque(T2))
                {
                    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.PosicaoValida(P1) && Tabuleiro.PosicaoValida(P2) && Tabuleiro.PosicaoValida(P3))
                    {
                        if (Tabuleiro.Peca(P1) == null && Tabuleiro.Peca(P2) == null && Tabuleiro.Peca(P3) == null)
                        {
                            movimentos[Posicao.Linha, Posicao.Coluna - 2] = true;
                        }
                    }
                }
            }

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

            Posicao p = new Posicao(Posicao.Linha, Posicao.Coluna);

            //ACIMA-DIREITA
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(Posicao.Linha - 2, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            //ACIMA-ESQUERDA
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(Posicao.Linha - 2, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            //ABAIXO-DIREITA
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(Posicao.Linha + 2, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            //ABAIXO-ESQUERDA
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(Posicao.Linha + 2, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            //DIREITA-ACIMA
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(Posicao.Linha - 1, Posicao.Coluna - 2);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            //DIREITA-ABAIXO
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(Posicao.Linha + 1, Posicao.Coluna - 2);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            //ESQUERDA-ACIMA
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(Posicao.Linha - 1, Posicao.Coluna + 2);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

            //ESQUERDA-ABAIXO
            p.SetPosicao(Posicao.Linha, Posicao.Coluna);
            p.SetPosicao(Posicao.Linha + 1, Posicao.Coluna + 2);
            if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
            {
                movimentos[p.Linha, p.Coluna] = true;
            }

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

            Posicao p = new Posicao(Posicao.Linha, Posicao.Coluna);

            //ACIMA(PEÇAS BRANCAS)
            if (Cor == Cor.Branco)
            {
                p.SetPosicao(Posicao.Linha, Posicao.Coluna);
                p.SetPosicao(p.Linha - 1, p.Coluna);
                if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
                {
                    movimentos[p.Linha, p.Coluna] = true;

                    p.SetPosicao(p.Linha - 1, p.Coluna);
                    if (Tabuleiro.PosicaoValida(p) && PodeMover(p) && QtdeMovimentos == 0)
                    {
                        movimentos[p.Linha, p.Coluna] = true;
                    }
                }

                p.SetPosicao(Posicao.Linha, Posicao.Coluna);
                p.SetPosicao(p.Linha - 1, p.Coluna - 1);
                if (Tabuleiro.PosicaoValida(p) && Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor == Cor.Preto && PodeMover(p))
                {
                    movimentos[p.Linha, p.Coluna] = true;
                }

                p.SetPosicao(Posicao.Linha, Posicao.Coluna);
                p.SetPosicao(p.Linha - 1, p.Coluna + 1);
                if (Tabuleiro.PosicaoValida(p) && Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor == Cor.Preto && PodeMover(p))
                {
                    movimentos[p.Linha, p.Coluna] = true;
                }

                //En Passant Branca

                p.SetPosicao(Posicao.Linha, Posicao.Coluna);
                if (p.Linha == 3)
                {
                    Posicao esquerda = new Posicao(p.Linha, p.Coluna - 1);
                    if (Tabuleiro.PosicaoValida(esquerda) && Tabuleiro.ExistePeca(esquerda) && Tabuleiro.Peca(esquerda).Cor == Cor.Preto &&
                        Tabuleiro.Peca(esquerda) == partida.EnPassant)
                    {
                        movimentos[esquerda.Linha - 1, esquerda.Coluna] = true;
                    }

                    Posicao direita = new Posicao(p.Linha, p.Coluna + 1);
                    if (Tabuleiro.PosicaoValida(direita) && Tabuleiro.ExistePeca(direita) && Tabuleiro.Peca(direita).Cor == Cor.Preto &&
                        Tabuleiro.Peca(direita) == partida.EnPassant)
                    {
                        movimentos[direita.Linha - 1, direita.Coluna] = true;
                    }
                }
            }

            //ABAIXO(PEÇAS PRETAS)
            else if (Cor == Cor.Preto)
            {
                p.SetPosicao(Posicao.Linha, Posicao.Coluna);
                p.SetPosicao(p.Linha + 1, p.Coluna);
                if (Tabuleiro.PosicaoValida(p) && PodeMover(p))
                {
                    movimentos[p.Linha, p.Coluna] = true;

                    p.SetPosicao(p.Linha + 1, p.Coluna);
                    if (Tabuleiro.PosicaoValida(p) && PodeMover(p) && QtdeMovimentos == 0)
                    {
                        movimentos[p.Linha, p.Coluna] = true;
                    }
                }

                p.SetPosicao(Posicao.Linha, Posicao.Coluna);
                p.SetPosicao(p.Linha + 1, p.Coluna - 1);
                if (Tabuleiro.PosicaoValida(p) && Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor == Cor.Branco && PodeMover(p))
                {
                    movimentos[p.Linha, p.Coluna] = true;
                }

                p.SetPosicao(Posicao.Linha, Posicao.Coluna);
                p.SetPosicao(p.Linha + 1, p.Coluna + 1);
                if (Tabuleiro.PosicaoValida(p) && Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor == Cor.Branco && PodeMover(p))
                {
                    movimentos[p.Linha, p.Coluna] = true;
                }

                //En Passant Preta

                p.SetPosicao(Posicao.Linha, Posicao.Coluna);
                if (p.Linha == 4)
                {
                    Posicao esquerda = new Posicao(p.Linha, p.Coluna - 1);
                    if (Tabuleiro.PosicaoValida(esquerda) && Tabuleiro.ExistePeca(esquerda) && Tabuleiro.Peca(esquerda).Cor == Cor.Branco &&
                        Tabuleiro.Peca(esquerda) == partida.EnPassant)
                    {
                        movimentos[esquerda.Linha + 1, esquerda.Coluna] = true;
                    }

                    Posicao direita = new Posicao(p.Linha, p.Coluna + 1);
                    if (Tabuleiro.PosicaoValida(direita) && Tabuleiro.ExistePeca(direita) && Tabuleiro.Peca(direita).Cor == Cor.Branco &&
                        Tabuleiro.Peca(direita) == partida.EnPassant)
                    {
                        movimentos[direita.Linha + 1, direita.Coluna] = true;
                    }
                }
            }
            return(movimentos);
        }