public void PosicionaBombasNoCampo(Posicao[] posicoes) { foreach (var posicao in posicoes) { _campoMinado.AdicionarBomba(posicao); } }
public void DeletaPosicao(Posicao posicao) { try { string sql = "delete from posicoes_infopae where id_posicao = @idPosicao"; SqlConnection conexao = DBConnection.Conexao.ConectaSql; if (conexao.State != ConnectionState.Open) conexao.Open(); SqlCommand command = new SqlCommand(sql, conexao); SqlParameter[] parametro = new SqlParameter[1]; parametro[0] = new SqlParameter("idPosicao", SqlDbType.Int); parametro[0].Value = posicao.IdPosicao; foreach (SqlParameter p in parametro) { command.Parameters.Add(p); } command.ExecuteNonQuery(); conexao.Close(); } catch (Exception ex) { throw new Exception("Não foi possível deletar a posição. Erro: " + ex.Message); } }
public void Posicionador_bombas_posiciona_uma_lista_de_bombas_no_campo_minado() { var posicoes = new Posicao[] { new Posicao(0, 0), new Posicao(2, 1) }; Mock<ICampoMinado> campo = new Mock<ICampoMinado>(); var posicionador = new PosicionadorDeBombas(campo.Object); posicionador.PosicionaBombasNoCampo(posicoes); campo.Verify(x => x.AdicionarBomba(posicoes[0]), Times.Once); campo.Verify(x => x.AdicionarBomba(posicoes[1]), Times.Once); }
public override void Colidir(Cenario cenario, GameObject obj, Posicao posicaoObj) { if (obj is Fruta) { cenario.RemoveGameObject(obj); } if (obj is Plataforma) { Plataforma plat = (Plataforma)obj; if (posicaoObj == Posicao.BAIXO) { caindo = false; obj.retornarAnterior(); } if (posicaoObj == Posicao.CIMA) { caindo = true; pulando = false; } } }
public bool movimentoPossivel(Posicao pos) { return(movimentosPossiveis()[pos.linha, pos.coluna]); }
public bool existePeca(Posicao pos) { validarPosicao(pos); return(peca(pos) != null); }
private bool podeMover(Posicao pos) { Peca p = tab.peca(pos); return(p == null || p.cor != cor); }
public void Empilha(object item) { primeiro = new Posicao(primeiro, item); }
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; } // acima 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; } // #jogadaespecial roque if (qteMovimentos == 0 && !partida.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 void realizaJogada(Posicao origem, Posicao destino) { Peca pecaCapturada = executaMovimento(origem, destino); if (estaEmXeque(jogadorAtual)) { desfazMovimento(origem, destino, pecaCapturada); throw new TabuleiroException("Você não pode se colocar em xeque!"); } Peca p = tab.peca(destino); // #jogadaespecial promocao if (p is Peao) { if (p.cor == Cor.Branca && destino.linha == 0 || (p.cor == Cor.Preta && destino.linha == 7)) { p = tab.retirarPeca(destino); pecas.Remove(p); Peca pecaPromovida = new Dama(tab, p.cor); Console.Write("Escolha uma classe para promover seu peão: "); string classe = Console.ReadLine(); if (classe == "C") { pecaPromovida = new Cavalo(tab, p.cor); } else if (classe == "B") { pecaPromovida = new Bispo(tab, p.cor); } else if (classe == "T") { pecaPromovida = new Torre(tab, p.cor); } else if (classe == "D") { pecaPromovida = new Dama(tab, p.cor); } tab.colocarPeca(pecaPromovida, destino); pecas.Add(pecaPromovida); } } if (estaEmXeque(adversaria(jogadorAtual))) { xeque = true; } else { xeque = false; } if (testeXequemate(adversaria(jogadorAtual))) { terminada = true; } else { turno++; mudaJogador(); } //#jogadaespecial en passant if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == destino.linha + 2)) { vulneravelEnPassant = p; } else { vulneravelEnPassant = null; } //#jogadaespecial promocao if (p is Peao && destino.linha == 0 && p.cor == Cor.Branca) { } }
public override bool[,] MovimentosPossiveis() { bool[,] mat = new bool[Tab.Linhas, Tab.Colunas]; Posicao pos = new Posicao(0, 0); //Norte 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; } //E 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; } //Sul 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; } //O 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 espacial Roque if (Movimentos == 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[pos.Linha, pos.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[pos.Linha, pos.Coluna - 2] = true; } } } return(mat); }
public bool testeTorreParaRoque(Posicao pos) { Peca p = Tab.peca(pos); return(p != null && p is Torre && p.cor == cor && p.Movimentos == 0); }
private bool _PodeMover(Posicao pos) { Peca p = Tab.peca(pos); return(p == null || p.cor != this.cor); }
public Peca Peca(Posicao posicao) { return(Pecas[posicao.Linha, posicao.Coluna]); }
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) && Movimentos == 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; } //jogada 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 diretia = new Posicao(posicao.Linha, posicao.Coluna + 1); if (Tab.PosicaoValida(diretia) && _ExisteInimigo(diretia) && Tab.peca(diretia) == _Partida.VulneravelEnPassant) { mat[diretia.Linha - 1, diretia.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) && Movimentos == 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; } //jogada 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 diretia = new Posicao(posicao.Linha, posicao.Coluna + 1); if (Tab.PosicaoValida(diretia) && _ExisteInimigo(diretia) && Tab.peca(diretia) == _Partida.VulneravelEnPassant) { mat[diretia.Linha + 1, diretia.Coluna] = true; } } } return(mat); }
private bool _Livre(Posicao pos) { return(Tab.peca(pos) == null); }
public virtual void Colidir(Cenario cenario, GameObject obj, Posicao posicao) { }
private bool movimentoLivre(Posicao pos) { Peca p = tab.peca(pos); return(p == null || p.cor != this.cor); }
private bool _ExisteInimigo(Posicao pos) { Peca p = Tab.peca(pos); return(p != null && p.cor != cor); }
private bool testeTorreRoque(Posicao pos) { Peca p = tabu.peca(pos); return(p != null && p is Torre && p.cor == cor && p.qteMovimentos == 0); // use o is para checar se uma superclasse (p que é peça) é da subclasse correspondente (torre no caso) }
private bool testeTorreParaRoque(Posicao pos) { Peca p = tab.peca(pos); return(p != null && p is Torre && p.cor == cor && p.qteMovimentos == 0); }
public override bool[,] movimentosPossiveis() { bool[,] mat = new bool[tabu.linhas, tabu.colunas]; Posicao pos = new Posicao(0, 0); pos.definirPosicao(posicao.linha - 1, posicao.coluna); // checando posicao norte do rei if (tabu.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirPosicao(posicao.linha - 1, posicao.coluna + 1); // checando posicao nordeste if (tabu.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirPosicao(posicao.linha, posicao.coluna + 1); // checando posicao direita do rei if (tabu.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirPosicao(posicao.linha + 1, posicao.coluna + 1); // checando posicao sudeste do rei if (tabu.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirPosicao(posicao.linha + 1, posicao.coluna); // checando posicao sul do rei if (tabu.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirPosicao(posicao.linha + 1, posicao.coluna - 1); // checando posicao sudoeste do rei if (tabu.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirPosicao(posicao.linha, posicao.coluna - 1); // checando posicao oeste do rei if (tabu.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } pos.definirPosicao(posicao.linha - 1, posicao.coluna - 1); // checando posicao noroeste do rei if (tabu.posicaoValida(pos) && podeMover(pos)) { mat[pos.linha, pos.coluna] = true; } // #jogada especial - ROQUE if (qteMovimentos == 0 && !partida.xeque) { Posicao posT1 = new Posicao(posicao.linha, posicao.coluna + 3); // Roque Pequeno if (testeTorreRoque(posT1)) { Posicao p1 = new Posicao(posicao.linha, posicao.coluna + 1); Posicao p2 = new Posicao(posicao.linha, posicao.coluna + 2); if (tabu.peca(p1) == null && tabu.peca(p2) == null) { mat[posicao.linha, posicao.coluna + 2] = true; } } Posicao posT2 = new Posicao(posicao.linha, posicao.coluna - 4); // Roque Grande if (testeTorreRoque(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 (tabu.peca(p1) == null && tabu.peca(p2) == null && tabu.peca(p3) == null) { mat[posicao.linha, posicao.coluna - 2] = true; } } } return(mat); }
public Posicao(Posicao proximo, object item) { this.proximo = proximo; this.item = item; }
public Peca Peca(Posicao pos)//sobrecarga no metodo peca. { return(pecas[pos.Linha, pos.Coluna]); }
public bool ExistePeca(Posicao pos) { ValidarPosicao(pos); return(Peca(pos) != null); }
public bool existePeca(Posicao pos) { validarPosicao(pos); return(Peca(pos) != null); }//verifica se a peça existe em determinada posição.
public override bool[,] MovimentosPossiveis() { bool[,] mat = new bool[Tab.Linhas, Tab.Colunas]; Posicao pos = new Posicao(0, 0); 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); } 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); } 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); } 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); } 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); } 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); } 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); } 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 Agente() { posicao = new Posicao(); }
public Peca peca(Posicao pos) { return(pecas[pos.Linha, pos.Coluna]); }
public bool MovimentoPossivel(Posicao posicao) { return(MovimentosPossiveis()[posicao.Linha, posicao.Coluna]); }
private bool PodeMover(Posicao pos) { Peca p = Tab.peca(pos); return(p == null || p.Cor != Cor); }
public ListaPosicoes getListaPosicoes() { ListaPosicoes lista = new ListaPosicoes(); FusoHorario.FusoHorario fusoHorario; try { string sql = "select top 60 id_posicao, modulo, tipo, latitude, longitude, cast(velocidade as int) as velocidade, data from posicoes_infopae order by modulo, data"; SqlConnection conexao = DBConnection.Conexao.ConectaSql; if (conexao.State != ConnectionState.Open) conexao.Open(); SqlCommand command = new SqlCommand(sql, conexao); SqlDataReader reader = command.ExecuteReader(); fusoHorario = FusoHorario.FusoHorario.ObterInstancia(); while(reader.Read()) { Posicao posicao = new Posicao(); posicao.IdPosicao = Convert.ToInt32(reader["id_posicao"]); posicao.CodigoModulo = Convert.ToString(reader["modulo"]); posicao.Tipo = Convert.ToChar(reader["tipo"]); posicao.Latitude = Convert.ToDouble(reader["latitude"]); posicao.Longitude = Convert.ToDouble(reader["longitude"]); posicao.Velocidade = Convert.ToDouble(reader["velocidade"]); posicao.Data = Convert.ToDateTime(reader["data"]); posicao.Data = MetodosAuxiliares.MetodosAuxiliares.ArrumarFusoHorario(posicao.Data, fusoHorario); lista.Add(posicao); } conexao.Close(); } catch (Exception ex) { throw new Exception("Não foi possível carregar a lista de posições. Erro: " + ex.Message); } return lista; }
private bool PodeMover(Posicao pos) { Peca p = tab.peca(pos); return(p == null || p.cor != cor); //checa se é uma peça adversária }
private bool PodeMover(Posicao posicao) { Peca p = tabuleiro.Peca(posicao); return(p == null || p.cor != cor); }
public override bool[,] MovimentosPossiveis() { bool[,] matriz = new bool[tabuleiro.linhas, tabuleiro.colunas]; Posicao posicao = new Posicao(0, 0); // acima posicao.DefinirValores(posicao.linha - 1, posicao.coluna); while (tabuleiro.PosicaoValida(posicao) && PodeMover(posicao)) { matriz[posicao.linha, posicao.coluna] = true; if (tabuleiro.Peca(posicao) != null && tabuleiro.Peca(posicao).cor != cor) { break; } posicao.linha = posicao.linha - 1; } // abaixo posicao.DefinirValores(posicao.linha + 1, posicao.coluna); while (tabuleiro.PosicaoValida(posicao) && PodeMover(posicao)) { matriz[posicao.linha, posicao.coluna] = true; if (tabuleiro.Peca(posicao) != null && tabuleiro.Peca(posicao).cor != cor) { break; } posicao.linha = posicao.linha + 1; } // abaixo posicao.DefinirValores(posicao.linha + 1, posicao.coluna); while (tabuleiro.PosicaoValida(posicao) && PodeMover(posicao)) { matriz[posicao.linha, posicao.coluna] = true; if (tabuleiro.Peca(posicao) != null && tabuleiro.Peca(posicao).cor != cor) { break; } posicao.linha = posicao.linha + 1; } // direita posicao.DefinirValores(posicao.linha, posicao.coluna + 1); while (tabuleiro.PosicaoValida(posicao) && PodeMover(posicao)) { matriz[posicao.linha, posicao.coluna] = true; if (tabuleiro.Peca(posicao) != null && tabuleiro.Peca(posicao).cor != cor) { break; } posicao.coluna = posicao.coluna + 1; } // direita posicao.DefinirValores(posicao.linha, posicao.coluna - 1); while (tabuleiro.PosicaoValida(posicao) && PodeMover(posicao)) { matriz[posicao.linha, posicao.coluna] = true; if (tabuleiro.Peca(posicao) != null && tabuleiro.Peca(posicao).cor != cor) { break; } posicao.coluna = posicao.coluna - 1; } return(matriz); }
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); }