示例#1
0
        private IEnumerable <Animal> SelecionarAnimaisPorAcao(IEnumerable <Animal> animais, List <AcaoAnimal> acoesJaEscolhidas,
                                                              IInteracaoUsuario interacaoUsuario)
        {
            var animaisSelecionados = animais;
            var acoesAnimais        = animaisSelecionados.SelectMany(o => o.Acoes).Distinct();

            foreach (var acaoAnimal in acoesAnimais)
            {
                if (acoesJaEscolhidas.Contains(acaoAnimal))
                {
                    continue;
                }

                if (interacaoUsuario.PerguntaAcaoAnimal(acaoAnimal))
                {
                    acoesJaEscolhidas.Add(acaoAnimal);
                    animaisSelecionados = animaisSelecionados.Where(x => x.Acoes.Contains(acaoAnimal));
                    break;
                }

                animaisSelecionados = animaisSelecionados.Where(x => !x.Acoes.Contains(acaoAnimal));
                break;
            }

            return(animaisSelecionados);
        }
示例#2
0
 private Animal SelecionarUnicoAnimal(IInteracaoUsuario interacaoUsuario, List <AcaoAnimal> acoesEscolhidas, IEnumerable <Animal> animaisPorTipo)
 {
     while (animaisPorTipo.Count() > 1)
     {
         animaisPorTipo = SelecionarAnimaisPorAcao(animaisPorTipo, acoesEscolhidas, interacaoUsuario);
     }
     return(animaisPorTipo.First());
 }
示例#3
0
        public static Animal CriarAnimalPerguntando(Animal animalReferencia, IInteracaoUsuario interacaoUsuario)
        {
            var animal = new Animal
            {
                Nome       = interacaoUsuario.PerguntaNomeNovoAnimal(),
                Acoes      = new List <AcaoAnimal>(),
                TipoAnimal = animalReferencia.TipoAnimal
            };

            animal.Acoes.AddRange(animalReferencia.Acoes);
            animal.Acoes.Add(new AcaoAnimal {
                Acao = interacaoUsuario.PerguntaAcaoNovoAnimal(animal.Nome, animalReferencia.Nome)
            });
            return(animal);
        }
示例#4
0
        public ResultadoAdivinhacao Adivinhar(IInteracaoUsuario interacaoUsuario)
        {
            var acoesEscolhidas      = new List <AcaoAnimal>();
            var animaisPorTipo       = FiltrarAnimaisPorTipo(interacaoUsuario);
            var resultadoAdivinhacao = new ResultadoAdivinhacao();

            var animalselecionado = SelecionarUnicoAnimal(interacaoUsuario, acoesEscolhidas, animaisPorTipo);

            if (interacaoUsuario.PerguntaSeAcertouAnimal(animalselecionado.Nome))
            {
                resultadoAdivinhacao.Adivinhou = true;
                resultadoAdivinhacao.Animal    = animalselecionado;
                interacaoUsuario.AvisarUsuarioAcerto();
            }
            else
            {
                resultadoAdivinhacao.Adivinhou = false;
                resultadoAdivinhacao.Animal    = Animal.CriarAnimalPerguntando(animalselecionado, interacaoUsuario);
                Animais.Add(resultadoAdivinhacao.Animal);
            }

            return(resultadoAdivinhacao);
        }
示例#5
0
        private IEnumerable <Animal> FiltrarAnimaisPorTipo(IInteracaoUsuario interacaoUsuario)
        {
            var viveNaAgua = interacaoUsuario.PerguntarSeAnimalViveNaAgua();

            return(Animais.Where(o => o.TipoAnimal == (viveNaAgua ? TipoAnimal.Aquatico : TipoAnimal.Terrestre)));
        }