Пример #1
0
 private void mapa_Load(object sender, EventArgs e)
 {
     Configuracion.matriz = new Casilla[Configuracion.Dimensionx, Configuracion.Dimensiony];
     panelbotones.Controls.Clear();
     for (int x = 0; x < Configuracion.Dimensionx; x++)
     {
         for (int y = 0; y < Configuracion.Dimensiony; y++)
         {
             Casilla c = new Casilla();
             c.button.Location = new Point(x * 20, y * 20);
             panelbotones.Controls.Add(c.button);
             c.button.BackColor = default(Color);
             c.X = x;
             c.Y = y;
             Configuracion.matriz[x, y] = c;
         }
     }
     panelbotones.AutoSize = true;
     this.AutoSize         = true;
 }
Пример #2
0
 private void mapa_Load(object sender, EventArgs e)
 {
     Configuracion.matriz = new Casilla[Configuracion.Dimensionx,Configuracion.Dimensiony];
     panelbotones.Controls.Clear();
     for(int x = 0; x < Configuracion.Dimensionx; x++)
     {
         for (int y = 0; y < Configuracion.Dimensiony; y++)
         {
             Casilla c = new Casilla();
             c.button.Location = new Point(x*20, y*20);
             panelbotones.Controls.Add(c.button);
             c.button.BackColor = default(Color);
             c.X = x;
             c.Y = y;
             Configuracion.matriz[x,y] = c;
         }
     }
     panelbotones.AutoSize = true;
     this.AutoSize = true;
 }
Пример #3
0
        public static void algoritmo_estrella()
        {
            List <Casilla> frontera = new List <Casilla>();
            List <Casilla> interior = new List <Casilla>();

            frontera.Add(Nodoinicial);
            Nodoinicial.H1 = Math.Abs((Nodoinicial.X + 1) - (Nodofinal.X + 1)) + Math.Abs((Nodoinicial.Y + 1) - (Nodofinal.Y + 1));
            Nodoinicial.G1 = 0;
            Nodoinicial.F1 = Nodoinicial.H1 + Nodoinicial.G1;
            Boolean sucess = false;

            do
            {
                if (!frontera.Any())
                {
                    MessageBox.Show("Error!");
                    break;
                }
                Casilla n = frontera.First();
                frontera.Remove(frontera.First());
                interior.Add(n);
                n.button.BackColor = Color.LightGreen;
                if (n == Nodofinal)
                {
                    sucess = true;
                }
                else
                {
                    for (int x = n.X - 1; x <= n.X + 1; x++)
                    {
                        for (int y = n.Y - 1; y <= n.Y + 1; y++)
                        {
                            if (x >= 0 && x < Configuracion.Dimensionx)
                            {
                                if (y >= 0 && y < Configuracion.Dimensiony)
                                {
                                    if (!frontera.Contains(Configuracion.matriz[x, y]) && !interior.Contains(Configuracion.matriz[x, y]))
                                    {
                                        if (!Configuracion.matriz[x, y].Bloqueo)
                                        {
                                            Casilla sucesor = Configuracion.matriz[x, y];
                                            frontera.Add(sucesor);
                                            sucesor.button.BackColor = Color.PaleVioletRed;
                                            sucesor.Padre            = n;
                                            sucesor.H1 = Math.Abs((sucesor.X + 1) - (Nodofinal.X + 1)) + Math.Abs((sucesor.Y + 1) - (Nodofinal.Y + 1));
                                            sucesor.G1 = sucesor.Padre.G1;
                                            if (sucesor.X == n.X || sucesor.Y == n.Y)
                                            {
                                                sucesor.G1 = sucesor.G1 + Configuracion.Pesocruz;
                                            }
                                            else
                                            {
                                                sucesor.G1 = sucesor.G1 + Configuracion.Pesodiagonal;
                                            }
                                            sucesor.F1 = sucesor.G1 + sucesor.H1;
                                        }
                                    }
                                    else if (frontera.Contains(Configuracion.matriz[x, y]))
                                    {
                                        float   F, G, H;
                                        Casilla sucesor = Configuracion.matriz[x, y];
                                        H = Math.Abs((sucesor.X + 1) - (Nodofinal.X + 1)) + Math.Abs((sucesor.Y + 1) - (Nodofinal.Y + 1));
                                        G = sucesor.Padre.G1;
                                        if (sucesor.X == n.X || sucesor.Y == n.Y)
                                        {
                                            G = G + Configuracion.Pesocruz;
                                        }
                                        else
                                        {
                                            G = G + Configuracion.Pesodiagonal;
                                        }
                                        F = G + H;
                                        if (F < sucesor.F1)
                                        {
                                            sucesor.Padre = n;
                                            sucesor.F1    = F;
                                            sucesor.G1    = G;
                                            sucesor.H1    = H;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    frontera = frontera.OrderBy(o => o.F1).ToList();
                }
            } while (!sucess);
            if (sucess)
            {
                Casilla n = Nodofinal;
                while (n != null)
                {
                    n.button.BackColor = Color.Orange;
                    n = n.Padre;
                }
            }
            for (int x = 0; x < Configuracion.Dimensionx; x++)
            {
                for (int y = 0; y < Configuracion.Dimensiony; y++)
                {
                    Casilla n       = Configuracion.matriz[x, y];
                    String  mensaje = "Coordenadas: [" + (n.X + 1) + "," + (n.Y + 1) + "]" + " F:" + n.F1 + "\r\n" + "G:" + n.G1 + " H:" + n.H1;
                    n.buttoninfo.AutoPopDelay = 10000;
                    n.buttoninfo.SetToolTip(n.button, mensaje);
                }
            }
        }