예제 #1
0
        /// <summary>
        /// Inundacao da rede a partir do segundo No
        /// </summary>
        private Pacote(ref Panel Painel, No NoOrigem, No NoDestino, int Saltos, Color Cor, byte Versao, Caminho caminho)
        {
            NoAtual     = NoDestino;
            NoAnterior  = NoOrigem;
            this.Painel = Painel;
            this.Cor    = Cor;
            this.Saltos = Saltos;
            this.Versao = Versao;

            //Adiciona Nos recebidos ao caminho
            NovoCaminho.ListadeNos.AddRange(caminho.ListadeNos);

            //Adiciona o No atual ao caminho
            NovoCaminho.ListadeNos.Add(NoAtual);

            //Incrementa a soma de distancias
            NovoCaminho.Soma = caminho.Soma + Caminho.DistaciaCaminho(NoOrigem.Localizacao, NoDestino.Localizacao);

            //Adicina caminhos a lista de caminhos
            Caminho.ListaDecaminhos.Add(NovoCaminho);

            //Cria imagem para representar o pacote e adiciona essa imagem ao painel
            PictureBox Imagem = new PictureBox();

            Imagem.BackColor = Cor;
            Imagem.Location  = NoOrigem.Localizacao;
            Imagem.Size      = new System.Drawing.Size(10, 10);
            Painel.Controls.Add(Imagem);

            this.Imagem = Imagem;
            this.Saltos = Saltos;
            this.Saltos--;

            //y2 - y1 = m * (x2 - x1); Formula original

            //Adiciona coordenadas
            x1 = NoOrigem.Localizacao.X;
            x2 = NoDestino.Localizacao.X;
            y1 = NoOrigem.Localizacao.Y;
            y2 = NoDestino.Localizacao.Y;

            //Atribui posicao inicial no painel
            Imagem.Location = new Point((int)x1, (int)y1);

            //Calcula angulo de movimentacao
            m = (float)(y2 - y1) / (x2 - x1);

            //Verifica se a posicao X vai ser inf=crementada ou decrementada
            if (x1 > x2)
            {
                Incremento = -1;
            }

            //Cria timer para movimentacao
            timer1.Tick    += new EventHandler(EventoTimer); //adiciona evento
            timer1.Interval = 1;                             //Define intervalo
            timer1.Enabled  = true;                          //Habilita timer
        }
예제 #2
0
        /// <summary>
        /// Inicia inundacao da rede
        /// </summary>
        public Pacote(ref Panel Painel, No NoInicio, int Saltos, Color Cor, byte Versao)
        {
            Cancelar = false;

            //Para cada viziho do no cria uma animacao
            foreach (var Vizinho in NoInicio.Vizinhos)
            {
                //Cria novo caminho
                Caminho c = new Caminho();

                //Adiciona o no ao caminho
                c.ListadeNos.Add(NoInicio);

                //Cria pacote para o vizinho
                p = new Pacote(ref Painel, NoInicio, Vizinho, Saltos, Cor, Versao, c);
            }
        }
예제 #3
0
        private void btnIniciar_Click(object sender, EventArgs e)
        {
            //Inicia execucao com o primeiro no da lista como no de origem
            if (Versao == 3)
            {
                if (!ProcessoEmExecucao())
                {
                    CarregarVizinhos(Caminho.MelhorCaminho(ListaDeNos.Count() - 1));
                    Iniciar(NoInicial);
                }
                else
                {
                    MessageBox.Show("O algoritmo 3 ainda esta inundando a rede");
                }
            }
            else
            {
                CarregarVizinhos();

                Iniciar(NoInicial);
            }
        }