private void ReverteMovimento(Posicao origem, Posicao destino, Peca pecaCapturada) { Peca p = Tabuleiro.MoverPeca(destino, origem, true); if (pecaCapturada != null) { _capturadas.Remove(pecaCapturada); // #JogadaEspecial EnPassant if ((p is Peao) && (destino.Coluna != origem.Coluna) && (pecaCapturada == PecaVulneravelEnPassant)) { Posicao nPos = new Posicao((pecaCapturada.Cor == Cor.Branco ? destino.Linha - 1 : destino.Linha + 1), destino.Coluna); Tabuleiro.AdicionarPeca(pecaCapturada, nPos); } else { Tabuleiro.AdicionarPeca(pecaCapturada, destino); } } // #JogadaEspecial Roque Pequeno if ((p is Rei) && (destino.Coluna == origem.Coluna + 2)) { Tabuleiro.MoverPeca(new Posicao(origem.Linha, origem.Coluna + 1), new Posicao(origem.Linha, origem.Coluna + 3), true); } // #JogadaEspecial Roque Grande if ((p is Rei) && (destino.Coluna == origem.Coluna - 2)) { Tabuleiro.MoverPeca(new Posicao(origem.Linha, origem.Coluna - 1), new Posicao(origem.Linha, origem.Coluna - 4), true); } }
private Peca ExecutaMovimento(Posicao origem, Posicao destino) { Peca pecaCapturada = Tabuleiro.RemoverPeca(destino); if (pecaCapturada != null) { _capturadas.Add(pecaCapturada); } Peca p = Tabuleiro.MoverPeca(origem, destino); // #JogadaEspecial Roque Pequeno if ((p is Rei) && (destino.Coluna == origem.Coluna + 2)) { Tabuleiro.MoverPeca(new Posicao(origem.Linha, origem.Coluna + 3), new Posicao(origem.Linha, origem.Coluna + 1)); } // #JogadaEspecial Roque Grande if ((p is Rei) && (destino.Coluna == origem.Coluna - 2)) { Tabuleiro.MoverPeca(new Posicao(origem.Linha, origem.Coluna - 4), new Posicao(origem.Linha, origem.Coluna - 1)); } // #JogadaEspecial EnPassant if ((p is Peao) && (destino.Coluna != origem.Coluna) && (pecaCapturada == null)) { pecaCapturada = PecaVulneravelEnPassant; Tabuleiro.RemoverPeca(PecaVulneravelEnPassant.Posicao); _capturadas.Add(pecaCapturada); } // #JogadaEspecial Promocao if ((p is Peao) && (((p.Cor == Cor.Branco) && (destino.Linha == 0)) || ((p.Cor == Cor.Preto) && (destino.Linha == Tabuleiro.Linhas - 1)))) { Rainha novaRainha = new Rainha(Tabuleiro, p.Cor); _pecas.Remove(p); Tabuleiro.TrocarPeca(destino, novaRainha); _pecas.Add(novaRainha); } return(pecaCapturada); }