public void ExecutarJogada(Posicao origem, Posicao destino) { Peca PecaCapturada = ExecutarMovimento(origem, destino); if (EstaEmXeque(JogadorAtual)) { DesfazerMovimento(origem, destino, PecaCapturada); throw new TabuleiroException("Você não pode se colocar em xeque!"); } Peca p = Tab.Peca(destino); // #jogadaEspecial Promoção if (p is Peao) { if (p.Cor == Cor.Branco && destino.Linha == 0 || (p.Cor == Cor.Preto && destino.Linha == 7)) { p = Tab.RetirarPeca(destino); Pecas.Remove(p); Peca rainha = new Rainha(p.Cor, Tab); Tab.ColocarPeca(rainha, destino); Pecas.Add(rainha); } } if (EstaEmXeque(Adversario(JogadorAtual))) { Xeque = true; } else { Xeque = false; } if (XequeMate(Adversario(JogadorAtual))) { Terminada = true; } else { Turno++; MudarJogador(); } // #JogadaEspecial en passant if (p is Peao && (destino.Linha == origem.Linha - 2) || destino.Linha == origem.Linha + 2) { VulneravelEnPassant = p; } else { VulneravelEnPassant = null; } }
public void realizaJogada(Posicao origem, Posicao destino) // método que executa a jogada de movimento de peça { Peca pecaCapturada = executaMovimento(origem, destino); if (estaEmCheque(jogadorAtual)) // testando se a jogada feita não colocou o rei do jogador em xeque, o que inviabiliza a jogada { desfazMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("Você não pode se colocar em xeque"); } Peca p = tab.peca(destino); // #jogadaespecial Promocao do Peao 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 Promovida = new Rainha(tab, p.cor); tab.colocarPeca(Promovida, destino); pecas.Add(Promovida); } } if (estaEmCheque(adversaria(jogadorAtual))) { xeque = true; } else { xeque = false; } if (testeXequeMate(adversaria(jogadorAtual))) { terminada = true; } else { turno++; mudaJogador(); } // #jogadaespecial En Passant if (p is Peao && (destino.linha == origem.linha + 2 || destino.linha == origem.linha - 2)) { vulneralEnPassant = p; } else { vulneralEnPassant = null; } }