public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[Tab.NumLinhas, Tab.NumColunas]; Posicao pos = new Posicao(0, 0); //acima pos.definirValores(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 = pos.Linha - 1; } //direira pos.definirValores(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 = pos.Coluna + 1; } //abaixo pos.definirValores(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 = pos.Linha + 1; } //esquerda pos.definirValores(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 = pos.Coluna - 1; } //Noroeste pos.definirValores(Posicao.Linha - 1, 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.definirValores(pos.Linha - 1, pos.Coluna - 1); } //Nordeste pos.definirValores(Posicao.Linha - 1, 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.definirValores(pos.Linha - 1, pos.Coluna + 1); } //Sudeste pos.definirValores(Posicao.Linha + 1, 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.definirValores(pos.Linha + 1, pos.Coluna + 1); } //Sudoste pos.definirValores(Posicao.Linha + 1, 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.definirValores(pos.Linha + 1, pos.Coluna - 1); } return(mat); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao pos = new Posicao(0, 0); //ariba pos.definirValores(posicao.linha - 1, posicao.coluna); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //ne pos.definirValores(posicao.linha - 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //derecha pos.definirValores(posicao.linha, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //sudeste pos.definirValores(posicao.linha + 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //tche pos.definirValores(posicao.linha + 1, posicao.coluna); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //sudoeste pos.definirValores(posicao.linha + 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //west pos.definirValores(posicao.linha - 1, posicao.coluna); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //nw pos.definirValores(posicao.linha - 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //#special gamaplays roque if (qtemov == 0 && !partida.xeque) { // liro roque Posicao posT1 = new Posicao(posicao.linha, posicao.coluna + 3); if (testeTorreParaRoque(posT1)) { 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; } } // big roque Posicao posT2 = new Posicao(posicao.linha, posicao.coluna - 4); if (testeTorreParaRoque(posT2)) { 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); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao pos = new Posicao(0, 0); if (cor == Cor.Branca) { pos.definirValores(posicao.linha - 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos) && existeInimigo(pos)) { mat[pos.linha - 1, pos.coluna + 1] = true; pos.definirValores(posicao.linha - 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos) && existeInimigo(pos)) { mat[pos.linha - 1, pos.coluna - 1] = true; } return(mat); } else if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos) && existeInimigo(pos)) { mat[pos.linha - 1, pos.coluna - 1] = true; pos.definirValores(posicao.linha - 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos) && existeInimigo(pos)) { mat[pos.linha - 1, pos.coluna + 1] = true; pos.definirValores(posicao.linha - 1, posicao.coluna - 1); } return(mat); } else if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } } else { pos.definirValores(posicao.linha + 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos) && existeInimigo(pos)) { mat[pos.linha + 1, pos.coluna + 1] = true; } if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos) && existeInimigo(pos)) { mat[pos.linha + 1, pos.coluna - 1] = true; } if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } } return(mat); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[Tab.NumLinhas, Tab.NumColunas]; Posicao pos = new Posicao(0, 0); //acima pos.definirValores(Posicao.Linha - 1, Posicao.Coluna); if (Tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //nordeste pos.definirValores(Posicao.Linha - 1, Posicao.Coluna + 1); if (Tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //direita pos.definirValores(Posicao.Linha, Posicao.Coluna + 1); if (Tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //sudeste pos.definirValores(Posicao.Linha + 1, Posicao.Coluna + 1); if (Tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //abaixo pos.definirValores(Posicao.Linha + 1, Posicao.Coluna); if (Tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //sudoeste pos.definirValores(Posicao.Linha + 1, Posicao.Coluna - 1); if (Tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //esquerda pos.definirValores(Posicao.Linha, Posicao.Coluna - 1); if (Tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //noroeste pos.definirValores(Posicao.Linha - 1, Posicao.Coluna - 1); if (Tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } //roque if (QteMovimentos == 0 && !Partida.Xeque) { //roque Pequeno Posicao posT1 = new Posicao(Posicao.Linha, Posicao.Coluna + 3); if (testeTorreParaRoque(posT1)) { 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 posT2 = new Posicao(Posicao.Linha, Posicao.Coluna - 4); if (testeTorreParaRoque(posT2)) { 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); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao pos = new Posicao(0, 0); // frente direita pos.definirValores(posicao.Linha - 2, posicao.Coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } // frente direita pos.definirValores(posicao.Linha - 1, posicao.Coluna + 2); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } // frente esquerda pos.definirValores(posicao.Linha - 2, posicao.Coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } // frente esquerda pos.definirValores(posicao.Linha - 1, posicao.Coluna - 2); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } // tras direita pos.definirValores(posicao.Linha + 2, posicao.Coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } // tras direita pos.definirValores(posicao.Linha + 1, posicao.Coluna + 2); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } // tras esquerda pos.definirValores(posicao.Linha + 2, posicao.Coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } // tras esquerda pos.definirValores(posicao.Linha + 1, posicao.Coluna - 2); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; } return(mat); }
public override bool[,] movimentosPosiveis() { bool[,] mat = new bool[tab.Linhas, tab.Colunas]; Posicao pos = new Posicao(0, 0); //POSSÍVEIS MOVIMENTOS DA TORRE //ESQUERDA pos.definirValores(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.definirValores(pos.Linha, pos.Coluna - 1); } //DIREITA pos.definirValores(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.definirValores(pos.Linha, pos.Coluna + 1); } //ACIMA pos.definirValores(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.definirValores(pos.Linha - 1, pos.Coluna); } //ABAIXO pos.definirValores(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.definirValores(pos.Linha + 1, pos.Coluna); } //NOROESTE pos.definirValores(posicao.Linha - 1, 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.definirValores(pos.Linha - 1, pos.Coluna - 1); } //NORDESTE pos.definirValores(posicao.Linha - 1, 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.definirValores(pos.Linha - 1, pos.Coluna + 1); } //SUDESTE pos.definirValores(posicao.Linha + 1, 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.definirValores(pos.Linha + 1, pos.Coluna + 1); } //SULDOESTE pos.definirValores(posicao.Linha + 1, 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.definirValores(pos.Linha + 1, pos.Coluna - 1); } return(mat); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao pos = new Posicao(0, 0); pos.definirValores(posicao.linha - 1, 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.linha = pos.linha - 1; pos.coluna = pos.coluna - 1; } pos.definirValores(posicao.linha - 1, 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.linha = pos.linha - 1; pos.coluna = pos.coluna + 1; } pos.definirValores(posicao.linha + 1, 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.linha = pos.linha + 1; pos.coluna = pos.coluna - 1; } pos.definirValores(posicao.linha + 1, 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.linha = pos.linha + 1; pos.coluna = pos.coluna + 1; } pos.definirValores(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 = pos.linha - 1; } pos.definirValores(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 = pos.linha + 1; } pos.definirValores(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 = pos.coluna - 1; } pos.definirValores(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 = pos.coluna + 1; } return(mat); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[Tabuleiro.Linhas, Tabuleiro.Colunas]; Posicao pos = new Posicao(0, 0); if (Cor == Cor.Branca) { pos.definirValores(Posicao.Linha - 1, Posicao.Coluna); if (Tabuleiro.posicaoValida(pos) && livre(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.definirValores(Posicao.Linha - 2, Posicao.Coluna); Posicao p2 = new Posicao(Posicao.Linha - 1, Posicao.Coluna); if (Tabuleiro.posicaoValida(p2) && livre(p2) && Tabuleiro.posicaoValida(pos) && livre(pos) && QtdeMovimentos == 0) { mat[pos.Linha, pos.Coluna] = true; } pos.definirValores(Posicao.Linha - 1, Posicao.Coluna - 1); if (Tabuleiro.posicaoValida(pos) && existeInimigo(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.definirValores(Posicao.Linha - 1, Posicao.Coluna + 1); if (Tabuleiro.posicaoValida(pos) && existeInimigo(pos)) { mat[pos.Linha, pos.Coluna] = true; } // #jogadaespecial en passant if (Posicao.Linha == 3) { Posicao esquerda = new Posicao(Posicao.Linha, Posicao.Coluna - 1); if (Tabuleiro.posicaoValida(esquerda) && existeInimigo(esquerda) && Tabuleiro.peca(esquerda) == partida.vulneravelEnPassant) { mat[esquerda.Linha - 1, esquerda.Coluna] = true; } Posicao direita = new Posicao(Posicao.Linha, Posicao.Coluna + 1); if (Tabuleiro.posicaoValida(direita) && existeInimigo(direita) && Tabuleiro.peca(direita) == partida.vulneravelEnPassant) { mat[direita.Linha - 1, direita.Coluna] = true; } } } else { pos.definirValores(Posicao.Linha + 1, Posicao.Coluna); if (Tabuleiro.posicaoValida(pos) && livre(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.definirValores(Posicao.Linha + 2, Posicao.Coluna); Posicao p2 = new Posicao(Posicao.Linha + 1, Posicao.Coluna); if (Tabuleiro.posicaoValida(p2) && livre(p2) && Tabuleiro.posicaoValida(pos) && livre(pos) && QtdeMovimentos == 0) { mat[pos.Linha, pos.Coluna] = true; } pos.definirValores(Posicao.Linha + 1, Posicao.Coluna - 1); if (Tabuleiro.posicaoValida(pos) && existeInimigo(pos)) { mat[pos.Linha, pos.Coluna] = true; } pos.definirValores(Posicao.Linha + 1, Posicao.Coluna + 1); if (Tabuleiro.posicaoValida(pos) && existeInimigo(pos)) { mat[pos.Linha, pos.Coluna] = true; } // #jogadaespecial en passant if (Posicao.Linha == 4) { Posicao esquerda = new Posicao(Posicao.Linha, Posicao.Coluna - 1); if (Tabuleiro.posicaoValida(esquerda) && existeInimigo(esquerda) && Tabuleiro.peca(esquerda) == partida.vulneravelEnPassant) { mat[esquerda.Linha + 1, esquerda.Coluna] = true; } Posicao direita = new Posicao(Posicao.Linha, Posicao.Coluna + 1); if (Tabuleiro.posicaoValida(direita) && existeInimigo(direita) && Tabuleiro.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 pos = new Posicao(0, 0); //ACIMA pos.definirValores(posicao.linha - 1, posicao.coluna); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //NE pos.definirValores(posicao.linha - 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } // DIREITA pos.definirValores(posicao.linha, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //SE pos.definirValores(posicao.linha + 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //ABAIXO pos.definirValores(posicao.linha + 1, posicao.coluna); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //SO pos.definirValores(posicao.linha + 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //ESQUERDA pos.definirValores(posicao.linha, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //NO pos.definirValores(posicao.linha - 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } // #JOGADA ESPECIAL / ROQUE if (qteMovimentos == 0 && !partida.xeque) { //JOGADA ESPECIAL ROQUE PEQUENO Posicao posT1 = new Posicao(posicao.linha, posicao.coluna + 3); if (testeTorrerParaRoque(posT1)) { 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; } } //JOGADA ESPECIAL ROQUE GRANDE Posicao posT2 = new Posicao(posicao.linha, posicao.coluna - 4); if (testeTorrerParaRoque(posT2)) { 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); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tabuleiro.Linhas, tabuleiro.Colunas]; Posicao pos = new Posicao(0, 0); //Acima pos.definirValores(posicao.Linha - 1, posicao.Coluna); while (tabuleiro.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != cor) { break; } pos.Linha -= 1; } //Abaixo pos.definirValores(posicao.Linha + 1, posicao.Coluna); while (tabuleiro.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != cor) { break; } pos.Linha += 1; } //Direita pos.definirValores(posicao.Linha, posicao.Coluna + 1); while (tabuleiro.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != cor) { break; } pos.Coluna += 1; } //Esquerda pos.definirValores(posicao.Linha, posicao.Coluna - 1); while (tabuleiro.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != cor) { break; } pos.Coluna -= 1; } //Noroeste(Diagonal superior esquerda) pos.definirValores(posicao.Linha - 1, posicao.Coluna - 1); while (tabuleiro.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != this.cor) { break; } pos.definirValores(pos.Linha - 1, pos.Coluna - 1); } //Nordeste(Diagonal superior direita) pos.definirValores(posicao.Linha - 1, posicao.Coluna + 1); while (tabuleiro.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != this.cor) { break; } pos.definirValores(pos.Linha - 1, pos.Coluna + 1); } //Sudeste(Diagonal inferior esquerda) pos.definirValores(posicao.Linha + 1, posicao.Coluna + 1); while (tabuleiro.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != this.cor) { break; } pos.definirValores(pos.Linha + 1, pos.Coluna + 1); } //Sudoeste(Diagonal inferior direita) pos.definirValores(posicao.Linha + 1, posicao.Coluna - 1); while (tabuleiro.posicaoValida(pos) && podeMover(pos)) { mat[pos.Linha, pos.Coluna] = true; if (tabuleiro.peca(pos) != null && tabuleiro.peca(pos).cor != this.cor) { break; } pos.definirValores(pos.Linha + 1, pos.Coluna - 1); } return(mat); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao pos = new Posicao(0, 0); if (cor == Cor.Branca) { pos.definirValores(posicao.linha - 1, posicao.coluna); if (tab.posicaoValida(pos) && livre(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 2, posicao.coluna); Posicao p2 = new Posicao(posicao.linha - 1, posicao.coluna); if (tab.posicaoValida(p2) && livre(p2) && tab.posicaoValida(pos) && livre(pos) && qteMovimentos == 0) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && existeInimigo(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && existeInimigo(pos)) { mat[pos.linha, pos.coluna] = true; } // En Passant if (posicao.linha == 3) { Posicao W = new Posicao(posicao.linha, posicao.coluna - 1); if (tab.posicaoValida(W) && existeInimigo(W) && tab.peca(W) == partida.vEnPassant) { mat[W.linha - 1, W.coluna] = true; } Posicao E = new Posicao(posicao.linha, posicao.coluna + 1); if (tab.posicaoValida(E) && existeInimigo(E) && tab.peca(E) == partida.vEnPassant) { mat[E.linha - 1, E.coluna] = true; } } } else { pos.definirValores(posicao.linha + 1, posicao.coluna); if (tab.posicaoValida(pos) && livre(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 2, posicao.coluna); Posicao p2 = new Posicao(posicao.linha + 1, posicao.coluna); if (tab.posicaoValida(p2) && livre(p2) && tab.posicaoValida(pos) && livre(pos) && qteMovimentos == 0) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && existeInimigo(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && existeInimigo(pos)) { mat[pos.linha, pos.coluna] = true; } // En Passant if (posicao.linha == 4) { Posicao W = new Posicao(posicao.linha, posicao.coluna - 1); if (tab.posicaoValida(W) && existeInimigo(W) && tab.peca(W) == partida.vEnPassant) { mat[W.linha + 1, W.coluna] = true; } Posicao E = new Posicao(posicao.linha, posicao.coluna + 1); if (tab.posicaoValida(E) && existeInimigo(E) && tab.peca(E) == partida.vEnPassant) { mat[E.linha + 1, E.coluna] = true; } } } return(mat); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao pos = new Posicao(0, 0); pos.definirValores(posicao.linha - 1, posicao.coluna); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 1, posicao.coluna); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } if (qteMovimentos == 0 && !partida.xeque) { Posicao posT1 = new Posicao(posicao.linha, posicao.coluna + 3); if (testeTorreParaRoque(posT1)) { 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; } } Posicao posT2 = new Posicao(posicao.linha, posicao.coluna - 4); if (testeTorreParaRoque(posT1)) { 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); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao pos = new Posicao(0, 0); //Acima pos.definirValores(posicao.linha - 1, posicao.coluna); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //N E pos.definirValores(posicao.linha - 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //Direita pos.definirValores(posicao.linha, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //S E pos.definirValores(posicao.linha + 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //Abaixo pos.definirValores(posicao.linha + 1, posicao.coluna); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //S O pos.definirValores(posicao.linha + 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //Esquerda pos.definirValores(posicao.linha, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //N O pos.definirValores(posicao.linha - 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //#jogadaespecial Roque if (qteMovimentos == 0 && !partida.xeque) { //#jogadaespecial RoquePequeno Posicao posT1 = new Posicao(posicao.linha, posicao.coluna + 3); if (testeTorreParaRoque(posT1)) { 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; } } //#jogadaespecial RoqueGrande Posicao posT2 = new Posicao(posicao.linha, posicao.coluna - 4); if (testeTorreParaRoque(posT2)) { 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); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao pos = new Posicao(0, 0); if (cor == Cor.Branca) { pos.definirValores(posicao.linha - 1, posicao.coluna); if (tab.posicaoValida(pos) && livre(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 2, posicao.coluna); if (tab.posicaoValida(pos) && livre(pos) && qteMovimentos == 0) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && existeInimigo(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && existeInimigo(pos)) { mat[pos.linha, pos.coluna] = true; } // #jogadaespecial 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.definirValores(posicao.linha + 1, posicao.coluna); if (tab.posicaoValida(pos) && livre(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 2, posicao.coluna); if (tab.posicaoValida(pos) && livre(pos) && qteMovimentos == 0) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && existeInimigo(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && existeInimigo(pos)) { mat[pos.linha, pos.coluna] = true; } // #jogadaespecial 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[,] movimentosPossiveis() { bool[,] mat = new bool[tab.Linhas, tab.Colunas]; Posicao pos = new Posicao(0, 0); // acima pos.definirValores(posicao.linha - 1, posicao.coluna); if (TestesTabuleiro.PosicaoValida(pos, tab) && PodeMover(pos)) { mat[pos.linha, pos.coluna] = true; } // ne pos.definirValores(posicao.linha - 1, posicao.coluna + 1); if (TestesTabuleiro.PosicaoValida(pos, tab) && PodeMover(pos)) { mat[pos.linha, pos.coluna] = true; } // direita pos.definirValores(posicao.linha, posicao.coluna + 1); if (TestesTabuleiro.PosicaoValida(pos, tab) && PodeMover(pos)) { mat[pos.linha, pos.coluna] = true; } // se pos.definirValores(posicao.linha + 1, posicao.coluna + 1); if (TestesTabuleiro.PosicaoValida(pos, tab) && PodeMover(pos)) { mat[pos.linha, pos.coluna] = true; } // abaixo pos.definirValores(posicao.linha + 1, posicao.coluna); if (TestesTabuleiro.PosicaoValida(pos, tab) && PodeMover(pos)) { mat[pos.linha, pos.coluna] = true; } // so pos.definirValores(posicao.linha + 1, posicao.coluna - 1); if (TestesTabuleiro.PosicaoValida(pos, tab) && PodeMover(pos)) { mat[pos.linha, pos.coluna] = true; } // esquerda pos.definirValores(posicao.linha, posicao.coluna - 1); if (TestesTabuleiro.PosicaoValida(pos, tab) && PodeMover(pos)) { mat[pos.linha, pos.coluna] = true; } // no pos.definirValores(posicao.linha - 1, posicao.coluna - 1); if (TestesTabuleiro.PosicaoValida(pos, tab) && PodeMover(pos)) { mat[pos.linha, pos.coluna] = true; } // #jogadaespecial roque if (qteMovimentos.Movimento == 0 && !_partidaDeXadrez.Xeque) { // #jogadaespecial roque pequeno Posicao posT1 = new Posicao(posicao.linha, posicao.coluna + 3); if (TesteTorreParaRoque(posT1)) { 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; } } // #jogadaespecial roque grande Posicao posT2 = new Posicao(posicao.linha, posicao.coluna - 4); if (TesteTorreParaRoque(posT2)) { 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); }
public override bool[,] MovimentosPossieis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao pos = new Posicao(0, 0); if (cor == Cor.Branca) // peao branco só anda para o norte { pos.definirValores(posicao.linha - 1, posicao.coluna); if (tab.posicaoValida(pos) && Livre(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 2, posicao.coluna); Posicao p2 = new Posicao(posicao.linha - 1, posicao.coluna); if (tab.posicaoValida(p2) && Livre(p2) && tab.posicaoValida(pos) && Livre(pos) && qteMovimentos == 0) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && ExisteInimigo(pos)) // se existe inimigo nas diagonais logo a frente, ele pode andar para lá { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && ExisteInimigo(pos)) { mat[pos.linha, pos.coluna] = true; } // #jogadaespecial en passant if (posicao.linha == 3) // valido em uma unica coluna em especial { 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 //peao preto só anda para o sul { pos.definirValores(posicao.linha + 1, posicao.coluna); if (tab.posicaoValida(pos) && Livre(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 2, posicao.coluna); Posicao p2 = new Posicao(posicao.linha + 1, posicao.coluna); if (tab.posicaoValida(p2) && Livre(p2) && tab.posicaoValida(pos) && Livre(pos) && qteMovimentos == 0) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && ExisteInimigo(pos)) // se existe inimigo na posicao das diagonais a frente, ele pode mover pra la { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && ExisteInimigo(pos)) { mat[pos.linha, pos.coluna] = true; } } if (posicao.linha == 4) //passant, valido em uma linha especifica { 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[,] movimentosPossiveis() { bool[,] mat = new bool[tab.Linhas, tab.Colunas]; Posicao pos = new Posicao(0, 0); if (cor == Cor.Branco) { pos.definirValores(posicao.linha - 1, posicao.coluna); if (TestesTabuleiro.PosicaoValida(pos, tab) && Livre(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 2, posicao.coluna); Posicao p2 = new Posicao(posicao.linha - 1, posicao.coluna); if (TestesTabuleiro.PosicaoValida(pos, tab) && Livre(p2) && !TestesTabuleiro.ExistePeca(pos, tab) && Livre(pos) && qteMovimentos.Movimento == 0) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 1, posicao.coluna - 1); if (TestesTabuleiro.PosicaoValida(pos, tab) && ExisteInimigo(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 1, posicao.coluna + 1); if (TestesTabuleiro.PosicaoValida(pos, tab) && ExisteInimigo(pos)) { mat[pos.linha, pos.coluna] = true; } // #jogadaespecial en passant if (posicao.linha == 3) { Posicao esquerda = new Posicao(posicao.linha, posicao.coluna - 1); if (TestesTabuleiro.PosicaoValida(pos, tab) && ExisteInimigo(esquerda) && tab.Peca(esquerda) == _partidaDeXadrez.VulneravelEnPassant) { mat[esquerda.linha - 1, esquerda.coluna] = true; } Posicao direita = new Posicao(posicao.linha, posicao.coluna + 1); if (TestesTabuleiro.PosicaoValida(pos, tab) && ExisteInimigo(direita) && tab.Peca(direita) == _partidaDeXadrez.VulneravelEnPassant) { mat[direita.linha - 1, direita.coluna] = true; } } } else { pos.definirValores(posicao.linha + 1, posicao.coluna); if (TestesTabuleiro.PosicaoValida(pos, tab) && Livre(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 2, posicao.coluna); Posicao p2 = new Posicao(posicao.linha + 1, posicao.coluna); if (TestesTabuleiro.PosicaoValida(pos, tab) && Livre(p2) && !TestesTabuleiro.ExistePeca(pos, tab) && Livre(pos) && qteMovimentos.Movimento == 0) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 1, posicao.coluna - 1); if (TestesTabuleiro.PosicaoValida(pos, tab) && ExisteInimigo(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 1, posicao.coluna + 1); if (TestesTabuleiro.PosicaoValida(pos, tab) && ExisteInimigo(pos)) { mat[pos.linha, pos.coluna] = true; } // #jogadaespecial en passant if (posicao.linha == 4) { Posicao esquerda = new Posicao(posicao.linha, posicao.coluna - 1); if (TestesTabuleiro.PosicaoValida(pos, tab) && ExisteInimigo(esquerda) && tab.Peca(esquerda) == _partidaDeXadrez.VulneravelEnPassant) { mat[esquerda.linha + 1, esquerda.coluna] = true; } Posicao direita = new Posicao(posicao.linha, posicao.coluna + 1); if (TestesTabuleiro.PosicaoValida(pos, tab) && ExisteInimigo(direita) && tab.Peca(direita) == _partidaDeXadrez.VulneravelEnPassant) { mat[direita.linha + 1, direita.coluna] = true; } } } return(mat); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao pos = new Posicao(0, 0); //acima pos.definirValores(posicao.linha - 1, posicao.coluna); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //nordeste pos.definirValores(posicao.linha - 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //direita pos.definirValores(posicao.linha, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //nordoeste pos.definirValores(posicao.linha - 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //abaixo pos.definirValores(posicao.linha + 1, posicao.coluna); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //esquerda pos.definirValores(posicao.linha, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //sudeste pos.definirValores(posicao.linha + 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //sudoeste pos.definirValores(posicao.linha + 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } // #Jogada especial ROQUE if (qtdMovimentos == 0 && !partida.xeque) { //ROQUE pequeno Posicao posT1 = new Posicao(posicao.linha, posicao.coluna + 3); if (testeTorreParaRoque(posT1)) { 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 posT2 = new Posicao(posicao.linha, posicao.coluna - 4); if (testeTorreParaRoque(posT2)) { 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); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao pos = new Posicao(0, 0); //acima pos.definirValores(posicao.linha - 1, posicao.coluna); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //diagonal superior direita pos.definirValores(posicao.linha - 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //direita pos.definirValores(posicao.linha, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //diagonal inferior direita pos.definirValores(posicao.linha + 1, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //abaixo pos.definirValores(posicao.linha + 1, posicao.coluna); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //diagonal inferior esquerda pos.definirValores(posicao.linha + 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //esquerda pos.definirValores(posicao.linha, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } //diagonal superior esquerda pos.definirValores(posicao.linha - 1, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } return(mat); }
public override bool[, ] movimentosPossiveis() { bool[, ] mat = new bool[tab.linhas, tab.colunas]; Posicao pos = new Posicao(0, 0); // esquerda pos.definirValores(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.definirValores(pos.linha, pos.coluna - 1); } // direita pos.definirValores(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.definirValores(pos.linha, pos.coluna + 1); } // acima pos.definirValores(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.definirValores(pos.linha - 1, pos.coluna); } // abaixo pos.definirValores(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.definirValores(pos.linha + 1, pos.coluna); } // NO pos.definirValores(posicao.linha - 1, 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.definirValores(pos.linha - 1, pos.coluna - 1); } // NE pos.definirValores(posicao.linha - 1, 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.definirValores(pos.linha - 1, pos.coluna + 1); } // SE pos.definirValores(posicao.linha + 1, 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.definirValores(pos.linha + 1, pos.coluna + 1); } // SO pos.definirValores(posicao.linha + 1, 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.definirValores(pos.linha + 1, pos.coluna - 1); } return(mat); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tab.linhas, tab.colunas]; Posicao pos = new Posicao(0, 0); pos.definirValores(posicao.linha - 1, posicao.coluna - 2); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 2, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 2, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha - 1, posicao.coluna + 2); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 1, posicao.coluna + 2); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 2, posicao.coluna + 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 2, posicao.coluna - 1); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirValores(posicao.linha + 1, posicao.coluna - 2); if (tab.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } return(mat); }