public override bool[,] MovimentosPossiveis() { bool[,] movimentos = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas]; Posicao p = new Posicao(Posicao.Linha, Posicao.Coluna); //ACIMA p.SetPosicao(p.Linha - 1, p.Coluna); while (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; if (Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor != this.Cor) { break; } p.Linha -= 1; } //ABAIXO p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha + 1, p.Coluna); while (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; if (Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor != this.Cor) { break; } p.Linha += 1; } //DIREITA p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha, p.Coluna + 1); while (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; if (Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor != this.Cor) { break; } p.Coluna += 1; } //ESQUERDA p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha, p.Coluna - 1); while (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; if (Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor != this.Cor) { break; } p.Coluna -= 1; } return(movimentos); }
public override bool[,] MovimentosPossiveis() { bool[,] movimentos = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas]; Posicao inicial = Posicao; Posicao p = new Posicao(Posicao.Linha, Posicao.Coluna); //N p.SetPosicao(p.Linha - 1, p.Coluna); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } ////NE p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha - 1, p.Coluna + 1); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //L p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha, p.Coluna + 1); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //SE p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha + 1, p.Coluna + 1); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //S p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha + 1, p.Coluna); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //SO p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha + 1, p.Coluna - 1); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //O p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha, p.Coluna - 1); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //NO p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha - 1, p.Coluna - 1); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //ROQUE PEQUENO if (QtdeMovimentos == 0 && !partida.JogadorEmXeque) { Posicao T1 = new Posicao(this.Posicao.Linha, this.Posicao.Coluna + 3); if (Tabuleiro.PosicaoValida(T1) && TorreElegivelRoque(T1)) { Posicao P1 = new Posicao(Posicao.Linha, Posicao.Coluna + 1); Posicao P2 = new Posicao(Posicao.Linha, Posicao.Coluna + 2); if (Tabuleiro.PosicaoValida(P1) && Tabuleiro.PosicaoValida(P2)) { if (Tabuleiro.Peca(P1) == null && Tabuleiro.Peca(P2) == null) { movimentos[Posicao.Linha, Posicao.Coluna + 2] = true; } } } } ////ROQUE GRANDE if (QtdeMovimentos == 0 && !partida.JogadorEmXeque) { Posicao T2 = new Posicao(Posicao.Linha, Posicao.Coluna - 4); if (Tabuleiro.PosicaoValida(T2) && TorreElegivelRoque(T2)) { Posicao P1 = new Posicao(Posicao.Linha, Posicao.Coluna - 1); Posicao P2 = new Posicao(Posicao.Linha, Posicao.Coluna - 2); Posicao P3 = new Posicao(Posicao.Linha, Posicao.Coluna - 3); if (Tabuleiro.PosicaoValida(P1) && Tabuleiro.PosicaoValida(P2) && Tabuleiro.PosicaoValida(P3)) { if (Tabuleiro.Peca(P1) == null && Tabuleiro.Peca(P2) == null && Tabuleiro.Peca(P3) == null) { movimentos[Posicao.Linha, Posicao.Coluna - 2] = true; } } } } return(movimentos); }
public override bool[,] MovimentosPossiveis() { bool[,] movimentos = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas]; Posicao p = new Posicao(Posicao.Linha, Posicao.Coluna); //ACIMA-DIREITA p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(Posicao.Linha - 2, Posicao.Coluna + 1); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //ACIMA-ESQUERDA p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(Posicao.Linha - 2, Posicao.Coluna - 1); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //ABAIXO-DIREITA p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(Posicao.Linha + 2, Posicao.Coluna + 1); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //ABAIXO-ESQUERDA p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(Posicao.Linha + 2, Posicao.Coluna - 1); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //DIREITA-ACIMA p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(Posicao.Linha - 1, Posicao.Coluna - 2); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //DIREITA-ABAIXO p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(Posicao.Linha + 1, Posicao.Coluna - 2); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //ESQUERDA-ACIMA p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(Posicao.Linha - 1, Posicao.Coluna + 2); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //ESQUERDA-ABAIXO p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(Posicao.Linha + 1, Posicao.Coluna + 2); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } return(movimentos); }
public override bool[,] MovimentosPossiveis() { bool[,] movimentos = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas]; Posicao p = new Posicao(Posicao.Linha, Posicao.Coluna); //ACIMA(PEÇAS BRANCAS) if (Cor == Cor.Branco) { p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha - 1, p.Coluna); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; p.SetPosicao(p.Linha - 1, p.Coluna); if (Tabuleiro.PosicaoValida(p) && PodeMover(p) && QtdeMovimentos == 0) { movimentos[p.Linha, p.Coluna] = true; } } p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha - 1, p.Coluna - 1); if (Tabuleiro.PosicaoValida(p) && Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor == Cor.Preto && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha - 1, p.Coluna + 1); if (Tabuleiro.PosicaoValida(p) && Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor == Cor.Preto && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //En Passant Branca p.SetPosicao(Posicao.Linha, Posicao.Coluna); if (p.Linha == 3) { Posicao esquerda = new Posicao(p.Linha, p.Coluna - 1); if (Tabuleiro.PosicaoValida(esquerda) && Tabuleiro.ExistePeca(esquerda) && Tabuleiro.Peca(esquerda).Cor == Cor.Preto && Tabuleiro.Peca(esquerda) == partida.EnPassant) { movimentos[esquerda.Linha - 1, esquerda.Coluna] = true; } Posicao direita = new Posicao(p.Linha, p.Coluna + 1); if (Tabuleiro.PosicaoValida(direita) && Tabuleiro.ExistePeca(direita) && Tabuleiro.Peca(direita).Cor == Cor.Preto && Tabuleiro.Peca(direita) == partida.EnPassant) { movimentos[direita.Linha - 1, direita.Coluna] = true; } } } //ABAIXO(PEÇAS PRETAS) else if (Cor == Cor.Preto) { p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha + 1, p.Coluna); if (Tabuleiro.PosicaoValida(p) && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; p.SetPosicao(p.Linha + 1, p.Coluna); if (Tabuleiro.PosicaoValida(p) && PodeMover(p) && QtdeMovimentos == 0) { movimentos[p.Linha, p.Coluna] = true; } } p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha + 1, p.Coluna - 1); if (Tabuleiro.PosicaoValida(p) && Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor == Cor.Branco && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } p.SetPosicao(Posicao.Linha, Posicao.Coluna); p.SetPosicao(p.Linha + 1, p.Coluna + 1); if (Tabuleiro.PosicaoValida(p) && Tabuleiro.ExistePeca(p) && Tabuleiro.Peca(p).Cor == Cor.Branco && PodeMover(p)) { movimentos[p.Linha, p.Coluna] = true; } //En Passant Preta p.SetPosicao(Posicao.Linha, Posicao.Coluna); if (p.Linha == 4) { Posicao esquerda = new Posicao(p.Linha, p.Coluna - 1); if (Tabuleiro.PosicaoValida(esquerda) && Tabuleiro.ExistePeca(esquerda) && Tabuleiro.Peca(esquerda).Cor == Cor.Branco && Tabuleiro.Peca(esquerda) == partida.EnPassant) { movimentos[esquerda.Linha + 1, esquerda.Coluna] = true; } Posicao direita = new Posicao(p.Linha, p.Coluna + 1); if (Tabuleiro.PosicaoValida(direita) && Tabuleiro.ExistePeca(direita) && Tabuleiro.Peca(direita).Cor == Cor.Branco && Tabuleiro.Peca(direita) == partida.EnPassant) { movimentos[direita.Linha + 1, direita.Coluna] = true; } } } return(movimentos); }