public bool TesteXequeMate(Cor cor) { if (!EstaEmXeque(cor)) { return(false); } foreach (Peca_Tabuleiro x in PecasEmJogo(cor)) { bool[,] mat = x.MovimentosPossiveis(); for (int i = 0; i < tab.linhas; i++) { for (int j = 0; j < tab.colunas; j++) { Posicao origem = x.posicao; Posicao destino = new Posicao(i, j); Peca_Tabuleiro pecaCapturada = ExecutaMovimento(origem, destino); bool testeXeque = EstaEmXeque(cor); DesfazMovimento(origem, destino, pecaCapturada); if (!testeXeque) { return(false); } } } } return(true); }
//Pega a origem e destino do jogador e envia para o método de executar movimento public void RealizaJogada(Posicao origem, Posicao destino) { Peca_Tabuleiro pecaCapturada = ExecutaMovimento(origem, destino); if (EstaEmXeque(jogadorAtual)) { DesfazMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("Você não pode se colocar em xeque"); } if (EstaEmXeque(_Adversaria(jogadorAtual))) { xeque = true; } else { xeque = false; } if (TesteXequeMate(_Adversaria(jogadorAtual))) { partidaTerminada = true; } else { turno++; _MudaJogador(); } }
public void DesfazMovimento(Posicao origem, Posicao destino, Peca_Tabuleiro pecaCapturada) { Peca_Tabuleiro p = tab.RetirarPeca(destino); p.DecrenentaMovimento(); if (pecaCapturada != null) { tab.ColocarPeca(pecaCapturada, destino); _capturadas.Remove(pecaCapturada); } tab.ColocarPeca(p, origem); }
public Peca_Tabuleiro ExecutaMovimento(Posicao origem, Posicao destino) { Peca_Tabuleiro p = tab.RetirarPeca(origem); p.IcrementaMovimento(); Peca_Tabuleiro pecaCapturada = tab.RetirarPeca(destino); tab.ColocarPeca(p, destino); if (pecaCapturada != null) { _capturadas.Add(pecaCapturada); } return(pecaCapturada); }
//Verifica se a cor da pela informada está em xeque public bool EstaEmXeque(Cor cor) { Peca_Tabuleiro R = _Rei(cor); if (R == null) { throw new TabuleiroException("Não tem rei da cor " + cor + " no tabuleiro!"); } foreach (Peca_Tabuleiro x in PecasEmJogo(_Adversaria(cor))) { bool[,] mat = x.MovimentosPossiveis(); if (mat[R.posicao.linha, R.posicao.coluna]) { return(true); } } return(false); }
//Imprime a peça do tabuleiro public static void ImprimirPeca(Peca_Tabuleiro peca) { if (peca == null) { Console.Write("- "); } else if (peca.cor == Cor.Branca) { Console.Write(peca + " "); } else { //Transforma as peças que não são brancas em amarelas ConsoleColor aux = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Yellow; Console.Write(peca + " "); Console.ForegroundColor = aux; } }
//Método auxiliar para colocar pecas public void ColocarNovaPeca(char coluna, int linha, Peca_Tabuleiro peca) { tab.ColocarPeca(peca, new PosicaoXadrez(coluna, linha).ToPosicao()); _pecas.Add(peca); }
//Parei aqui - Douglas private bool _ExisteInimigo(Posicao pos) { Peca_Tabuleiro p = tabuleiro.peca(pos); return(p != null && p.cor != cor); }
private bool _PodeMover(Posicao pos) { Peca_Tabuleiro p = tabuleiro.peca(pos); return(p == null || p.cor != cor); }