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.Branca && 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(); } //#jogadaespecial en passant if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2)) { vulneravelEnPassant = p; } else { vulneravelEnPassant = null; } }
public static Peca LerPecaPromocao(Tabuleiro tab, Cor cor) { Console.WriteLine(); Console.WriteLine("Peão promovido! escolha uma nova peça:"); Console.WriteLine("D - Dama"); Console.WriteLine("C - Cavalo"); Console.WriteLine("B - Bispo"); Console.WriteLine("T - Torre"); Console.Write("Digite a inicial da nova peça: "); char ch = char.Parse(Console.ReadLine()); Peca p = null; switch (ch) { case 'D': p = new Dama(tab, cor); break; case 'C': p = new Cavalo(tab, cor); break; case 'B': p = new Bispo(tab, cor); break; case 'T': p = new Torre(tab, cor); break; default: Console.WriteLine("Valor inválido!!"); break; } return(p); }