Exemple #1
0
        public static void ImprimirTabuleiro(Tabuleiro tab, bool[,] possicoesPossiveis)
        {
            ConsoleColor fundoOriginal = Console.BackgroundColor;
            ConsoleColor fundoAlterado = ConsoleColor.DarkGray;

            for (int i = 0; i < tab.Linhas; i++)
            {
                Console.Write(8 - i + " ");
                for (int j = 0; j < tab.Colunas; j++)
                {
                    if (possicoesPossiveis[i, j])
                    {
                        Console.BackgroundColor = fundoAlterado;
                    }
                    else
                    {
                        Console.BackgroundColor = fundoOriginal;
                    }
                    ImprimirPeca(tab.ObterPeca(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[,] movimentos = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas];
            Posicao aux = new Posicao(0, 0);

            aux.DefinirPosicao(Posicao.Linha - 1, Posicao.Coluna - 1);
            while (Tabuleiro.VerificarPosicao(aux) && PodeMover(aux))
            {
                movimentos[aux.Linha, aux.Coluna] = true;
                if (Tabuleiro.ObterPeca(aux) != null && Tabuleiro.ObterPeca(aux).Cor != this.Cor)
                {
                    break;
                }
                aux.Linha  -= 1;
                aux.Coluna -= 1;
            }

            aux.DefinirPosicao(Posicao.Linha + 1, Posicao.Coluna + 1);
            while (Tabuleiro.VerificarPosicao(aux) && PodeMover(aux))
            {
                movimentos[aux.Linha, aux.Coluna] = true;
                if (Tabuleiro.ObterPeca(aux) != null && Tabuleiro.ObterPeca(aux).Cor != this.Cor)
                {
                    break;
                }
                aux.Linha  += 1;
                aux.Coluna += 1;
            }

            aux.DefinirPosicao(Posicao.Linha - 1, Posicao.Coluna + 1);
            while (Tabuleiro.VerificarPosicao(aux) && PodeMover(aux))
            {
                movimentos[aux.Linha, aux.Coluna] = true;
                if (Tabuleiro.ObterPeca(aux) != null && Tabuleiro.ObterPeca(aux).Cor != this.Cor)
                {
                    break;
                }
                aux.Coluna += 1;
                aux.Linha  -= 1;
            }

            aux.DefinirPosicao(Posicao.Linha + 1, Posicao.Coluna - 1);
            while (Tabuleiro.VerificarPosicao(aux) && PodeMover(aux))
            {
                movimentos[aux.Linha, aux.Coluna] = true;
                if (Tabuleiro.ObterPeca(aux) != null && Tabuleiro.ObterPeca(aux).Cor != this.Cor)
                {
                    break;
                }
                aux.Coluna -= 1;
                aux.Linha  += 1;
            }

            return(movimentos);
        }
Exemple #3
0
 public void ValidarDestino(Posicao origem, Posicao destino)
 {
     if (!Tabuleiro.VerificarPosicao(destino))
     {
         throw new TabuleiroException("A POSIÇÃO INFORMADA É INVÁLIDA!");
     }
     if (!Tabuleiro.ObterPeca(origem).MovimentoPossivel(destino))
     {
         throw new TabuleiroException("A PEÇA SELECIONADA NÂO PODE MOVER PARA ESSA POSIÇÃO!");
     }
 }
Exemple #4
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.ObterPeca(i, j));
         }
         Console.WriteLine();
     }
     Console.WriteLine("  A B C D E F G H");
 }
Exemple #5
0
 public void ValidarOrigem(Posicao posicao)
 {
     if (!Tabuleiro.VerificarPosicao(posicao))
     {
         throw new TabuleiroException("A POSIÇÃO INFORMADA É INVÁLIDA!");
     }
     if (Tabuleiro.ExistePeca(posicao))
     {
         throw new TabuleiroException("NÃO EXISTEM PEÇAS NA POSIÇÃO INFORMADA!");
     }
     if (Tabuleiro.ObterPeca(posicao).Cor != JogadorAtual)
     {
         throw new TabuleiroException("A PEÇA ESCOLHIDA É DE OUTRO JOGADOR!");
     }
     if (!Tabuleiro.ObterPeca(posicao).ExisteMovimentoPossivel())
     {
         throw new TabuleiroException("A PEÇA ESCOLHIDA NÃO POSSUI MOVIMENTOS DISPONÍVEIS!");
     }
 }
Exemple #6
0
        public void NovaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutarMovimento(origem, destino);

            if (EstaEmXeque())
            {
                DesfazerMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("UM JOGADOR NÃO PODE SE COLOCAR EM XEQUE!");
            }
            Peca peca = Tabuleiro.ObterPeca(destino);

            Temporizar();
            AlteraJogador();

            if (EstaXequeMate())
            {
                throw new XequeMateException();
            }
            else
            {
                IncrementaTurno();
            }
        }
Exemple #7
0
        public void NovaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutarMovimento(origem, destino);

            if (EstaEmXeque())
            {
                DesfazerMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("UM JOGADOR NÃO PODE SE COLOCAR EM XEQUE!");
            }
            Peca peca = Tabuleiro.ObterPeca(destino);

            //Teste Jogada Especial "Promoção" (trocar peão por dama se chegar ao outro lado do tabuleiro)
            if (peca is Peao)
            {
                if ((peca.Cor == Cor.Azul && destino.Linha == 7) || (peca.Cor == Cor.Vermelho && destino.Linha == 0))
                {
                    peca = Tabuleiro.RemoverPeca(destino);
                    _pecasNaPartida.Remove(peca);
                    Peca dama = new Dama(peca.Cor, Tabuleiro);
                    Tabuleiro.ColocarPeca(dama, destino);
                    _pecasNaPartida.Add(dama);
                    Tela.JogadaEspecialPromocao();
                }
            }

            AlteraJogador();

            if (EstaXequeMate())
            {
                Terminada = true;
            }
            else
            {
                IncrementaTurno();
            }
        }
Exemple #8
0
 private bool Livre(Posicao posicao)
 {
     return(Tabuleiro.ObterPeca(posicao) == null);
 }
Exemple #9
0
        private bool ExisteInimigo(Posicao posicao)
        {
            Peca peca = Tabuleiro.ObterPeca(posicao);

            return(peca != null && peca.Cor != Cor);
        }
Exemple #10
0
        private bool PodeMover(Posicao posicao)
        {
            Peca peca = Tabuleiro.ObterPeca(posicao);

            return(peca == null || peca.Cor != this.Cor);
        }