예제 #1
0
        public bool MeusDadosSaoValidos()
        {
            RegraDeNegocio violacaoDeRegra;

            if (string.IsNullOrWhiteSpace(Nome))
            {
                violacaoDeRegra = new RegraDeNegocio("O nome da sonda não foi informado.");
                QuebraDeEspeficacao.Adicionar(violacaoDeRegra);
            }

            if (Planalto == null)
            {
                violacaoDeRegra = new RegraDeNegocio("O planalto a ser explorado não foi informado.");
                QuebraDeEspeficacao.Adicionar(violacaoDeRegra);
            }

            if (PosicaoAtual == null)
            {
                violacaoDeRegra = new RegraDeNegocio("A posição inicial da sonda não foi informado.");
                QuebraDeEspeficacao.Adicionar(violacaoDeRegra);
            }

            if (QuebraDeEspeficacao.HouveViolacao())
            {
                return(true);
            }

            return(false);
        }
예제 #2
0
        public void ObterCoordenadaDoPontoSuperiorDireitoDaMalhaDoPlanalto(string linha)
        {
            var caracteres = ObterCaracteresSeparadosPorEspaco(linha);

            if (caracteres.Length <= 1)
            {
                violacaoDeRegra = new RegraDeNegocio($"Mensagem inválida, coordenada do ponto superior-direito da malha do planalto só contém {caracteres.Length} caracter(s).");
                RegrasNegocio.Adicionar(violacaoDeRegra);
            }
            else
            {
                int[] numeros  = new int[2];
                int   contador = 0;
                foreach (var item in caracteres)
                {
                    int numero = 0;

                    if (!ENumero(item, out numero))
                    {
                        violacaoDeRegra = new RegraDeNegocio("Mensagem inválida, coordenada do ponto superior-direito da malha do planalto não contém valores númericos.");
                        RegrasNegocio.Adicionar(violacaoDeRegra);
                        break;
                    }

                    numeros[contador] = numero;
                    contador++;
                }

                if (!RegrasNegocio.HouveViolacao())
                {
                    coordenada = new Coordenada(numeros[0], numeros[1]);
                }
            }
        }
예제 #3
0
        private void ObterPosicaoInicialDaSonda(string linha)
        {
            var caracteres = ObterCaracteresSeparadosPorEspaco(linha);

            if (caracteres.Length <= 2)
            {
                violacaoDeRegra = new RegraDeNegocio($"Mensagem inválida, posição inicial só contém {caracteres.Length} caracter(s).");
                RegrasNegocio.Adicionar(violacaoDeRegra);
            }
            else
            {
                int[]    numeros = new int[2];
                string[] letras  = new string[1];

                int contador = 0;
                foreach (var item in caracteres)
                {
                    int  numero = 0;
                    char letrar = ' ';

                    switch (contador)
                    {
                    case 0:
                    case 1:
                        if (!ENumero(item, out numero))
                        {
                            violacaoDeRegra = new RegraDeNegocio("Mensagem inválida, posição inicial não contém valores númericos.");
                            RegrasNegocio.Adicionar(violacaoDeRegra);
                        }
                        else
                        {
                            numeros[contador] = numero;
                        }
                        break;

                    case 2:
                        letrar = Convert.ToChar(item);
                        if (!char.IsLetter(letrar))
                        {
                            violacaoDeRegra = new RegraDeNegocio("Mensagem inválida, posição inicial não contém caracter.");
                            RegrasNegocio.Adicionar(violacaoDeRegra);
                        }
                        else
                        {
                            letras[0] = item;
                        }
                        break;
                    }
                    contador++;
                }

                if (!RegrasNegocio.HouveViolacao())
                {
                    posicaoInicioalDaSonda         = new Posicao(numeros[0], numeros[1]);
                    direcaoCardinalInicioalDaSonda = ObterDirecaoCardinal(letras[0]);
                }
            }
        }
예제 #4
0
        public void Deve_informar_que_houve_uma_quebra_na_regra_de_negocio_na_qual_o_eixo_desejado_esta_fora_da_malha_para_exploracao()
        {
            var regraDeNegocio = new RegraDeNegocio("Posição fora da faixa (Malha do Planalto) para exploração.");

            var posicaoDesejada = new Posicao(6, 2);

            sonda.IniciarEm(posicaoDesejada, DirecaoCardinal.Norte);

            Assert.IsTrue(sonda.HouveViolacao());
            Assert.IsTrue(sonda.EspecificacaoDeNegocio.Contem(regraDeNegocio));
        }
예제 #5
0
        public void Explorar(Planalto planalto)
        {
            if (planalto == null)
            {
                var violacaoDeRegra = new RegraDeNegocio("O planalto a ser explorado não foi informado.");
                QuebraDeEspeficacao.Adicionar(violacaoDeRegra);
                return;
            }

            Planalto = planalto;
        }
예제 #6
0
        public Sonda(string nome) : this()
        {
            if (string.IsNullOrWhiteSpace(nome))
            {
                var violacaoDeRegra = new RegraDeNegocio("O nome da sonda não foi informado.");
                QuebraDeEspeficacao.Adicionar(violacaoDeRegra);
                return;
            }

            Nome = nome;
        }
예제 #7
0
 private void ObterSerieDeInstrucoesIndicandoParaASondaComoElaDeveraExplorarOPlanalto(string linha)
 {
     if (linha.Length < 1)
     {
         violacaoDeRegra = new RegraDeNegocio($"Mensagem inválida, série de instruções indicando para a sonda como ela deverá explorar o planalto só contém {linha.Length} caracter(s).");
         RegrasNegocio.Adicionar(violacaoDeRegra);
     }
     else
     {
         var quantidadeDeCaracteres = linha.Length;
         serieDeInstrucoesIndicandoParaASondaComoElaDeveraExplorarOPlanalto = new string[quantidadeDeCaracteres];
         for (int contador = 0; contador < linha.Length; contador++)
         {
             serieDeInstrucoesIndicandoParaASondaComoElaDeveraExplorarOPlanalto[contador] = linha[contador].ToString();
         }
     }
 }
예제 #8
0
        public void IniciarEm(Posicao posicaoDesejada, DirecaoCardinal direcaoCardinal)
        {
            if (posicaoDesejada == null)
            {
                var violacaoDeRegra = new RegraDeNegocio("A posição inicial da sonda não foi informado.");
                QuebraDeEspeficacao.Adicionar(violacaoDeRegra);
                return;
            }
            else
            {
                if (posicaoDesejada.X > Planalto.EixoX() | posicaoDesejada.Y > Planalto.EixoY())
                {
                    var violacaoDeRegra = new RegraDeNegocio("Posição fora da faixa (Malha do Planalto) para exploração.");
                    QuebraDeEspeficacao.Adicionar(violacaoDeRegra);
                    return;
                }
            }

            PosicaoAtual = posicaoDesejada;
            DirecaoAtual = direcaoCardinal;
        }
예제 #9
0
        public string Iniciar(string mensagem)
        {
            if (string.IsNullOrWhiteSpace(mensagem))
            {
                violacaoDeRegra = new RegraDeNegocio("Mensagem inválida.");
                RegrasNegocio.Adicionar(violacaoDeRegra);
            }

            string[] separadores = new string[] { "\n" };
            string[] linhas      = mensagem.Split(separadores, StringSplitOptions.None);

            if (linhas.Length < numeroDeLinhasNaMensagemEnviadaParaControlarAsSondas)
            {
                violacaoDeRegra = new RegraDeNegocio($"Mensagem inválida, só contém {linhas.Length} linha(s).");
                RegrasNegocio.Adicionar(violacaoDeRegra);
            }

            if (!RegrasNegocio.HouveViolacao())
            {
                TratarLinhas(linhas);
            }

            return(resultado);
        }