public void ValidarPosicaoDestino(Posicao origem, Posicao destino) { if (!TabuleiroPartida.PecaPosition(origem).MovimentoPossivel(destino)) { throw new TabuleiroException("Posição de destino inválida!"); } }
public void ValidarPosicaoOrigem(Posicao posicao) { if (TabuleiroPartida.PecaPosition(posicao) == null) { throw new TabuleiroException("Não existe peça na posição de origem escolhida!"); } if (JogadorAtual != TabuleiroPartida.PecaPosition(posicao).Cor) { throw new TabuleiroException("A peça escolhida não é sua!"); } if (!TabuleiroPartida.PecaPosition(posicao).ExisteMovimentosPossiveis()) { throw new TabuleiroException("Não há movimentos possiveis para a peça escolhidas!"); } }
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; }