Пример #1
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca capturada = ExecutaMovimento(origem, destino);

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

            Peca p = Tab.Peca(destino);

            // #JogadaEspecial Promocao

            if (p is Peao)
            {
                if (p.Cor == Cor.Branca && destino.Linha == 0 || p.Cor == Cor.Preta && destino.Linha == 7)
                {
                    p = Tab.RetirarPeca(destino);
                    Pecas.Remove(p);
                    Peca dama = new Dama(Tab, p.Cor);
                    Tab.ColocarPeca(dama, destino);
                }
            }


            if (isXeque(Adversaria(JogadorAtual)))
            {
                IsXeque = true;
            }
            else
            {
                IsXeque = false;
            }

            if (IsXequeMate(Adversaria(JogadorAtual)))
            {
                Finalizada = true;
            }
            else
            {
                Turno++;
                MudarJogador();
            }

            // #jogadaEspecial en passant
            if (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                VulneravelEnPassant = p;
            }
            else
            {
                VulneravelEnPassant = null;
            }
        }
Пример #2
0
        public void RealizarJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutarMovimento(origem, destino);
            Peca pecaPeao      = TabuleiroPartida.PecaPosition(destino);

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

            //#MovimentoEspecial Promover Peao
            if (pecaPeao is Peao)
            {
                if ((pecaPeao.Cor == Cor.Branca && destino.Linha == 0) ||
                    pecaPeao.Cor == Cor.Preta && destino.Linha == 7)
                {
                    pecaPeao = TabuleiroPartida.RetirarPeca(destino);
                    _pecas.Remove(pecaPeao);
                    Peca dama = new Dama(TabuleiroPartida, pecaPeao.Cor);
                    TabuleiroPartida.ColocarPeca(dama, destino);
                }
            }

            JogadorEmXeque = (EstaEmXeque(CorAdversaria(JogadorAtual)))
                ? true : false;

            if (TesteXequemate(CorAdversaria(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudarCorJogador();
            }

            // #MovimentoEspecial En Passant
            VulneravelEnPassant = (pecaPeao is Peao &&
                                   (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
                ? pecaPeao : null;
        }