Exemplo n.º 1
0
 public void ValidarPosicaoDeDestino(Posicao origem, Posicao destino)
 {
     if (!Tabuleiro.GetPeca(origem).MovimentoPossivel(destino))
     {
         throw new TabuleiroException("Posição de destino inválida!");
     }
 }
Exemplo n.º 2
0
        public static void drawTabuleiro(Tabuleiro tabuleiro, SpriteBatch sp,
                                         Texture2D textura, SpriteFont fonte)
        {
            Peca fakePeca = new Peca(corPeca.Branca);

            if (tabuleiro != null)
            {
                for (int lin = 0; lin < tabuleiro.Altura; lin++)
                {
                    for (int col = 0; col < tabuleiro.Largura; col++)
                    {
                        Peca peca = tabuleiro.GetPeca(lin, col);
                        if (peca != null)
                        {
                            DrawObjeto.drawPeca(peca, sp, textura);
                        }
                        else
                        {
                            fakePeca.Linha  = lin;
                            fakePeca.Coluna = col;
                            DrawObjeto.drawPeca(fakePeca, sp, textura);
                        }
                    }
                }
                String texto = "   0  |  1   |  2   |  3  |  4  |  5  |  6   |  7  |";
                sp.DrawString(fonte, texto, new Vector2(0, 8 * Peca.Tamanho), Color.Yellow);
            }
        }
Exemplo n.º 3
0
        public static void ImprimirTabuleiro(Tabuleiro tab, bool[,] matriz)
        {
            ConsoleColor originalBg    = Console.BackgroundColor;
            ConsoleColor alternativeBg = ConsoleColor.Cyan;

            for (int i = 0; i < tab.Linhas; i++)
            {
                Console.Write(8 - i + " ");
                for (int j = 0; j < tab.Colunas; j++)
                {
                    if (matriz[i, j])
                    {
                        Console.BackgroundColor = alternativeBg;
                    }
                    else
                    {
                        Console.BackgroundColor = originalBg;
                    }
                    ImprimirPeca(tab.GetPeca(i, j));
                    Console.BackgroundColor = originalBg;
                }
                Console.WriteLine();
            }
            Console.WriteLine("  A B C D E F G H");
        }
Exemplo n.º 4
0
        public static void imprimirTabuleiro(Tabuleiro tab, bool[,] posicoesPossiveis)
        {
            ConsoleColor fundoOriginal = Console.BackgroundColor;
            ConsoleColor fundoAlterado = ConsoleColor.DarkGray;

            Console.WriteLine();
            for (int i = 0; i < tab.Linhas; i++)
            {
                Console.Write(8 - i + " ");

                for (int j = 0; j < tab.Colunas; j++)
                {
                    if (posicoesPossiveis[i, j] == true)
                    {
                        Console.BackgroundColor = fundoAlterado;
                    }
                    else
                    {
                        Console.BackgroundColor = fundoOriginal;
                    }
                    imprimirPeca(tab.GetPeca(i, j));
                    Console.BackgroundColor = fundoOriginal;
                }
                Console.WriteLine();
            }
            Console.WriteLine("  a b c d e f g h");
            Console.BackgroundColor = fundoOriginal;
        }
        public override bool[,] MovimentosPossiveis()
        {
            bool[,] matriz = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas];
            Posicao posicaoAux = new Posicao();

            #region Movimentos para esquerda
            posicaoAux.DefinirValores(Posicao.Linha, Posicao.Coluna - 1);
            while (Tabuleiro.PosicaoValida(posicaoAux) && PodeMover(posicaoAux))
            {
                matriz[posicaoAux.Linha, posicaoAux.Coluna] = true;
                if (Tabuleiro.GetPeca(posicaoAux) != null && Tabuleiro.GetPeca(posicaoAux).Cor != Cor)
                {
                    break;
                }
                posicaoAux.Coluna -= 1;
            }
            #endregion

            #region Movimentos para direita
            posicaoAux.DefinirValores(Posicao.Linha, Posicao.Coluna + 1);
            while (Tabuleiro.PosicaoValida(posicaoAux) && PodeMover(posicaoAux))
            {
                matriz[posicaoAux.Linha, posicaoAux.Coluna] = true;
                if (Tabuleiro.GetPeca(posicaoAux) != null && Tabuleiro.GetPeca(posicaoAux).Cor != Cor)
                {
                    break;
                }
                posicaoAux.Coluna += 1;
            }
            #endregion

            #region Movimentos para cima
            posicaoAux.DefinirValores(Posicao.Linha - 1, Posicao.Coluna);
            while (Tabuleiro.PosicaoValida(posicaoAux) && PodeMover(posicaoAux))
            {
                matriz[posicaoAux.Linha, posicaoAux.Coluna] = true;
                if (Tabuleiro.GetPeca(posicaoAux) != null && Tabuleiro.GetPeca(posicaoAux).Cor != Cor)
                {
                    break;
                }
                posicaoAux.Linha -= 1;
            }
            #endregion

            #region Movimentos para baixo
            posicaoAux.DefinirValores(Posicao.Linha + 1, Posicao.Coluna);
            while (Tabuleiro.PosicaoValida(posicaoAux) && PodeMover(posicaoAux))
            {
                matriz[posicaoAux.Linha, posicaoAux.Coluna] = true;
                if (Tabuleiro.GetPeca(posicaoAux) != null && Tabuleiro.GetPeca(posicaoAux).Cor != Cor)
                {
                    break;
                }
                posicaoAux.Linha += 1;
            }
            #endregion

            return(matriz);
        }
Exemplo n.º 6
0
        public override bool[,] MovimentosPossiveis()
        {
            var movimentosPossiveis = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas];
            var posicao             = new Posicao(0, 0);

            posicao.AlterarPosicao(Posicao.Linha - 1, Posicao.Coluna - 1);
            while (Tabuleiro.PosicaoValida(posicao) && PodeMover(posicao))
            {
                movimentosPossiveis[posicao.Linha, posicao.Coluna] = true;

                if (Tabuleiro.GetPeca(posicao) != null && Tabuleiro.GetPeca(posicao).Cor != Cor)
                {
                    break;
                }

                posicao.AlterarPosicao(posicao.Linha - 1, posicao.Coluna - 1);
            }

            posicao.AlterarPosicao(Posicao.Linha - 1, Posicao.Coluna + 1);
            while (Tabuleiro.PosicaoValida(posicao) && PodeMover(posicao))
            {
                movimentosPossiveis[posicao.Linha, posicao.Coluna] = true;

                if (Tabuleiro.GetPeca(posicao) != null && Tabuleiro.GetPeca(posicao).Cor != Cor)
                {
                    break;
                }

                posicao.AlterarPosicao(posicao.Linha - 1, posicao.Coluna + 1);
            }

            posicao.AlterarPosicao(Posicao.Linha + 1, Posicao.Coluna - 1);
            while (Tabuleiro.PosicaoValida(posicao) && PodeMover(posicao))
            {
                movimentosPossiveis[posicao.Linha, posicao.Coluna] = true;

                if (Tabuleiro.GetPeca(posicao) != null && Tabuleiro.GetPeca(posicao).Cor != Cor)
                {
                    break;
                }

                posicao.AlterarPosicao(posicao.Linha + 1, posicao.Coluna - 1);
            }

            posicao.AlterarPosicao(Posicao.Linha + 1, Posicao.Coluna + 1);
            while (Tabuleiro.PosicaoValida(posicao) && PodeMover(posicao))
            {
                movimentosPossiveis[posicao.Linha, posicao.Coluna] = true;

                if (Tabuleiro.GetPeca(posicao) != null && Tabuleiro.GetPeca(posicao).Cor != Cor)
                {
                    break;
                }

                posicao.AlterarPosicao(posicao.Linha + 1, posicao.Coluna + 1);
            }

            return(movimentosPossiveis);
        }
Exemplo n.º 7
0
        public static void imprimeTabuleiro(Tabuleiro tab)
        {
            for (int i = 0; i < tab.linhas; i++)
            {
                Console.Write(((tab.linhas) - i) + " ");
                for (int j = 0; j < tab.colunas; j++)
                {
                    if (tab.GetPeca(i, j) == null)
                    {   //Imprime o traço caso não existam peças na posição
                        Console.Write("- ");
                    }
                    else
                    {
                        //Imprime a Peça de Acordo Se É Branca ou Preta
                        Peca aux = tab.GetPeca(i, j);
                        if (aux.cor == Cor.Branca)
                        {
                            Console.Write(aux + " ");
                        }
                        else
                        {
                            ConsoleColor auxcolor = Console.ForegroundColor;
                            Console.ForegroundColor = ConsoleColor.Yellow;
                            Console.Write(aux + " ");
                            Console.ForegroundColor = auxcolor;
                        }
                    }
                }


                //Parte para a proxíma linha quando todas as colunas da linha forem percorridas
                Console.WriteLine();
            }


            for (int j = 0; j < tab.colunas; j++)
            {
                if (j == 0)
                {
                    Console.Write(" ");
                }
                Console.Write(" " + (char)('A' + j));
            }
            Console.WriteLine();
        }
Exemplo n.º 8
0
 public static void ImprimirTabuleiro(Tabuleiro tab)
 {
     for (int i = 0; i < tab.Linha; i++)
     {
         for (int j = 0; j < tab.Coluna; j++)
         {
             if (tab.GetPeca(i, j) == null)
             {
                 Console.Write("- ");
             }
             else
             {
                 Console.Write(tab.GetPeca(i, j) + " ");
             }
         }
         Console.WriteLine();
     }
 }
Exemplo n.º 9
0
        public override bool[,] MovimentosPossiveis()
        {
            bool[,] MatrizMovimentosPossiveis = new bool[this.Tabuleiro.Linhas, this.Tabuleiro.Colunas];

            Posicao posicao = new Posicao(0, 0);

            // acima
            posicao.DefinirValores(this.Posicao.Linha - 1, this.Posicao.Coluna);
            while (this.Tabuleiro.PosicaoValida(posicao) && this.PodeMover(posicao))
            {
                MatrizMovimentosPossiveis[posicao.Linha, posicao.Coluna] = true;
                if (Tabuleiro.GetPeca(posicao) != null && Tabuleiro.GetPeca(posicao).Cor != this.Cor)
                {
                    break;
                }
                posicao.MoverPosicaoAcima();
            }

            // abaixo
            posicao.DefinirValores(this.Posicao.Linha + 1, this.Posicao.Coluna);
            while (this.Tabuleiro.PosicaoValida(posicao) && this.PodeMover(posicao))
            {
                MatrizMovimentosPossiveis[posicao.Linha, posicao.Coluna] = true;
                if (Tabuleiro.GetPeca(posicao) != null && Tabuleiro.GetPeca(posicao).Cor != this.Cor)
                {
                    break;
                }
                posicao.MoverPosicaoAbaixo();
            }

            // direita
            posicao.DefinirValores(this.Posicao.Linha, this.Posicao.Coluna + 1);
            while (this.Tabuleiro.PosicaoValida(posicao) && this.PodeMover(posicao))
            {
                MatrizMovimentosPossiveis[posicao.Linha, posicao.Coluna] = true;
                if (Tabuleiro.GetPeca(posicao) != null && Tabuleiro.GetPeca(posicao).Cor != this.Cor)
                {
                    break;
                }
                posicao.MoverPosicaoDireita();
            }

            // esquerda
            posicao.DefinirValores(this.Posicao.Linha, this.Posicao.Coluna - 1);
            while (this.Tabuleiro.PosicaoValida(posicao) && this.PodeMover(posicao))
            {
                MatrizMovimentosPossiveis[posicao.Linha, posicao.Coluna] = true;
                if (Tabuleiro.GetPeca(posicao) != null && Tabuleiro.GetPeca(posicao).Cor != this.Cor)
                {
                    break;
                }
                posicao.MoverPosicaoEsquerda();
            }

            return(MatrizMovimentosPossiveis);
        }
Exemplo n.º 10
0
 public static void ImprimirTabuleiro(Tabuleiro tab)
 {
     for (int i = 0; i < tab.Linhas; i++)
     {
         Console.Write((8 - i) + " ");
         for (int j = 0; j < tab.Colunas; j++)
         {
             if (tab.GetPeca(i, j) == null)
             {
                 Console.Write("-" + " ");
             }
             else
             {
                 ImprimePeca(tab.GetPeca(i, j));
             }
         }
         Console.WriteLine();
     }
     Console.WriteLine("  a b c d e f g h");
 }
Exemplo n.º 11
0
        public override bool[,] MovimentosPossiveis()
        {
            bool[,] matriz = new bool[Tabuleiro.NumLinhas, Tabuleiro.NumColunas];

            Posicao pos = new Posicao(0, 0);

            // NO
            pos.DefinirValores(Posicao.Linha - 1, Posicao.Coluna - 1);
            while (Tabuleiro.PosicaoEValida(pos) && PodeMover(pos))
            {
                matriz[pos.Linha, pos.Coluna] = true;
                if (Tabuleiro.GetPeca(pos) != null && Tabuleiro.GetPeca(pos).Cor != Cor)
                {
                    break;
                }
                pos.DefinirValores(pos.Linha - 1, pos.Coluna - 1);
            }
            // NE
            pos.DefinirValores(Posicao.Linha - 1, Posicao.Coluna + 1);
            while (Tabuleiro.PosicaoEValida(pos) && PodeMover(pos))
            {
                matriz[pos.Linha, pos.Coluna] = true;
                if (Tabuleiro.GetPeca(pos) != null && Tabuleiro.GetPeca(pos).Cor != Cor)
                {
                    break;
                }
                pos.DefinirValores(pos.Linha - 1, pos.Coluna + 1);
            }
            // SE
            pos.DefinirValores(Posicao.Linha + 1, Posicao.Coluna + 1);
            while (Tabuleiro.PosicaoEValida(pos) && PodeMover(pos))
            {
                matriz[pos.Linha, pos.Coluna] = true;
                if (Tabuleiro.GetPeca(pos) != null && Tabuleiro.GetPeca(pos).Cor != Cor)
                {
                    break;
                }
                pos.DefinirValores(pos.Linha + 1, pos.Coluna + 1);
            }
            // SO
            pos.DefinirValores(Posicao.Linha + 1, Posicao.Coluna - 1);
            while (Tabuleiro.PosicaoEValida(pos) && PodeMover(pos))
            {
                matriz[pos.Linha, pos.Coluna] = true;
                if (Tabuleiro.GetPeca(pos) != null && Tabuleiro.GetPeca(pos).Cor != Cor)
                {
                    break;
                }
                pos.DefinirValores(pos.Linha + 1, pos.Coluna - 1);
            }

            return(matriz);
        }
Exemplo n.º 12
0
 public static void ImprimirTabuleiro(Tabuleiro tab)
 {
     for (int i = 0; i < tab.Linhas; i++)
     {
         Console.Write(8 - i + " ");
         for (int j = 0; j < tab.Colunas; j++)
         {
             ImprimirPeca(tab.GetPeca(i, j));
         }
         Console.WriteLine();
     }
     Console.WriteLine("  a b c d e f g h");
 }
Exemplo n.º 13
0
 public void ValidarPosicaoDeOrigem(Posicao pos)
 {
     if (Tabuleiro.GetPeca(pos) == null)
     {
         throw new TabuleiroException("Não existe peça na posição de origem escolhida!");
     }
     if (JogadorAtual != Tabuleiro.GetPeca(pos).Cor)
     {
         throw new TabuleiroException("A peça de origem escolhida não é sua!");
     }
     if (!Tabuleiro.GetPeca(pos).ExisteMovimentosPossiveis())
     {
         throw new TabuleiroException("Não há movimentos possíveis para a peça de origem escolhida!");
     }
 }
Exemplo n.º 14
0
        public static void ImprimirTabuleiro(Tabuleiro tabuleiro, bool[,] posicoesPossiveis)
        {
            Console.WriteLine();

            for (int l = 0; l < tabuleiro.Linhas; l++)
            {
                Console.Write(" " + (8 - l) + " ");

                for (int c = 0; c < tabuleiro.Colunas; c++)
                {
                    ImprimirPeca(tabuleiro.GetPeca(new Posicao(l, c)), posicoesPossiveis[l, c]);
                }
                Console.WriteLine();
            }
            Console.WriteLine("   A B C D E F G H\n");
        }
Exemplo n.º 15
0
        public static void ImprimirTabuleiro(Tabuleiro tabuleiro, bool[,] m = null)
        {
            for (int i = 0; i < tabuleiro.Linhas; i++)
            {
                ImprimirPosicaoXadrez($"{8 - i} ", false);

                for (int j = 0; j < tabuleiro.Colunas; j++)
                {
                    ConsoleColor corDeFundo = (m != null && m[i, j]) ? ConsoleColor.DarkGray : ConsoleColor.Black;
                    ImprimirPeca(tabuleiro.GetPeca(i, j), corDeFundo);
                }

                Console.WriteLine();
            }

            ImprimirPosicaoXadrez("  a b c d e f g h ", true);
        }
Exemplo n.º 16
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(origem, destino);

            if (EstaEmXeque(JogadorAtual))
            {
                DesfazMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Você não pode se colocar em xeque!");
            }

            Peca p = Tabuleiro.GetPeca(destino);

            // Promoção do peão
            if (p is Peao)
            {
                if ((p.Cor == Cor.Branca && destino.Linha == 0) || (p.Cor == Cor.Preta && destino.Linha == 7))
                {
                    p = Tabuleiro.RetirarPeca(destino);
                    pecas.Remove(p);
                    Peca dama = new Dama(Tabuleiro, p.Cor);
                    Tabuleiro.ColocarPeca(dama, destino);
                    pecas.Add(dama);
                }
            }

            Xeque = (EstaEmXeque(Adversaria(JogadorAtual))) ? true : false;

            if (TesteXequeMate(Adversaria(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudaJogador();
            }

            // En passant
            VulneravelEnPassant = (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2)) ? p : null;
        }
Exemplo n.º 17
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(origem, destino);

            if (EstaEmXeque(JogadorAtual))
            {
                DesfazMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Você não pode se colocar em Xeque!");
            }

            Peca peca = Tabuleiro.GetPeca(destino);

            // Jogada especial
            // Promoção
            if (peca is Peao)
            {
                if ((peca.Cor == Cor.Branco && destino.Linha == 0) ||
                    (peca.Cor == Cor.Preto && destino.Linha == 7))
                {
                    peca = Tabuleiro.RetirarPeca(destino);
                    _pecas.Remove(peca);
                    Peca rainha = new Rainha(Tabuleiro, peca.Cor);
                    Tabuleiro.ColocarPeca(rainha, destino);
                }
            }

            Xeque = EstaEmXeque(Adversário(JogadorAtual));

            if (XequeMate(Adversário(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                AlternaJogador();
            }
        }
Exemplo n.º 18
0
        public void RealizarJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(origem, destino);

            if (ReiEstaEmXeque(JogadorAtual))
            {
                DesfazMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Você não pode se colocar em xeque!");
            }

            Peca peca = Tabuleiro.GetPeca(destino);

            if (peca is Peao)
            {
                PromocaoDoPeao(peca, destino);
            }

            Xeque = ReiEstaEmXeque(GetAdversario(JogadorAtual));

            if (TesteXequeMate(GetAdversario(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                PassaTurno();
                MudaJogador();
            }

            if (peca is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                VulneravelEnPassant = peca;
            }
            else
            {
                VulneravelEnPassant = null;
            }
        }
Exemplo n.º 19
0
        public override bool[,] MovimentosPossiveis()
        {
            bool[,] matriz = new bool[Tabuleiro.NumLinhas, Tabuleiro.NumColunas];

            Posicao pos = new Posicao(0, 0);

            if (Cor == Cor.Branca)
            {
                pos.DefinirValores(Posicao.Linha - 1, Posicao.Coluna);
                if (Tabuleiro.PosicaoEValida(pos) && livre(pos))
                {
                    matriz[pos.Linha, pos.Coluna] = true;
                }
                pos.DefinirValores(Posicao.Linha - 2, Posicao.Coluna);
                if (Tabuleiro.PosicaoEValida(pos) && livre(pos) && QtdeMovimentos == 0 && !existeInimigo(new Posicao(Posicao.Linha - 1, Posicao.Coluna)))
                {
                    matriz[pos.Linha, pos.Coluna] = true;
                }
                pos.DefinirValores(Posicao.Linha - 1, Posicao.Coluna - 1);
                if (Tabuleiro.PosicaoEValida(pos) && existeInimigo(pos))
                {
                    matriz[pos.Linha, pos.Coluna] = true;
                }
                pos.DefinirValores(Posicao.Linha - 1, Posicao.Coluna + 1);
                if (Tabuleiro.PosicaoEValida(pos) && existeInimigo(pos))
                {
                    matriz[pos.Linha, pos.Coluna] = true;
                }
                // En passant
                if (Posicao.Linha == 3)
                {
                    Posicao esquerda = new Posicao(Posicao.Linha, Posicao.Coluna - 1);
                    if (Tabuleiro.PosicaoEValida(esquerda) && existeInimigo(esquerda) && Tabuleiro.GetPeca(esquerda) == partida.VulneravelEnPassant)
                    {
                        matriz[esquerda.Linha - 1, esquerda.Coluna] = true;
                    }
                    Posicao direita = new Posicao(Posicao.Linha, Posicao.Coluna + 1);
                    if (Tabuleiro.PosicaoEValida(direita) && existeInimigo(direita) && Tabuleiro.GetPeca(direita) == partida.VulneravelEnPassant)
                    {
                        matriz[direita.Linha - 1, direita.Coluna] = true;
                    }
                }
            }
            else
            {
                pos.DefinirValores(Posicao.Linha + 1, Posicao.Coluna);
                if (Tabuleiro.PosicaoEValida(pos) && livre(pos))
                {
                    matriz[pos.Linha, pos.Coluna] = true;
                }
                pos.DefinirValores(Posicao.Linha + 2, Posicao.Coluna);
                if (Tabuleiro.PosicaoEValida(pos) && livre(pos) && QtdeMovimentos == 0 && !existeInimigo(new Posicao(Posicao.Linha + 1, Posicao.Coluna)))
                {
                    matriz[pos.Linha, pos.Coluna] = true;
                }
                pos.DefinirValores(Posicao.Linha + 1, Posicao.Coluna - 1);
                if (Tabuleiro.PosicaoEValida(pos) && existeInimigo(pos))
                {
                    matriz[pos.Linha, pos.Coluna] = true;
                }
                pos.DefinirValores(Posicao.Linha + 1, Posicao.Coluna + 1);
                if (Tabuleiro.PosicaoEValida(pos) && existeInimigo(pos))
                {
                    matriz[pos.Linha, pos.Coluna] = true;
                }
                // En passant
                if (Posicao.Linha == 4)
                {
                    Posicao esquerda = new Posicao(Posicao.Linha, Posicao.Coluna - 1);
                    if (Tabuleiro.PosicaoEValida(esquerda) && existeInimigo(esquerda) && Tabuleiro.GetPeca(esquerda) == partida.VulneravelEnPassant)
                    {
                        matriz[esquerda.Linha + 1, esquerda.Coluna] = true;
                    }
                    Posicao direita = new Posicao(Posicao.Linha, Posicao.Coluna + 1);
                    if (Tabuleiro.PosicaoEValida(direita) && existeInimigo(direita) && Tabuleiro.GetPeca(direita) == partida.VulneravelEnPassant)
                    {
                        matriz[direita.Linha + 1, direita.Coluna] = true;
                    }
                }
            }

            return(matriz);
        }
Exemplo n.º 20
0
 private bool livre(Posicao pos)
 {
     return(Tabuleiro.GetPeca(pos) == null);
 }
Exemplo n.º 21
0
        private bool existeInimigo(Posicao pos)
        {
            Peca p = Tabuleiro.GetPeca(pos);

            return(p != null && p.Cor != Cor);
        }
Exemplo n.º 22
0
 private bool Livre(Posicao posicao) => Tabuleiro.GetPeca(posicao) == null;
Exemplo n.º 23
0
        public static void imprimeTabuleiro(Tabuleiro tab, bool[,] movimentosPossiveis)
        {
            ConsoleColor fundOrginal  = Console.BackgroundColor;
            ConsoleColor fundoMarcado = ConsoleColor.DarkGray;

            for (int i = 0; i < tab.linhas; i++)
            {
                Console.Write(((tab.linhas) - i) + " ");

                for (int j = 0; j < tab.colunas; j++)
                {
                    if (movimentosPossiveis[i, j] == true)
                    {
                        Console.BackgroundColor = fundoMarcado;
                    }

                    else
                    {
                        Console.BackgroundColor = fundOrginal;
                    }



                    if (tab.GetPeca(i, j) == null)
                    {   //Imprime o traço caso não existam peças na posição
                        Console.Write("- ");
                    }
                    else
                    {
                        //Imprime a Peça de Acordo Se É Branca ou Preta
                        Peca aux = tab.GetPeca(i, j);
                        if (aux.cor == Cor.Branca)
                        {
                            Console.Write(aux + " ");
                        }
                        else
                        {
                            ConsoleColor auxcolor = Console.ForegroundColor;
                            Console.ForegroundColor = ConsoleColor.Yellow;
                            Console.Write(aux + " ");
                            Console.ForegroundColor = auxcolor;
                        }
                    }

                    Console.BackgroundColor = fundOrginal;
                }


                //Parte para a proxíma linha quando todas as colunas da linha forem percorridas
                Console.WriteLine();
            }

            Console.BackgroundColor = fundOrginal;

            for (int j = 0; j < tab.colunas; j++)
            {
                if (j == 0)
                {
                    Console.Write(" ");
                }
                Console.Write(" " + (char)('A' + j));
            }

            Console.WriteLine();
            Console.BackgroundColor = fundOrginal;
        }
Exemplo n.º 24
0
        private bool PodeMover(Posicao posicao)
        {
            Peca peca = Tabuleiro.GetPeca(posicao);

            return(peca == null || peca.Cor != Cor);
        }
Exemplo n.º 25
0
        public override bool[,] MovimentosPossiveis()
        {
            bool[,] matriz = new bool[Tabuleiro.NumLinhas, Tabuleiro.NumColunas];
            Posicao pos = new Posicao(0, 0);

            // N
            pos.DefinirValores(Posicao.Linha - 1, Posicao.Coluna);
            if (Tabuleiro.PosicaoEValida(pos) && PodeMover(pos))
            {
                matriz[pos.Linha, pos.Coluna] = true;
            }
            // NE
            pos.DefinirValores(Posicao.Linha - 1, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoEValida(pos) && PodeMover(pos))
            {
                matriz[pos.Linha, pos.Coluna] = true;
            }
            // E
            pos.DefinirValores(Posicao.Linha, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoEValida(pos) && PodeMover(pos))
            {
                matriz[pos.Linha, pos.Coluna] = true;
            }
            // SE
            pos.DefinirValores(Posicao.Linha + 1, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoEValida(pos) && PodeMover(pos))
            {
                matriz[pos.Linha, pos.Coluna] = true;
            }
            // S
            pos.DefinirValores(Posicao.Linha + 1, Posicao.Coluna);
            if (Tabuleiro.PosicaoEValida(pos) && PodeMover(pos))
            {
                matriz[pos.Linha, pos.Coluna] = true;
            }
            // SO
            pos.DefinirValores(Posicao.Linha + 1, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoEValida(pos) && PodeMover(pos))
            {
                matriz[pos.Linha, pos.Coluna] = true;
            }
            // O
            pos.DefinirValores(Posicao.Linha, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoEValida(pos) && PodeMover(pos))
            {
                matriz[pos.Linha, pos.Coluna] = true;
            }
            // NO
            pos.DefinirValores(Posicao.Linha - 1, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoEValida(pos) && PodeMover(pos))
            {
                matriz[pos.Linha, pos.Coluna] = true;
            }

            // Roque
            if (QtdeMovimentos == 0 && !partida.Xeque)
            {
                // Roque pequeno
                Posicao PosT1 = new Posicao(Posicao.Linha, Posicao.Coluna + 3);

                if (testeTorreParaRoque(PosT1))
                {
                    Posicao p1 = new Posicao(Posicao.Linha, Posicao.Coluna + 1);
                    Posicao p2 = new Posicao(Posicao.Linha, Posicao.Coluna + 2);
                    if (Tabuleiro.GetPeca(p1) == null && Tabuleiro.GetPeca(p2) == null)
                    {
                        matriz[Posicao.Linha, Posicao.Coluna + 2] = true;
                    }
                }

                // Roque grande
                Posicao PosT2 = new Posicao(Posicao.Linha, Posicao.Coluna - 4);

                if (testeTorreParaRoque(PosT2))
                {
                    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.GetPeca(p1) == null && Tabuleiro.GetPeca(p2) == null && Tabuleiro.GetPeca(p2) == null)
                    {
                        matriz[Posicao.Linha, Posicao.Coluna - 2] = true;
                    }
                }
            }

            return(matriz);
        }
Exemplo n.º 26
0
        private bool testeTorreParaRoque(Posicao pos)
        {
            Peca p = Tabuleiro.GetPeca(pos);

            return(p != null && p is Torre && p.Cor == Cor && p.QtdeMovimentos == 0);
        }
Exemplo n.º 27
0
        public override bool[,] MovimentosPossiveis()
        {
            bool[,] matriz = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas];
            Posicao posicaoAux = new Posicao();

            #region Movimentos uma linha acima
            posicaoAux.DefinirValores(Posicao.Linha - 1, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoValida(posicaoAux) && PodeMover(posicaoAux))
            {
                matriz[posicaoAux.Linha, posicaoAux.Coluna] = true;
            }

            posicaoAux.DefinirValores(Posicao.Linha - 1, Posicao.Coluna);
            if (Tabuleiro.PosicaoValida(posicaoAux) && PodeMover(posicaoAux))
            {
                matriz[posicaoAux.Linha, posicaoAux.Coluna] = true;
            }

            posicaoAux.DefinirValores(Posicao.Linha - 1, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoValida(posicaoAux) && PodeMover(posicaoAux))
            {
                matriz[posicaoAux.Linha, posicaoAux.Coluna] = true;
            }
            #endregion

            #region Movimentos na mesma linha
            posicaoAux.DefinirValores(Posicao.Linha, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoValida(posicaoAux) && PodeMover(posicaoAux))
            {
                matriz[posicaoAux.Linha, posicaoAux.Coluna] = true;
            }

            posicaoAux.DefinirValores(Posicao.Linha, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoValida(posicaoAux) && PodeMover(posicaoAux))
            {
                matriz[posicaoAux.Linha, posicaoAux.Coluna] = true;
            }
            #endregion

            #region Movimentos uma linha abaixo
            posicaoAux.DefinirValores(Posicao.Linha + 1, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoValida(posicaoAux) && PodeMover(posicaoAux))
            {
                matriz[posicaoAux.Linha, posicaoAux.Coluna] = true;
            }

            posicaoAux.DefinirValores(Posicao.Linha + 1, Posicao.Coluna);
            if (Tabuleiro.PosicaoValida(posicaoAux) && PodeMover(posicaoAux))
            {
                matriz[posicaoAux.Linha, posicaoAux.Coluna] = true;
            }

            posicaoAux.DefinirValores(Posicao.Linha + 1, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoValida(posicaoAux) && PodeMover(posicaoAux))
            {
                matriz[posicaoAux.Linha, posicaoAux.Coluna] = true;
            }
            #endregion

            #region Roque
            if (QtdeMovimentos == 0 && !_partidaDeXadrez.Xeque)
            {
                //roque pequeno
                Posicao posicaoTorre1 = new Posicao(Posicao.Linha, Posicao.Coluna + 3);
                if (TesteTorreParaRoque(posicaoTorre1))
                {
                    Posicao p1 = new Posicao(Posicao.Linha, Posicao.Coluna + 1);
                    Posicao p2 = new Posicao(Posicao.Linha, Posicao.Coluna + 2);
                    if (Tabuleiro.GetPeca(p1) == null && Tabuleiro.GetPeca(p2) == null)
                    {
                        matriz[Posicao.Linha, Posicao.Coluna + 2] = true;
                    }
                }

                //roque grande
                Posicao posicaoTorre2 = new Posicao(Posicao.Linha, Posicao.Coluna - 4);
                if (TesteTorreParaRoque(posicaoTorre2))
                {
                    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.GetPeca(p1) == null && Tabuleiro.GetPeca(p2) == null && Tabuleiro.GetPeca(p3) == null)
                    {
                        matriz[Posicao.Linha, Posicao.Coluna - 2] = true;
                    }
                }
            }
            #endregion

            return(matriz);
        }
Exemplo n.º 28
0
        private bool ExisteInimigo(Posicao posicao)
        {
            Peca peca = Tabuleiro.GetPeca(posicao);

            return(peca != null && peca.Cor != Cor);
        }
Exemplo n.º 29
0
        private bool TesteTorreParaRoque(Posicao posicao)
        {
            Peca peca = Tabuleiro.GetPeca(posicao);

            return(peca != null && peca is Torre && peca.Cor == Cor && peca.QtdeMovimentos == 0);
        }
Exemplo n.º 30
0
        public override bool[,] MovimentosPossiveis()
        {
            var movimentosPossiveis = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas];
            var posicao             = new Posicao(0, 0);

            posicao.AlterarPosicao(Posicao.Linha + 1, Posicao.Coluna);
            if (Tabuleiro.PosicaoValida(posicao) && PodeMover(posicao))
            {
                movimentosPossiveis[posicao.Linha, posicao.Coluna] = true;
            }

            posicao.AlterarPosicao(Posicao.Linha + 1, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoValida(posicao) && PodeMover(posicao))
            {
                movimentosPossiveis[posicao.Linha, posicao.Coluna] = true;
            }

            posicao.AlterarPosicao(Posicao.Linha, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoValida(posicao) && PodeMover(posicao))
            {
                movimentosPossiveis[posicao.Linha, posicao.Coluna] = true;
            }

            posicao.AlterarPosicao(Posicao.Linha - 1, Posicao.Coluna + 1);
            if (Tabuleiro.PosicaoValida(posicao) && PodeMover(posicao))
            {
                movimentosPossiveis[posicao.Linha, posicao.Coluna] = true;
            }

            posicao.AlterarPosicao(Posicao.Linha - 1, Posicao.Coluna);
            if (Tabuleiro.PosicaoValida(posicao) && PodeMover(posicao))
            {
                movimentosPossiveis[posicao.Linha, posicao.Coluna] = true;
            }

            posicao.AlterarPosicao(Posicao.Linha - 1, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoValida(posicao) && PodeMover(posicao))
            {
                movimentosPossiveis[posicao.Linha, posicao.Coluna] = true;
            }

            posicao.AlterarPosicao(Posicao.Linha, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoValida(posicao) && PodeMover(posicao))
            {
                movimentosPossiveis[posicao.Linha, posicao.Coluna] = true;
            }

            posicao.AlterarPosicao(Posicao.Linha + 1, Posicao.Coluna - 1);
            if (Tabuleiro.PosicaoValida(posicao) && PodeMover(posicao))
            {
                movimentosPossiveis[posicao.Linha, posicao.Coluna] = true;
            }

            // Jogada especial
            // Roque
            if (QtdDeMovimentos == 0 && !Partida.Xeque)
            {
                // Roque pequeno
                var posicaoTorre1 = new Posicao(Posicao.Linha, Posicao.Coluna + 3);

                if (PossibilidadeDeRoque(posicaoTorre1))
                {
                    var posicao1 = new Posicao(Posicao.Linha, Posicao.Coluna + 1);
                    var posicao2 = new Posicao(Posicao.Linha, Posicao.Coluna + 2);
                    if (Tabuleiro.GetPeca(posicao1) == null && Tabuleiro.GetPeca(posicao2) == null)
                    {
                        movimentosPossiveis[Posicao.Linha, Posicao.Coluna + 2] = true;
                    }
                }

                // Roque grande
                var posicaoTorre2 = new Posicao(Posicao.Linha, Posicao.Coluna - 4);
                if (PossibilidadeDeRoque(posicaoTorre2))
                {
                    var posicao1 = new Posicao(Posicao.Linha, Posicao.Coluna - 1);
                    var posicao2 = new Posicao(Posicao.Linha, Posicao.Coluna - 2);
                    var posicao3 = new Posicao(Posicao.Linha, Posicao.Coluna - 3);
                    if (Tabuleiro.GetPeca(posicao1) == null && Tabuleiro.GetPeca(posicao2) == null &&
                        Tabuleiro.GetPeca(posicao3) == null)
                    {
                        movimentosPossiveis[Posicao.Linha, Posicao.Coluna - 2] = true;
                    }
                }
            }

            return(movimentosPossiveis);
        }