Пример #1
0
        private void ReverteMovimento(Posicao origem, Posicao destino, Peca pecaCapturada)
        {
            Peca p = Tabuleiro.MoverPeca(destino, origem, true);

            if (pecaCapturada != null)
            {
                _capturadas.Remove(pecaCapturada);
                // #JogadaEspecial EnPassant
                if ((p is Peao) && (destino.Coluna != origem.Coluna) && (pecaCapturada == PecaVulneravelEnPassant))
                {
                    Posicao nPos = new Posicao((pecaCapturada.Cor == Cor.Branco ? destino.Linha - 1 : destino.Linha + 1), destino.Coluna);
                    Tabuleiro.AdicionarPeca(pecaCapturada, nPos);
                }
                else
                {
                    Tabuleiro.AdicionarPeca(pecaCapturada, destino);
                }
            }
            // #JogadaEspecial Roque Pequeno
            if ((p is Rei) && (destino.Coluna == origem.Coluna + 2))
            {
                Tabuleiro.MoverPeca(new Posicao(origem.Linha, origem.Coluna + 1), new Posicao(origem.Linha, origem.Coluna + 3), true);
            }
            // #JogadaEspecial Roque Grande
            if ((p is Rei) && (destino.Coluna == origem.Coluna - 2))
            {
                Tabuleiro.MoverPeca(new Posicao(origem.Linha, origem.Coluna - 1), new Posicao(origem.Linha, origem.Coluna - 4), true);
            }
        }
Пример #2
0
        private Peca ExecutaMovimento(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = Tabuleiro.RemoverPeca(destino);

            if (pecaCapturada != null)
            {
                _capturadas.Add(pecaCapturada);
            }
            Peca p = Tabuleiro.MoverPeca(origem, destino);

            // #JogadaEspecial Roque Pequeno
            if ((p is Rei) && (destino.Coluna == origem.Coluna + 2))
            {
                Tabuleiro.MoverPeca(new Posicao(origem.Linha, origem.Coluna + 3), new Posicao(origem.Linha, origem.Coluna + 1));
            }
            // #JogadaEspecial Roque Grande
            if ((p is Rei) && (destino.Coluna == origem.Coluna - 2))
            {
                Tabuleiro.MoverPeca(new Posicao(origem.Linha, origem.Coluna - 4), new Posicao(origem.Linha, origem.Coluna - 1));
            }
            // #JogadaEspecial EnPassant
            if ((p is Peao) && (destino.Coluna != origem.Coluna) && (pecaCapturada == null))
            {
                pecaCapturada = PecaVulneravelEnPassant;
                Tabuleiro.RemoverPeca(PecaVulneravelEnPassant.Posicao);
                _capturadas.Add(pecaCapturada);
            }
            // #JogadaEspecial Promocao
            if ((p is Peao) && (((p.Cor == Cor.Branco) && (destino.Linha == 0)) || ((p.Cor == Cor.Preto) && (destino.Linha == Tabuleiro.Linhas - 1))))
            {
                Rainha novaRainha = new Rainha(Tabuleiro, p.Cor);
                _pecas.Remove(p);
                Tabuleiro.TrocarPeca(destino, novaRainha);
                _pecas.Add(novaRainha);
            }

            return(pecaCapturada);
        }