Пример #1
0
        public Peca ExecutaMovimento(Posicao origem, Posicao destino)
        {
            Peca p = Tab.RetirarPeca(origem);

            p.IncrementarQteDeMovimentos();
            Peca pecaCapturada = Tab.RetirarPeca(destino);

            Tab.ColocarPeca(p, destino);

            if (pecaCapturada != null)
            {
                _capturadas.Add(pecaCapturada);
            }

            //#JogadaEspecial - Roque pequeno
            if (p is Rei && destino.coluna == origem.coluna + 2)
            {
                Posicao origemTorre  = new Posicao(origem.linha, origem.coluna + 3);
                Posicao destinoTorre = new Posicao(origem.linha, origem.coluna + 1);
                Peca    torre        = Tab.RetirarPeca(origemTorre);
                torre.IncrementarQteDeMovimentos();
                Tab.ColocarPeca(torre, destinoTorre);
            }

            //#JogadaEspecial - Roque grande
            if (p is Rei && destino.coluna == origem.coluna - 2)
            {
                Posicao origemTorre  = new Posicao(origem.linha, origem.coluna - 4);
                Posicao destinoTorre = new Posicao(origem.linha, origem.coluna - 1);
                Peca    torre        = Tab.RetirarPeca(origemTorre);
                torre.IncrementarQteDeMovimentos();
                Tab.ColocarPeca(torre, destinoTorre);
            }

            //#JogadaEspecial - En Passant
            if (p is Peao)
            {
                if (destino.coluna != origem.coluna && pecaCapturada == null)
                {
                    Posicao posPeao;
                    if (p.Cor == Cor.Branca)
                    {
                        posPeao = new Posicao(p.Posicao.linha + 1, p.Posicao.coluna);
                    }
                    else
                    {
                        posPeao = new Posicao(p.Posicao.linha - 1, p.Posicao.coluna);
                    }
                    pecaCapturada = Tab.RetirarPeca(posPeao);
                    _capturadas.Add(pecaCapturada);
                }
            }

            return(pecaCapturada);
        }