示例#1
0
        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;
        }
示例#2
0
        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);
                }
            }
        }