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); //#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 rainha = new Rainha(tab, p.cor); tab.colocarPeca(rainha, destino); pecas.Add(rainha); } } if (estaEmXeque(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)) { vulneravelEnPassant = p; } else { vulneravelEnPassant = 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); //Promoção 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); Console.WriteLine("Para qual peça você quer promover? (C,T,B e D): "); char escolha = char.Parse(Console.ReadLine()); if (escolha == 'd' || escolha == 'D') { Peca dama = new Rainha(tab, p.cor); tab.colocarPeca(dama, destino); pecas.Add(dama); } else if (escolha == 'c' || escolha == 'C') { Peca cavalo = new Cavalo(tab, p.cor); tab.colocarPeca(cavalo, destino); pecas.Add(cavalo); } else if (escolha == 'b' || escolha == 'B') { Peca bispo = new Bispo(tab, p.cor); tab.colocarPeca(bispo, destino); pecas.Add(bispo); } else if (escolha == 't' || escolha == 'T') { Peca torre = new Torre(tab, p.cor); tab.colocarPeca(torre, destino); pecas.Add(torre); } else { throw new TabuleiroException("Escolha inválida!"); } } } if (estaEmXeque(adversaria(JogadorAtual))) { xeque = true; } else { xeque = false; } if (testeXequeMate(adversaria(JogadorAtual))) { terminada = true; } else { turno++; mudaJogador(); } //En Passant if (p is Peao && p.qntMovimentos == 1 && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2)) { vuneravelEmPassant = p; } else { vuneravelEmPassant = null; } }