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