/// <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 }
/// <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); } }
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); } }