public void RealizaJogada(Posicao origem, Posicao destino) { Peca capturada = ExecutaMovimento(origem, destino); if (isXeque(JogadorAtual)) { DesfazMovimento(origem, destino, capturada); throw new TabuleiroException("Você não pode se colocar em xeque!"); } Peca p = Tab.Peca(destino); // #JogadaEspecial 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); } } if (isXeque(Adversaria(JogadorAtual))) { IsXeque = true; } else { IsXeque = false; } if (IsXequeMate(Adversaria(JogadorAtual))) { Finalizada = 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 RealizarJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = ExecutarMovimento(origem, destino); Peca pecaPeao = TabuleiroPartida.PecaPosition(destino); if (EstaEmXeque(JogadorAtual)) { DesfazerMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("Você não pode se colocar em xeque!"); } //#MovimentoEspecial Promover Peao if (pecaPeao is Peao) { if ((pecaPeao.Cor == Cor.Branca && destino.Linha == 0) || pecaPeao.Cor == Cor.Preta && destino.Linha == 7) { pecaPeao = TabuleiroPartida.RetirarPeca(destino); _pecas.Remove(pecaPeao); Peca dama = new Dama(TabuleiroPartida, pecaPeao.Cor); TabuleiroPartida.ColocarPeca(dama, destino); } } JogadorEmXeque = (EstaEmXeque(CorAdversaria(JogadorAtual))) ? true : false; if (TesteXequemate(CorAdversaria(JogadorAtual))) { Terminada = true; } else { Turno++; MudarCorJogador(); } // #MovimentoEspecial En Passant VulneravelEnPassant = (pecaPeao is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2)) ? pecaPeao : null; }