public override bool[,] MovimentosPossivels() { bool[,] mat = new bool[tab.Linhas, tab.Colunas]; Posicao pos = new Posicao(0, 0); //Acima pos.DefiniValores(posicao.Linha - 1, posicao.Coluna); while (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; if (tab.peca(pos) != null && tab.peca(pos).cor != cor) { break; } pos.Linha -= 1; } //Abaixo pos.DefiniValores(posicao.Linha + 1, posicao.Coluna); while (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; if (tab.peca(pos) != null && tab.peca(pos).cor != cor) { break; } pos.Linha += 1; } //Direita pos.DefiniValores(posicao.Linha, posicao.Coluna + 1); while (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; if (tab.peca(pos) != null && tab.peca(pos).cor != cor) { break; } pos.Coluna += 1; } //Esquerda pos.DefiniValores(posicao.Linha, posicao.Coluna - 1); while (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; if (tab.peca(pos) != null && tab.peca(pos).cor != cor) { break; } pos.Coluna -= 1; } return(mat); }
public override bool[,] MovimentosPossivels() { bool[,] mat = new bool[tab.Linhas, tab.Colunas]; Posicao pos = new Posicao(0, 0); pos.DefiniValores(posicao.Linha - 1, posicao.Coluna - 2); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.DefiniValores(posicao.Linha - 2, posicao.Coluna - 1); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.DefiniValores(posicao.Linha - 2, posicao.Coluna + 1); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.DefiniValores(posicao.Linha - 1, posicao.Coluna + 2); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.DefiniValores(posicao.Linha + 1, posicao.Coluna + 2); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.DefiniValores(posicao.Linha + 2, posicao.Coluna + 1); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.DefiniValores(posicao.Linha + 2, posicao.Coluna - 1); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.DefiniValores(posicao.Linha + 1, posicao.Coluna - 2); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } return(mat); }
public override bool[,] MovimentosPossivels() { bool[,] mat = new bool[tab.Linhas, tab.Colunas]; Posicao pos = new Posicao(0, 0); if (cor == Cor.Branca) { pos.DefiniValores(posicao.Linha - 1, posicao.Coluna); if (tab.PosicaoValida(pos) && Livre(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.DefiniValores(posicao.Linha - 2, posicao.Coluna); if (tab.PosicaoValida(pos) && Livre(pos) && QtdMovimentos == 0) { mat[pos.Linha, pos.Coluna] = true; } pos.DefiniValores(posicao.Linha - 1, posicao.Coluna - 1); if (tab.PosicaoValida(pos) && ExisteInimigo(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.DefiniValores(posicao.Linha - 1, posicao.Coluna + 1); if (tab.PosicaoValida(pos) && ExisteInimigo(pos)) { mat[pos.Linha, pos.Coluna] = true; } //#Combo En Passant if (posicao.Linha == 3) { Posicao esquerda = new Posicao(posicao.Linha, posicao.Coluna - 1); if (tab.PosicaoValida(esquerda) && ExisteInimigo(esquerda) && tab.peca(esquerda) == partida.vulneravelEnPassant) { mat[esquerda.Linha - 1, esquerda.Coluna] = true; } Posicao direita = new Posicao(posicao.Linha, posicao.Coluna + 1); if (tab.PosicaoValida(direita) && ExisteInimigo(direita) && tab.peca(direita) == partida.vulneravelEnPassant) { mat[direita.Linha - 1, direita.Coluna] = true; } } } else { pos.DefiniValores(posicao.Linha + 1, posicao.Coluna); if (tab.PosicaoValida(pos) && Livre(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.DefiniValores(posicao.Linha + 2, posicao.Coluna); if (tab.PosicaoValida(pos) && Livre(pos) && QtdMovimentos == 0) { mat[pos.Linha, pos.Coluna] = true; } pos.DefiniValores(posicao.Linha + 1, posicao.Coluna - 1); if (tab.PosicaoValida(pos) && ExisteInimigo(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.DefiniValores(posicao.Linha + 1, posicao.Coluna + 1); if (tab.PosicaoValida(pos) && ExisteInimigo(pos)) { mat[pos.Linha, pos.Coluna] = true; } //#Combo En Passant if (posicao.Linha == 4) { Posicao esquerda = new Posicao(posicao.Linha, posicao.Coluna - 1); if (tab.PosicaoValida(esquerda) && ExisteInimigo(esquerda) && tab.peca(esquerda) == partida.vulneravelEnPassant) { mat[esquerda.Linha + 1, esquerda.Coluna] = true; } Posicao direita = new Posicao(posicao.Linha, posicao.Coluna + 1); if (tab.PosicaoValida(direita) && ExisteInimigo(direita) && tab.peca(direita) == partida.vulneravelEnPassant) { mat[direita.Linha + 1, direita.Coluna] = true; } } } return(mat); }
public override bool[,] MovimentosPossivels() { bool[,] mat = new bool[tab.Linhas, tab.Colunas]; Posicao pos = new Posicao(0, 0); //Acima pos.DefiniValores(posicao.Linha - 1, posicao.Coluna); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //ne pos.DefiniValores(posicao.Linha - 1, posicao.Coluna + 1); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //Direita pos.DefiniValores(posicao.Linha, posicao.Coluna + 1); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //SE pos.DefiniValores(posicao.Linha + 1, posicao.Coluna + 1); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //Abaixo pos.DefiniValores(posicao.Linha + 1, posicao.Coluna); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //SW pos.DefiniValores(posicao.Linha + 1, posicao.Coluna - 1); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //Esquerda pos.DefiniValores(posicao.Linha, posicao.Coluna - 1); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //NW pos.DefiniValores(posicao.Linha - 1, posicao.Coluna - 1); if (tab.PosicaoValida(pos) && PodeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //#Combo Roque if (QtdMovimentos == 0 && !partida.Xeque) { //roque pequeno Posicao posTorre = new Posicao(posicao.Linha, posicao.Coluna + 3); if (testeRoqueTorre(posTorre)) { Posicao p1 = new Posicao(posicao.Linha, posicao.Coluna + 1); Posicao p2 = new Posicao(posicao.Linha, posicao.Coluna + 2); if (tab.peca(p1) == null && tab.peca(p2) == null) { mat[posicao.Linha, posicao.Coluna + 2] = true; } } //roque Grande Posicao posTorre2 = new Posicao(posicao.Linha, posicao.Coluna - 4); if (testeRoqueTorre(posTorre2)) { 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 (tab.peca(p1) == null && tab.peca(p2) == null && tab.peca(p3) == null) { mat[posicao.Linha, posicao.Coluna - 2] = true; } } } return(mat); }