public void realizaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = executaMovimento(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); //# Jogada Especial 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(p.cor, tab); tab.colocarPeca(dama, destino); } } if (estaEmXeque(adversario(jogadorAtual))) { xeque = true; } else { xeque = false; } if (testeXequemate(adversario(jogadorAtual))) { terminada = true; } else { turno++; mudaJogador(); } //#Joga Especial En Passant if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2)) { vulneravelEnPassnt = p; } else { vulneravelEnPassnt = null; } }
public void realizaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = executaMovimento(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); // # JOGADA ESPECIAL 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(Adversaria(jogadorAtual))) { Xeque = true; } else { Xeque = false; } if (testeXequeMate(Adversaria(jogadorAtual))) { Terminada = true; } else { turno++; mudaJogador(); } // # JOGADA ESPECIAL EN PASSANT if (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2)) { vulneravelEnPassant = p; } else { vulneravelEnPassant = null; } }