public void RealizarJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = ExecutarMovimento(origem, destino); if (EstaEmXeque(JogadorAtual)) { DesfazMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("Você não pode se colocar em xeque! "); } Peca p = Tab.Peca(destino); // promocao if (p is Peao) { if ((p.Cor == Cor.Branca && destino.Linha == 0) || (p.Cor == Cor.Preta && destino.Linha == 7)) { p = Tab.RetirarPeca(destino); pecas.Remove(p); Peca dama = new Dama(Tab, p.Cor); Tab.ColocarPeca(dama, destino); pecas.Add(dama); } } if (EstaEmXeque(advseraria(JogadorAtual))) { Xeque = true; } else { Xeque = false; } if (TesteXequeMate(advseraria(JogadorAtual))) { Terminada = true; } else { Turno++; MudaJogador(); } // jogada especial en passant if (p is Peao && (destino.Linha == origem.Linha - 2) || (destino.Linha == origem.Linha + 2)) { VuneralvelEnPassant = p; } else { VuneralvelEnPassant = null; } }