public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao posicao = new Posicao(0, 0); //n posicao.mudarValores(pos.linha - 1, pos.coluna); while (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; if (tab.existePeca(posicao)) { break; } posicao.linha--; } //o posicao.mudarValores(pos.linha, pos.coluna + 1); while (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; if (tab.existePeca(posicao)) { break; } posicao.coluna++; } //s posicao.mudarValores(pos.linha + 1, pos.coluna); while (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; if (tab.existePeca(posicao)) { break; } posicao.linha++; } //l posicao.mudarValores(pos.linha, pos.coluna - 1); while (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; if (tab.existePeca(posicao)) { break; } posicao.coluna--; } return(mat); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao posicao = new Posicao(0, 0); //cima posicao.mudarValores(pos.linha - 2, pos.coluna - 1); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } posicao.mudarValores(pos.linha - 2, pos.coluna + 1); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } //direita posicao.mudarValores(pos.linha - 1, pos.coluna + 2); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } //baixo posicao.mudarValores(pos.linha + 2, pos.coluna - 1); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } posicao.mudarValores(pos.linha + 2, pos.coluna + 1); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } //esquerda posicao.mudarValores(pos.linha - 1, pos.coluna - 2); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } posicao.mudarValores(pos.linha + 1, pos.coluna - 2); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } return(mat); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao posicao = new Posicao(0, 0); //brancos if (cor == Cor.Branca) { posicao.mudarValores(pos.linha - 1, pos.coluna); if (tab.posicaoValida(posicao) && livre(posicao)) { mat[posicao.linha, posicao.coluna] = true; } posicao.mudarValores(pos.linha - 2, pos.coluna); if (tab.posicaoValida(posicao) && livre(posicao) && qteMovimentos == 0) { mat[posicao.linha, posicao.coluna] = true; } posicao.mudarValores(pos.linha - 1, pos.coluna - 1); if (tab.posicaoValida(posicao) && existeInimigo(posicao)) { mat[posicao.linha, posicao.coluna] = true; } posicao.mudarValores(pos.linha - 1, pos.coluna + 1); if (tab.posicaoValida(posicao) && existeInimigo(posicao)) { mat[posicao.linha, posicao.coluna] = true; } //#jogada especial enpassant if (pos.linha == 3) { Posicao esquerda = new Posicao(pos.linha, pos.coluna - 1); if (tab.posicaoValida(esquerda) && existeInimigo(esquerda) && tab.peca(esquerda) == partida.vulneravelEnPassant) { mat[esquerda.linha - 1, esquerda.coluna] = true; } Posicao direita = new Posicao(pos.linha, pos.coluna + 1); if (tab.posicaoValida(direita) && existeInimigo(direita) && tab.peca(direita) == partida.vulneravelEnPassant) { mat[direita.linha - 1, direita.coluna] = true; } } } else { //pretos posicao.mudarValores(pos.linha + 1, pos.coluna); if (tab.posicaoValida(posicao) && livre(posicao)) { mat[posicao.linha, posicao.coluna] = true; } posicao.mudarValores(pos.linha + 2, pos.coluna); if (tab.posicaoValida(posicao) && livre(posicao) && qteMovimentos == 0) { mat[posicao.linha, posicao.coluna] = true; } posicao.mudarValores(pos.linha + 1, pos.coluna - 1); if (tab.posicaoValida(posicao) && existeInimigo(posicao)) { mat[posicao.linha, posicao.coluna] = true; } posicao.mudarValores(pos.linha + 1, pos.coluna + 1); if (tab.posicaoValida(posicao) && existeInimigo(posicao)) { mat[posicao.linha, posicao.coluna] = true; } //#jogada especial enpassant if (pos.linha == 4) { Posicao esquerda = new Posicao(pos.linha, pos.coluna - 1); if (tab.posicaoValida(esquerda) && existeInimigo(esquerda) && tab.peca(esquerda) == partida.vulneravelEnPassant) { mat[esquerda.linha + 1, esquerda.coluna] = true; } Posicao direita = new Posicao(pos.linha, pos.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[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao posicao = new Posicao(0, 0); //n posicao.mudarValores(pos.linha - 1, pos.coluna); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } //ne posicao.mudarValores(pos.linha - 1, pos.coluna + 1); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } //o posicao.mudarValores(pos.linha, pos.coluna + 1); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } //se posicao.mudarValores(pos.linha + 1, pos.coluna + 1); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } //s posicao.mudarValores(pos.linha + 1, pos.coluna); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } //so posicao.mudarValores(pos.linha + 1, pos.coluna - 1); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } //l posicao.mudarValores(pos.linha, pos.coluna - 1); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } //no posicao.mudarValores(pos.linha - 1, pos.coluna - 1); if (tab.posicaoValida(posicao) && podeMover(posicao)) { mat[posicao.linha, posicao.coluna] = true; } //#jogadaespecial roque if (qteMovimentos == 0 && !partida.xeque) { //#jogadaespecial roque pequeno Posicao[] posicoesDireita = new Posicao[3]; for (int i = 0; i < 3; i++) { posicoesDireita[i] = new Posicao(pos.linha, pos.coluna + 1 + i); } if (testeTorreParaRoque(posicoesDireita[2])) //torre { if (tab.peca(posicoesDireita[0]) == null && tab.peca(posicoesDireita[1]) == null) { mat[posicoesDireita[1].linha, posicoesDireita[1].coluna] = true; } } //#jogadaespecial roque grande Posicao[] posicoesEsquerda = new Posicao[4]; for (int i = 0; i < 4; i++) { posicoesEsquerda[i] = new Posicao(pos.linha, pos.coluna - 1 - i); } if (testeTorreParaRoque(posicoesEsquerda[3])) //torre { if (tab.peca(posicoesEsquerda[0]) == null && tab.peca(posicoesEsquerda[1]) == null && tab.peca(posicoesEsquerda[2]) == null) { mat[posicoesEsquerda[1].linha, posicoesEsquerda[1].coluna] = true; } } } return(mat); }