public void ValidarPosicaoDeDestino(Posicao origem, Posicao destino) { if (!Tabuleiro.PegaPeca(origem).MovimentoPossivel(destino)) { throw new TabuleiroException("Posição de destino inválida!"); } }
public void RealizaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = ExecutaMovimento(origem, destino); if (EstaEmCheck(JogadorAtual)) { DesfazMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("Você não pode se colocar em check!"); } Peca p = Tabuleiro.PegaPeca(destino); // #jogadaespecial promocao if (p is Peao) { if ((p.Cor == Cor.Branca && destino.Linha == 0) || (p.Cor == Cor.Preta && destino.Linha == 7)) { p = Tabuleiro.RetirarPeca(destino); _pecas.Remove(p); Peca promo = EscolhePromo(Tabuleiro, p.Cor); if (promo != null) { Tabuleiro.ColocarPeca(promo, destino); _pecas.Add(promo); } } } if (EstaEmCheck(Adversaria(JogadorAtual))) { Check = true; } else { Check = false; } if (TesteCheckMate(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 ValidarPosicaoDeOrigem(Posicao pos) { Peca p = Tabuleiro.PegaPeca(pos); if (p == null) { throw new TabuleiroException("Não existe peça na posição de origem escolhida!"); } if (JogadorAtual != p.Cor) { throw new TabuleiroException("A peça de origem escolhida não é sua!"); } if (!p.existeMovimentosPossiveis()) { throw new TabuleiroException("Não há movimentos movimentos possíveis para a peça de origem escolhida!"); } }