示例#1
0
        private void OldExemplo()
        {
            Valoracao profundidade0 = new Valoracao(new Profundidade(), 0);
            Valoracao profundidade1 = new Valoracao(new Profundidade(), 1);
            Valoracao profundidade2 = new Valoracao(new Profundidade(), 2);
            Valoracao profundidade3 = new Valoracao(new Profundidade(), 3);

            No raiz = new No("Durante uma viagem seu GPS apresenta duas direções para seguir, qual você escolhe?", valoresNecessarios: new List <Valoracao> {
                profundidade0
            });

            No esquerda = new No("Ir pelo caminho da esquerda", valoresNecessarios: new List <Valoracao> {
                profundidade1, profundidade2
            }, valoresExistentes: new List <Valoracao> {
                profundidade0
            });
            No direita = new No("Ir pelo caminho da direita", valoresNecessarios: new List <Valoracao> {
                profundidade1
            }, valoresExistentes: new List <Valoracao> {
                profundidade0
            });

            No continuar = new No("Foi uma ótima escolha, continuarei por este caminho", random: false, valoresNecessarios: new List <Valoracao> {
                profundidade2
            }, valoresExistentes: new List <Valoracao> {
                profundidade1
            });
            No voltar = new No("Avistei um retorno, acho que vou voltar e ir pelo outro caminho", random: false, valoresNecessarios: new List <Valoracao> {
                profundidade2
            }, valoresExistentes: new List <Valoracao> {
                profundidade1
            });

            No gps = new No("Cheguei ao destino. Gostei do caminho, vou salvá-lo no meu gps!", true, valoresExistentes: new List <Valoracao> {
                profundidade2
            });
            No outro = new No("Cheguei ao destino. Não gostei desse caminho, na próxima vou pelo outro!", true, valoresExistentes: new List <Valoracao> {
                profundidade2
            });

            List <No> todosNosPossiveis = new List <No> {
                raiz, esquerda, direita, continuar, voltar, gps, outro
            };


            ArvoreDinamica ad = new ArvoreDinamica(null, todosNosPossiveis);

            ad.noAtual = raiz;

            while (!ad.noAtual.final)
            {
                Console.WriteLine(ad.noAtual.nome);
                ad.AdicionarGlobais(ad.noAtual);
                ad.FazerLigacao(ad.noAtual);
                ad.noAtual = ad.EscolherLigacao(ad.noAtual);
                if (ad.noAtual == null)
                {
                    break;
                }
            }

            if (ad.noAtual != null)
            {
                Console.WriteLine(ad.noAtual.nome);
            }
            Console.WriteLine("Fim de jogo!");
        }
示例#2
0
        static void Main(string[] args)
        {
            long memoriaInicial = GC.GetTotalMemory(false);

            DateTime tempoInicial = DateTime.Now;

            // Inicio da narrativa
            Valoracao profundidade1    = new Valoracao(new Profundidade(), 1);
            Valoracao profundidade1_2  = new Valoracao(new Profundidade(), 12);
            Valoracao profundidade2    = new Valoracao(new Profundidade(), 2);
            Valoracao profundidade2_3  = new Valoracao(new Profundidade(), 23);
            Valoracao profundidade3    = new Valoracao(new Profundidade(), 3);
            Valoracao profundidade3_4  = new Valoracao(new Profundidade(), 34);
            Valoracao profundidade4_r1 = new Valoracao(new Profundidade(), 41); // Nivel Quatro primeiro Random
            Valoracao profundidade4_r2 = new Valoracao(new Profundidade(), 42);
            Valoracao profundidade4_5  = new Valoracao(new Profundidade(), 45);
            Valoracao profundidade5    = new Valoracao(new Profundidade(), 5);
            Valoracao profundidade6    = new Valoracao(new Profundidade(), 6);
            Valoracao profundidade7    = new Valoracao(new Profundidade(), 7);

            Valoracao veiculoCarro = new Valoracao(new Veiculo(), 1);
            Valoracao veiculoAviao = new Valoracao(new Veiculo(), 2);
            Valoracao veiculoTodos = new Valoracao(new Veiculo(), 0);

            Valoracao hospedagemHotel = new Valoracao(new Hospedagem(), 1);
            Valoracao hospedagemCasa  = new Valoracao(new Hospedagem(), 2);
            Valoracao hospedagemTodos = new Valoracao(new Hospedagem(), 0);


            // Início
            No raiz = new No("Está na hora da viagem em familia, qual será nosso destino desta vez?", valoresNecessarios: new List <Valoracao> {
                profundidade1
            });

            // Destino da viagem
            No gramado = new No("Vamos para Gramado", valoresExistentes: new List <Valoracao> {
                profundidade1
            }, valoresNecessarios: new List <Valoracao> {
                profundidade1_2
            });
            No natal = new No("Vamos para Natal", valoresExistentes: new List <Valoracao> {
                profundidade1
            }, valoresNecessarios: new List <Valoracao> {
                profundidade1_2
            });

            // Veiculo
            No veiculo = new No("Agora precisamos decidir com qual veículos vamos: ", valoresExistentes: new List <Valoracao> {
                profundidade1_2
            }, valoresNecessarios: new List <Valoracao> {
                profundidade2
            });
            No carro = new No("Vamos com nosso carro", valoresExistentes: new List <Valoracao> {
                profundidade2
            }, valoresNecessarios: new List <Valoracao> {
                profundidade2_3
            }, valoresGlobais: new List <Valoracao> {
                veiculoCarro
            });
            No aviao = new No("Ir de Avião seria legal", valoresExistentes: new List <Valoracao> {
                profundidade2
            }, valoresNecessarios: new List <Valoracao> {
                profundidade2_3
            }, valoresGlobais: new List <Valoracao> {
                veiculoAviao
            });

            // Hospedagem
            No hospedagem = new No("Ótimo! Agora só falta definir a hospedagem", valoresExistentes: new List <Valoracao> {
                profundidade2_3
            }, valoresNecessarios: new List <Valoracao> {
                profundidade3
            });
            No hotel = new No("Vamos ficar em um hotel", valoresExistentes: new List <Valoracao> {
                profundidade3
            }, valoresNecessarios: new List <Valoracao> {
                profundidade3_4
            }, valoresGlobais: new List <Valoracao> {
                hospedagemHotel
            });
            No casa = new No("Vamos para a casa de um amigo", valoresExistentes: new List <Valoracao> {
                profundidade3
            }, valoresNecessarios: new List <Valoracao> {
                profundidade3_4
            }, valoresGlobais: new List <Valoracao> {
                hospedagemCasa
            });

            // Aleatoriedades da viagem (r_ = random
            // Bom
            No aleatoriedades = new No("Chegamos no nosso destino\n", random: true, valoresExistentes: new List <Valoracao> {
                profundidade3_4
            }, valoresNecessarios: new List <Valoracao> {
                profundidade4_r1
            });
            No r_carro_bom = new No("Deu tudo certo no passeio, paramos em um posto na estrada e tinha muitos doces!", random: true, valoresExistentes: new List <Valoracao> {
                profundidade4_r1, veiculoCarro, hospedagemTodos
            }, valoresNecessarios: new List <Valoracao> {
                profundidade4_r2
            }, usarGlobal: true);
            No r_aviao_bom = new No("Uau! Ganhamos uma passagem primeira classe no voo", random: true, valoresExistentes: new List <Valoracao> {
                profundidade4_r1, veiculoAviao, hospedagemTodos
            }, valoresNecessarios: new List <Valoracao> {
                profundidade4_r2
            }, usarGlobal: true);
            No r_hotel_bom = new No("Esse hotel é fantástico! Adorei a piscina", random: true, valoresExistentes: new List <Valoracao> {
                profundidade4_r2, hospedagemHotel, veiculoTodos
            }, valoresNecessarios: new List <Valoracao> {
                profundidade4_5
            }, usarGlobal: true);
            No r_casa_bom = new No("Ahh... Nada melhor que momentos com os amigos, fazia tempo que não os via", random: true, valoresExistentes: new List <Valoracao> {
                profundidade4_r2, hospedagemCasa, veiculoTodos
            }, valoresNecessarios: new List <Valoracao> {
                profundidade4_5
            }, usarGlobal: true);
            // Neutro
            No r_carro_neutro = new No("O passeio de carro foi normal", random: true, valoresExistentes: new List <Valoracao> {
                profundidade4_r1, veiculoCarro, hospedagemTodos
            }, valoresNecessarios: new List <Valoracao> {
                profundidade4_r2
            }, usarGlobal: true);
            No r_aviao_neutro = new No("A viagem de avião foi normal", random: true, valoresExistentes: new List <Valoracao> {
                profundidade4_r1, veiculoAviao, hospedagemTodos
            }, valoresNecessarios: new List <Valoracao> {
                profundidade4_r2
            }, usarGlobal: true);
            No r_hotel_neutro = new No("O hotel aqui até que é legal", random: true, valoresExistentes: new List <Valoracao> {
                profundidade4_r2, hospedagemHotel, veiculoTodos
            }, valoresNecessarios: new List <Valoracao> {
                profundidade4_5
            }, usarGlobal: true);
            No r_casa_neutro = new No("A casa dos nossos amigos até que está legal", random: true, valoresExistentes: new List <Valoracao> {
                profundidade4_r2, hospedagemCasa, veiculoTodos
            }, valoresNecessarios: new List <Valoracao> {
                profundidade4_5
            }, usarGlobal: true);
            // Ruim
            No r_carro_ruim = new No("A viagem de carro foi péssima! A estrada estava esburacada e o pneu furou", random: true, valoresExistentes: new List <Valoracao> {
                profundidade4_r1, veiculoCarro, hospedagemTodos
            }, valoresNecessarios: new List <Valoracao> {
                profundidade4_r2
            }, usarGlobal: true);
            No r_aviao_ruim = new No("O voo foi horrível e ainda por cima atrasou", random: true, valoresExistentes: new List <Valoracao> {
                profundidade4_r1, veiculoAviao, hospedagemTodos
            }, valoresNecessarios: new List <Valoracao> {
                profundidade4_r2
            }, usarGlobal: true);
            No r_hotel_ruim = new No("Não gostamos nada do hotel, não tinha nem agua quente", random: true, valoresExistentes: new List <Valoracao> {
                profundidade4_r2, hospedagemHotel, veiculoTodos
            }, valoresNecessarios: new List <Valoracao> {
                profundidade4_5
            }, usarGlobal: true);
            No r_casa_ruim = new No("Nossos amigos beberam e até vomitaram pela casa, eca!", random: true, valoresExistentes: new List <Valoracao> {
                profundidade4_r2, hospedagemCasa, veiculoTodos
            }, valoresNecessarios: new List <Valoracao> {
                profundidade4_5
            }, usarGlobal: true);

            // Volta para casa
            No volta = new No("\nUma semana depois...", valoresExistentes: new List <Valoracao> {
                profundidade4_5
            }, valoresNecessarios: new List <Valoracao> {
                profundidade5
            });
            No voltaCarro = new No("Estaria na hora de voltar para casa, mas o que acha de ficarmos mais um dia?", valoresExistentes: new List <Valoracao> {
                profundidade5, hospedagemTodos, veiculoCarro
            }, valoresNecessarios: new List <Valoracao> {
                profundidade6
            }, usarGlobal: true);
            No voltaAviao = new No("Está na hora de voltar para casa", valoresExistentes: new List <Valoracao> {
                profundidade5, hospedagemTodos, veiculoAviao
            }, valoresNecessarios: new List <Valoracao> {
                profundidade7
            }, usarGlobal: true);
            // Dia extra carro
            No diaExtraSim = new No("Eba! Vamos ficar mais um dia", valoresExistentes: new List <Valoracao> {
                profundidade6
            }, valoresNecessarios: new List <Valoracao> {
                profundidade7
            });
            No diaExtraNao = new No("Acho melhor irmos, temos muito o que resolver em casa", valoresExistentes: new List <Valoracao> {
                profundidade6
            }, valoresNecessarios: new List <Valoracao> {
                profundidade7
            });

            // Fim da viagem
            No final = new No("\nChegamos em casa...\nEssa viagem foi ótima, vai deixar lembranças", true, valoresExistentes: new List <Valoracao> {
                profundidade7
            });


            // Todos os nós que podem existir
            List <No> todosNosPossiveis = new List <No> {
                raiz, gramado, natal, veiculo, carro, aviao, hospedagem, hotel, casa, aleatoriedades,
                r_carro_bom, r_carro_neutro, r_carro_ruim, r_aviao_bom, r_aviao_neutro, r_aviao_ruim, r_hotel_bom, r_hotel_neutro, r_hotel_ruim,
                r_casa_bom, r_casa_neutro, r_casa_ruim, volta, voltaAviao, voltaCarro, diaExtraNao, diaExtraSim, final
            };


            ArvoreDinamica ad = new ArvoreDinamica(null, todosNosPossiveis);

            ad.noAtual = raiz;
            // Final da narrativa
            DateTime tempoFinal = DateTime.Now;
            double   tempoUsado = (tempoFinal - tempoInicial).TotalMilliseconds;

            while (!ad.noAtual.final)
            {
                Console.WriteLine(ad.noAtual.nome);
                ad.AdicionarGlobais(ad.noAtual);
                ad.FazerLigacao(ad.noAtual);
                ad.noAtual = ad.EscolherLigacao(ad.noAtual);
                if (ad.noAtual == null)
                {
                    break;
                }
            }
            Console.WriteLine(GC.GetTotalMemory(false));

            if (ad.noAtual != null)
            {
                Console.WriteLine(ad.noAtual.nome);
            }

            Console.WriteLine("Fim de jogo!");

            long memoriaFinal = GC.GetTotalMemory(false);
            long memoriaUsada = memoriaFinal - memoriaInicial;

            Console.ReadKey();

            // Benchmarks:

            // Tempo:
            // Diferença em milisegundos através dos DateTimes "tempoInicial" e "tempoFinal"
            // A diferença é calculada em: double tempoUsado = (tempoFinal - tempoInicial).TotalMilliseconds;


            // Memória:
            // Pegamos a quantidade da memória através do código "GC.GetTotalMemory(false);" no inicio e fim da vida do código.
            // Por fim, é feito o calculo da diferença em: long memoriaUsada = memoriaFinal - memoriaInicial;


            // Numero de linhas para narrativa:
            // Contagem de linhas entre o inicio e fim da narrativa (estão demarcados no código) removendo comentários e linhas vazias através do programa Notepad++
            // Para achar o inicio e fim da narrativa procurar por: "// Inicio da narrativa" e "// Final da narrativa".

            // Contagem de dados e repetições:
            // Os dados foram contados manualmente durante a construção da árvore neste código (contagem de objetos)
            // A repetição foi calculada por número de dados que contenham o mesmo valor (nome) do que outros
        }