예제 #1
0
        public Peca ExecutaMovimento(Posicao origem, Posicao destino)
        {
            Peca peca = this.Tabuleiro.RetirarPeca(origem);

            peca.IncremetarMovimentos();
            Peca pecaCapturada = this.Tabuleiro.RetirarPeca(destino);

            this.Tabuleiro.ColocarPeca(peca, destino);

            if (pecaCapturada != null)
            {
                PecasCapturadas.Add(pecaCapturada);
            }
            //Roque pequeno
            if (peca 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        = Tabuleiro.RetirarPeca(origemTorre);
                torre.IncremetarMovimentos();
                Tabuleiro.ColocarPeca(torre, destinoTorre);
            }
            //Roque grande
            if (peca 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        = Tabuleiro.RetirarPeca(origemTorre);
                torre.IncremetarMovimentos();
                Tabuleiro.ColocarPeca(torre, destinoTorre);
            }
            //en passant
            if (peca is Peao)
            {
                if (origem.Coluna != destino.Coluna && pecaCapturada == null)
                {
                    Posicao pos;
                    if (peca.Cor == Cor.Branca)
                    {
                        pos = new Posicao(destino.Linha + 1, destino.Coluna);
                    }
                    else
                    {
                        pos = new Posicao(destino.Linha - 1, destino.Coluna);
                    }
                    pecaCapturada = Tabuleiro.RetirarPeca(pos);
                    PecasCapturadas.Add(pecaCapturada);
                }
            }

            return(pecaCapturada);
        }