private void Form1_Load(object sender, EventArgs e) { cidades = new ArvoreBinaria <Cidade>(); // instancia a arvore dlgAbrir.Title = "Ler cidades de: "; // coloca um titulo no dialog LerDeArquivo(true); // chama o metodo de leitura de arquivo dlgAbrir.Title = "Ler caminhos de: "; // coloca outro titulo no mesmo dialog caminhos = new CaminhoEntreCidades[cidades.QuantosNos, cidades.QuantosNos]; //instancia a matriz com a quiantidade de elementos da arvore LerDeArquivo(false); //chama o metodo de leitura de arquivo calc = new CalculadoraDeRotas(cidades.QuantosNos, caminhos); //instancia a calculadora de rotas com os caminhos e a quantidade de elementos da arvore rotaSelecionada = new List <Cidade>(); // instancia a rota selecionada cidades.ExecutaEmTodos((Cidade c) => //chama o metodo da arvore que recebe uma funcao como parametro e excutara essa funcao em todos os nos da arvore { string mostrante = c.ToString(); // recebe o nome da cidade lsbOrigem.Items.Add(mostrante); // escrve no listBox de origem lsbDestino.Items.Add(mostrante); // escrve no listBox de destino }); // coloca os selecionados do ListBox em duas cidades diferentes lsbOrigem.SelectedIndex = 0; lsbDestino.SelectedIndex = 1; }
private void pbMapa_Paint(object sender, PaintEventArgs e) //desenhar no mapa presente no pictureBox { //instancia numeros base para o redimensionamento da imagem double redimenLargura = Math.Round((double)pbMapa.Width / 4096, 10); double redimenAltura = Math.Round((double)pbMapa.Height / 2048, 10); Graphics grafs = e.Graphics; int tamanhoEsfera = Convert.ToInt32(35 * redimenLargura); cidades.ExecutaEmTodos((Cidade c) => // chama o metodo em todos os nos da arvore { // redimensiona as coordenadas da cidade de acordo com o tamanho do mapa int x = Convert.ToInt32(c.X * redimenLargura); int y = Convert.ToInt32(c.Y * redimenAltura); grafs.FillEllipse(preenchimento, x, y, tamanhoEsfera, tamanhoEsfera); // desenha um circulo nas coordenadas redimenionadas da cidade string nome = c.Nome; // guarda o nome da cidade grafs.DrawString(nome, new Font("Courier New", tamanhoEsfera, FontStyle.Bold), new SolidBrush(Color.Black), x - (nome.Length * 4), y - 20); // escreve o nome da cidade no mapa }); int centroPonto = tamanhoEsfera / 2; void DesenharLinha(int xIni, int yIni, int xFim, int yFim) { grafs.DrawLine(caneta, Convert.ToInt32(xIni * redimenLargura) + centroPonto, Convert.ToInt32(yIni * redimenAltura) + centroPonto, Convert.ToInt32(xFim * redimenLargura) + centroPonto, Convert.ToInt32(yFim * redimenAltura) + centroPonto); } for (int i = 0; i < rotaSelecionada.Count - 1; i++) // percorre a rota selecionada { Cidade origem = rotaSelecionada[i]; // armazena a "cidade atual"na lista (for) Cidade destino = rotaSelecionada[i + 1]; // armazena a proxima cidade if ((origem.Nome == "Arrakeen" || origem.Nome == "Senzeni Na") && destino.Nome == "Gondor") //Caso seja um dos dois casos especiais { int yNovo = 0; // variavel local na nova coordenada y if (origem.Nome == "Arrakeen") { yNovo = 1000; } else //Se não é Arrakeen, logo deve ser Senzeni Na { yNovo = 1350; } DesenharLinha(origem.X, origem.Y, -50, yNovo); // desenha a linha da cidade de rigem ate o novo ponto (na lateral do mapa para se liga a outra cidade na lateral oposta) DesenharLinha(4096, yNovo, destino.X, destino.Y); // desenha a linha do novo ponto ate a cidade de destino (na lateral do mapa para se liga a outra cidade na lateral oposta) } else // se nao for, desenhamos a linha entre as cidades normalmente { DesenharLinha(origem.X, origem.Y, destino.X, destino.Y); } } }