public Peca ExecutaMovimento(Posicao origem, Posicao destino) { Peca p = Tab.RetirarPeca(origem); p.IncrementarQteMovimentos(); Peca PecaCapturada = Tab.RetirarPeca(destino); Tab.ColocarPeca(p, destino); if (PecaCapturada != null) { ConjuntoPecasCapturadas.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 T = Tab.RetirarPeca(origemTorre); T.IncrementarQteMovimentos(); T.Tabuleiro.ColocarPeca(T, 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 T = Tab.RetirarPeca(origemTorre); T.IncrementarQteMovimentos(); T.Tabuleiro.ColocarPeca(T, destinoTorre); } //#JogadaEspecial En Passant if (p is Peao) { if (origem.Coluna != destino.Coluna && PecaCapturada == null) { Posicao posP; if (p.Cor == Cor.Branca) { posP = new Posicao(destino.Linha + 1, destino.Coluna); } else { posP = new Posicao(destino.Linha - 1, destino.Coluna); } PecaCapturada = Tab.RetirarPeca(posP); ConjuntoPecasCapturadas.Add(PecaCapturada); } } return(PecaCapturada); }
public void DesfazMovimento(Posicao origem, Posicao destino, Peca PecaCapturada) { Peca p = Tab.RetirarPeca(destino); p.DecrementarQteMovimentos(); if (PecaCapturada != null) { Tab.ColocarPeca(PecaCapturada, destino); ConjuntoPecasCapturadas.Remove(PecaCapturada); } Tab.ColocarPeca(p, origem); //#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 T = Tab.RetirarPeca(destinoTorre); T.DecrementarQteMovimentos(); T.Tabuleiro.ColocarPeca(T, origemTorre); } //#JogadaEspecial Roque Pequeno 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 T = Tab.RetirarPeca(destinoTorre); T.DecrementarQteMovimentos(); T.Tabuleiro.ColocarPeca(T, origemTorre); } //#JogadaEspecial En Passant if (p is Peao) { if (origem.Coluna != destino.Coluna && PecaCapturada == VulneravelEnPassant) { Peca peao = Tab.RetirarPeca(destino); Posicao posP; if (p.Cor == Cor.Branca) { posP = new Posicao(3, destino.Coluna); } else { posP = new Posicao(4, destino.Coluna); } Tab.ColocarPeca(peao, posP); } } }