public static void ImprimirTabuleiro(Tabuleiro tab, bool[,] possicoesPossiveis) { ConsoleColor fundoOriginal = Console.BackgroundColor; ConsoleColor fundoAlterado = ConsoleColor.DarkGray; for (int i = 0; i < tab.Linhas; i++) { Console.Write(8 - i + " "); for (int j = 0; j < tab.Colunas; j++) { if (possicoesPossiveis[i, j]) { Console.BackgroundColor = fundoAlterado; } else { Console.BackgroundColor = fundoOriginal; } ImprimirPeca(tab.ObterPeca(i, j)); Console.BackgroundColor = fundoOriginal; } Console.WriteLine(); } Console.WriteLine(" A B C D E F G H"); Console.BackgroundColor = fundoOriginal; }
public override bool[,] MovimentosPossiveis() { bool[,] movimentos = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas]; Posicao aux = new Posicao(0, 0); aux.DefinirPosicao(Posicao.Linha - 1, Posicao.Coluna - 1); while (Tabuleiro.VerificarPosicao(aux) && PodeMover(aux)) { movimentos[aux.Linha, aux.Coluna] = true; if (Tabuleiro.ObterPeca(aux) != null && Tabuleiro.ObterPeca(aux).Cor != this.Cor) { break; } aux.Linha -= 1; aux.Coluna -= 1; } aux.DefinirPosicao(Posicao.Linha + 1, Posicao.Coluna + 1); while (Tabuleiro.VerificarPosicao(aux) && PodeMover(aux)) { movimentos[aux.Linha, aux.Coluna] = true; if (Tabuleiro.ObterPeca(aux) != null && Tabuleiro.ObterPeca(aux).Cor != this.Cor) { break; } aux.Linha += 1; aux.Coluna += 1; } aux.DefinirPosicao(Posicao.Linha - 1, Posicao.Coluna + 1); while (Tabuleiro.VerificarPosicao(aux) && PodeMover(aux)) { movimentos[aux.Linha, aux.Coluna] = true; if (Tabuleiro.ObterPeca(aux) != null && Tabuleiro.ObterPeca(aux).Cor != this.Cor) { break; } aux.Coluna += 1; aux.Linha -= 1; } aux.DefinirPosicao(Posicao.Linha + 1, Posicao.Coluna - 1); while (Tabuleiro.VerificarPosicao(aux) && PodeMover(aux)) { movimentos[aux.Linha, aux.Coluna] = true; if (Tabuleiro.ObterPeca(aux) != null && Tabuleiro.ObterPeca(aux).Cor != this.Cor) { break; } aux.Coluna -= 1; aux.Linha += 1; } return(movimentos); }
public void ValidarDestino(Posicao origem, Posicao destino) { if (!Tabuleiro.VerificarPosicao(destino)) { throw new TabuleiroException("A POSIÇÃO INFORMADA É INVÁLIDA!"); } if (!Tabuleiro.ObterPeca(origem).MovimentoPossivel(destino)) { throw new TabuleiroException("A PEÇA SELECIONADA NÂO PODE MOVER PARA ESSA POSIÇÃO!"); } }
public static void ImprimirTabuleiro(Tabuleiro tab) { for (int i = 0; i < tab.Linhas; i++) { Console.Write(8 - i + " "); for (int j = 0; j < tab.Colunas; j++) { ImprimirPeca(tab.ObterPeca(i, j)); } Console.WriteLine(); } Console.WriteLine(" A B C D E F G H"); }
public void ValidarOrigem(Posicao posicao) { if (!Tabuleiro.VerificarPosicao(posicao)) { throw new TabuleiroException("A POSIÇÃO INFORMADA É INVÁLIDA!"); } if (Tabuleiro.ExistePeca(posicao)) { throw new TabuleiroException("NÃO EXISTEM PEÇAS NA POSIÇÃO INFORMADA!"); } if (Tabuleiro.ObterPeca(posicao).Cor != JogadorAtual) { throw new TabuleiroException("A PEÇA ESCOLHIDA É DE OUTRO JOGADOR!"); } if (!Tabuleiro.ObterPeca(posicao).ExisteMovimentoPossivel()) { throw new TabuleiroException("A PEÇA ESCOLHIDA NÃO POSSUI MOVIMENTOS DISPONÍVEIS!"); } }
public void NovaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = ExecutarMovimento(origem, destino); if (EstaEmXeque()) { DesfazerMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("UM JOGADOR NÃO PODE SE COLOCAR EM XEQUE!"); } Peca peca = Tabuleiro.ObterPeca(destino); Temporizar(); AlteraJogador(); if (EstaXequeMate()) { throw new XequeMateException(); } else { IncrementaTurno(); } }
public void NovaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = ExecutarMovimento(origem, destino); if (EstaEmXeque()) { DesfazerMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("UM JOGADOR NÃO PODE SE COLOCAR EM XEQUE!"); } Peca peca = Tabuleiro.ObterPeca(destino); //Teste Jogada Especial "Promoção" (trocar peão por dama se chegar ao outro lado do tabuleiro) if (peca is Peao) { if ((peca.Cor == Cor.Azul && destino.Linha == 7) || (peca.Cor == Cor.Vermelho && destino.Linha == 0)) { peca = Tabuleiro.RemoverPeca(destino); _pecasNaPartida.Remove(peca); Peca dama = new Dama(peca.Cor, Tabuleiro); Tabuleiro.ColocarPeca(dama, destino); _pecasNaPartida.Add(dama); Tela.JogadaEspecialPromocao(); } } AlteraJogador(); if (EstaXequeMate()) { Terminada = true; } else { IncrementaTurno(); } }
private bool Livre(Posicao posicao) { return(Tabuleiro.ObterPeca(posicao) == null); }
private bool ExisteInimigo(Posicao posicao) { Peca peca = Tabuleiro.ObterPeca(posicao); return(peca != null && peca.Cor != Cor); }
private bool PodeMover(Posicao posicao) { Peca peca = Tabuleiro.ObterPeca(posicao); return(peca == null || peca.Cor != this.Cor); }