private void tabla_de_reglas(Vehiculo vehiculo, Percepcion p)
        {
            if (vehiculo.Encendido == false)
            { }
            else
            if (p.Calle == null && p.Interseccion == null)//en modo contingencia los vehiculos frenan cuando se salen de las calles
                Fisica.frenar(vehiculo, vehiculo);
            else if (p.VehiculoFrente != null)            // si hay un vehiculo alfrente entonces frena
                Fisica.frenar(vehiculo, p.VehiculoFrente);
            else if (p.Pare != null && p.PasoCebra == null && Fisica.distanciaAEnMetros(vehiculo, p.Pare) > 8 && vehiculo.VelocidadActualKmH < 15)
                Fisica.acelerar(vehiculo);
            else if (p.LomoToro != null && vehiculo.VelocidadActualKmH > p.LomoToro.VelocidadRecomendada)
                Fisica.frenar(vehiculo, p.LomoToro);
            else if (p.Pare != null && p.PasoCebra != null && Fisica.distanciaAEnMetros(vehiculo, p.PasoCebra) > 9 && vehiculo.VelocidadActualKmH < 15)
                Fisica.acelerar(vehiculo);
            else if (p.Pare != null && vehiculo.VelocidadActualKmH != 0 && p.PasoCebra == null)//frenar con signo pare
                Fisica.frenar(vehiculo, p.Calle);
            else if (p.Pare != null && vehiculo.VelocidadActualKmH != 0 && p.PasoCebra != null && Fisica.distanciaAEnMetros(vehiculo, p.PasoCebra) > 0.5)//frenar con paso cebra y pare
                Fisica.frenar(vehiculo, p.PasoCebra);
            else if (p.Semaforo != null && p.Semaforo.EstadoLuzRoja && p.PasoCebra == null && Fisica.distanciaAEnMetros(vehiculo, p.Semaforo) > 4 && vehiculo.VelocidadActualKmH < 15)
                Fisica.acelerar(vehiculo);
            else if (p.Semaforo != null && p.Semaforo.EstadoLuzRoja && p.PasoCebra != null && Fisica.distanciaAEnMetros(vehiculo, p.PasoCebra) > 5 && vehiculo.VelocidadActualKmH < 15)
                Fisica.acelerar(vehiculo);
            else if (p.Semaforo != null && p.Semaforo.EstadoLuzRoja && p.PasoCebra == null)//frenar luz roja del cemaforo
                Fisica.frenar(vehiculo, p.Calle);
            else if (p.Semaforo != null && p.Semaforo.EstadoLuzRoja && p.PasoCebra != null)//frenar con luz roja del semaforo y paso cebra
                Fisica.frenar(vehiculo, p.PasoCebra);
            else if (p.Semaforo != null && p.Semaforo.EstadoLuzAmarilla && p.PasoCebra == null && Fisica.alcanzoFrenar(vehiculo, p.Calle))//frenar luz roja del cemaforo
                Fisica.frenar(vehiculo, p.Calle);
            else if (p.Semaforo != null && p.Semaforo.EstadoLuzAmarilla && p.PasoCebra != null && Fisica.alcanzoFrenar(vehiculo, p.PasoCebra))//frenar con luz roja del semaforo y paso cebra
                Fisica.frenar(vehiculo, p.PasoCebra);
            else if (p.Bache != null && Fisica.distanciaAEnMetros(vehiculo, p.Bache) > 1)//reducir la velocidad si hay bache
                Fisica.frenar(vehiculo, p.Bache);

            //Cuando cumplio el objetivo o cuando no tiene
				else if (this.siguienteCalle() == 0 && p.Calle != null && vehiculo.caminoRecto() && vehiculo.VelocidadActualKmH > 0)
                Fisica.frenar(vehiculo, vehiculo);
            //Espera antes de elegit un nuevo objetivo
            else if (this.siguienteCalle() == 0 && p.Calle != null && vehiculo.VelocidadActualKmH == 0 && tiempoActual <= tiempoEspera)
                tiempoActual++;
            //Crea un nuevo objetivo
            else if (tiempoActual > tiempoEspera)
            {
                origen = -1;
                destino = -1;
                crearObjetivo();
            }
			/*
            //Reglas rotar hacia Sur Intersecciones
			else if (p.Interseccion != null && p.Interseccion.Sur != null && p.Interseccion.Sur.Id == this.siguienteCalle() && (ultimaAccion == DOBLARSUR || vehiculo.caminoRecto()) && (p.Interseccion.Sur.SentidoCarril1 == Elemento.DE1A2 || p.Interseccion.Sur.SentidoCarril2 == Elemento.DE1A2) && vehiculo.Orientacion != Elemento.NORTE)
            { ultimaAccion = Fisica.doblarSur(vehiculo, p.Interseccion); trabAprender += 1; }
            //Reglas rotar hacia Norte Intersecciones
			else if (p.Interseccion != null && p.Interseccion.Norte != null && p.Interseccion.Norte.Id == this.siguienteCalle() && (ultimaAccion == DOBLARNORTE || vehiculo.caminoRecto()) && (p.Interseccion.Norte.SentidoCarril1 == Elemento.DE2A1 || p.Interseccion.Norte.SentidoCarril2 == Elemento.DE2A1) && vehiculo.Orientacion != Elemento.SUR)
            { ultimaAccion = Fisica.doblarNorte(vehiculo, p.Interseccion); trabAprender += 1; }
            //Reglas rotar hacia Oeste Intersecciones
			else if (p.Interseccion != null && p.Interseccion.Oeste != null && p.Interseccion.Oeste.Id == this.siguienteCalle() && (ultimaAccion == DOBLAROESTE || vehiculo.caminoRecto()) && (p.Interseccion.Oeste.SentidoCarril1 == Elemento.DE2A1 || p.Interseccion.Oeste.SentidoCarril2 == Elemento.DE2A1) && vehiculo.Orientacion != Elemento.ESTE)
            { ultimaAccion = Fisica.doblarOeste(vehiculo, p.Interseccion); trabAprender += 1; }
            //Reglas rotar hacia Este Intersecciones
			else if (p.Interseccion != null && p.Interseccion.Este != null && p.Interseccion.Este.Id == this.siguienteCalle() && (ultimaAccion == DOBLARESTE || vehiculo.caminoRecto()) && (p.Interseccion.Este.SentidoCarril1 == Elemento.DE1A2 || p.Interseccion.Este.SentidoCarril2 == Elemento.DE1A2) && vehiculo.Orientacion != Elemento.OESTE)
            { ultimaAccion = Fisica.doblarEste(vehiculo, p.Interseccion); trabAprender += 1; }


            //Corrige la posicion despues de girar
            else if (p.Calle != null && ultimaAccion == DOBLARSUR)
                ultimaAccion = Fisica.doblarSur(vehiculo, p.Calle);
            else if (p.Calle != null && ultimaAccion == DOBLARNORTE)
                ultimaAccion = Fisica.doblarNorte(vehiculo, p.Calle);
            else if (p.Calle != null && ultimaAccion == DOBLAROESTE)
                ultimaAccion = Fisica.doblarOeste(vehiculo, p.Calle);
            else if (p.Calle != null && ultimaAccion == DOBLARESTE)
                ultimaAccion = Fisica.doblarEste(vehiculo, p.Calle);

			*/
            //Señal de velocidad maxima y recordar lo visto previamente
            else if (p.Limite != null && p.Calle != null && señales.obtenerSeñaletica(p.Calle.Nombre) == null)
            {
                señales.agregarSeñaletica(p.Calle.Nombre, p.Limite);
                Fisica.avanzar(vehiculo);
            }
            else if (p.Calle != null && señales.obtenerSeñaletica(p.Calle.Nombre) != null && vehiculo.VelocidadActualKmH + 2 < señales.obtenerSeñaletica(p.Calle.Nombre).Velocidad)
                Fisica.acelerar(vehiculo);
            else if (p.Calle != null && señales.obtenerSeñaletica(p.Calle.Nombre) != null && vehiculo.VelocidadActualKmH - 2 > señales.obtenerSeñaletica(p.Calle.Nombre).Velocidad)
                Fisica.frenar(vehiculo, p.Calle);
            else if (p.Calle != null && señales.obtenerSeñaletica(p.Calle.Nombre) != null && (vehiculo.VelocidadActualKmH + 2 >= señales.obtenerSeñaletica(p.Calle.Nombre).Velocidad || vehiculo.VelocidadActualKmH - 2 <= señales.obtenerSeñaletica(p.Calle.Nombre).Velocidad))
                Fisica.avanzar(vehiculo);

            else if (vehiculo.VelocidadActualKmH + 2 < Configuracion.velocidadMaximaUrbano)
                Fisica.acelerar(vehiculo);
            else if (vehiculo.VelocidadActualKmH - 2 > Configuracion.velocidadMaximaUrbano)
                Fisica.frenar(vehiculo, p.Calle);
            else if (vehiculo.VelocidadActualKmH + 2 >= Configuracion.velocidadMaximaUrbano || vehiculo.VelocidadActualKmH - 2 <= Configuracion.velocidadMaximaUrbano)
                Fisica.avanzar(vehiculo);
        }