1. DESCRIPCIÓN DE CODIGO Y INTERFAZ
Ventana principal
Esta es la ventana principal de nuestro programa, el escenario donde actuará el agente está
dividido en celadas 9 horizontales y 9 verticales, botones para dibujar la partida, llegada,
camino u obstáculo. También una ruta por defecto al presionar usar predeterminado.
Para empezar a ejecutar se debe presionar primero listo en caso de que escogimos dibujar, el
botón nuevo nos permitirá dibujar una nueva ruta.
A continuación describiremos las clases utilizadas
Dentro del codigo del form1 se encuentra todo lo que se refiere a heuristica, ordenar
nodos, presentacion de resultados, expansion de nodos, asignacion de varioables, etc. A
continuación colocamos el codigo:
2. using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace IGU
{
public partial class frmMain : Form
{
String casilla_tipo;
PictureBox casilla_partida;
PictureBox casilla_llegada;
PictureBox casilla_camino;
Nodo miPartida;
Nodo miLlegada;
Nodo mejor;
Nodo alternativa;
ArrayList arbol;
ArrayList ruta;
public frmMain()
{
InitializeComponent();
}
private void frmMain_Load(object sender, EventArgs e)
{
this.Inicializar();
}
private void btnSalir_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void pictureBox_Click(object sender, EventArgs e)
{
PictureBox pbx = ((PictureBox)sender);
if (this.casilla_partida != null || this.casilla_llegada
!= null)
{
if (this.casilla_tipo=="camino" ||
this.casilla_tipo=="obstaculo"){
if (pbx==this.casilla_partida)
{
this.casilla_partida = null;
}
if (pbx == this.casilla_llegada)
{
this.casilla_llegada = null;
}
}
}
pbx.Tag = this.casilla_tipo;
switch (pbx.Tag.ToString())
{
case "camino":
pbx.BackgroundImage = this.imageList.Images[0];
break;
13. this.pbCamino.Enabled = true;
this.pbObstaculo.Enabled = true;
this.pbPartida.Enabled = true;
this.pbLlegada.Enabled = true;
this.panEntorno.Enabled = true;
PictureBox img = new PictureBox();
foreach (Control c in this.panEntorno.Controls)
{
img = ((PictureBox)c);
if (c.Size.Height == 25)
{
img.Tag = "camino";
img.BackgroundImage = this.imageList.Images[0];
img.BackgroundImageLayout = ImageLayout.Stretch;
}
}
this.casilla_camino = this.casilla00;
this.pbCamino.Image = this.imageList.Images[0];
this.pbObstaculo.Image = this.imageList.Images[1];
this.pbPartida.Image = this.imageList.Images[2];
this.pbLlegada.Image = this.imageList.Images[3];
indRuta = 0;
}
}
}
Dentro de la clase Nodo.cs calculamos la la posición delnodo en donde se encuentra
el agente y de los vecinos o nodos sucesores.
A continuación el codigo la clase Nodo.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace IGU
{
class Nodo
{
public Nodo padre;
public string tipo;
public int nivel;
public int pasillo;
public double funcion;
public int costo;
public double heuristica;
public bool visitado = false;
public int nivel_casilla_arriba = -1;
public int nivel_casilla_abajo = -1;
public int nivel_casilla_izquierda = -1;
public int nivel_casilla_derecha = -1;
public int pasillo_casilla_arriba = -1;
public int pasillo_casilla_abajo = -1;
public int pasillo_casilla_izquierda = -1;
public int pasillo_casilla_derecha = -1;
public Nodo(string mtipo, string mnombre)
{