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); }