Esempio n. 1
0
 private void Start()
 {
     if (!transicion)
     {
         transicion = GameObject.FindGameObjectWithTag("Transicion").GetComponent <Transicion>();
     }
 }
Esempio n. 2
0
        public override void MakeStatesAndTransition()
        {
            this.nombresEstados = new State[11];
            nombresEstados[0]   = new State("S0", false);
            nombresEstados[1]   = new State("S1", false);
            nombresEstados[2]   = new State("S2", false);
            nombresEstados[3]   = new State("S3", false);
            nombresEstados[4]   = new State("S4", false);
            nombresEstados[5]   = new State("S5", false);
            nombresEstados[6]   = new State("S6", false);
            nombresEstados[7]   = new State("S7", false);
            nombresEstados[8]   = new State("S8", false);
            nombresEstados[9]   = new State("S9", false);
            nombresEstados[10]  = new State("S10", true);

            this.transiciones = new Transicion[10];
            transiciones[0]   = new Transicion('I', "S0", "S1");
            transiciones[1]   = new Transicion('N', "S1", "S2");
            transiciones[2]   = new Transicion('C', "S2", "S3");
            transiciones[3]   = new Transicion('R', "S3", "S4");
            transiciones[4]   = new Transicion('E', "S4", "S5");
            transiciones[5]   = new Transicion('M', "S5", "S6");
            transiciones[6]   = new Transicion('E', "S6", "S7");
            transiciones[7]   = new Transicion('N', "S7", "S8");
            transiciones[8]   = new Transicion('T', "S8", "S9");
            transiciones[9]   = new Transicion('O', "S9", "S10");
        }
Esempio n. 3
0
        /// <summary>
        /// <para>Fija la posicion dada</para>
        /// </summary>
        /// <param name="pos"></param>
        /// <param name="animacion"></param>
        /// <returns></returns>
        public Tweener SetPosicion(Posicion pos, bool animacion)        // Fija la posicion dada
        {
            PosicionActual = pos;

            // Comprobar la posicion actual
            if (PosicionActual == null)
            {
                return(null);
            }

            // Detener la transicion
            if (InTransicion)
            {
                Transicion.Stop();
            }

            // Comprobar si hay animacion
            if (animacion)
            {
                // Mover a la posicion
                Transicion = anchor.MoverToAnchorPosicion(pos.anchor, pos.anchorParent, pos.offset);
                return(Transicion);
            }
            else
            {
                // Ajustar al anchor
                anchor.SnapToAnchorPosicion(pos.anchor, pos.anchorParent, pos.offset);
                return(null);
            }
        }
        private void Event_NewTransicion(object sender, RoutedEventArgs e)
        {
            if (cbOrigen.SelectedIndex == -1 || cbDestino.SelectedIndex == -1 || cbEntrada.SelectedIndex == -1)
            {
                return;
            }

            Estado origen  = (Estado)cbOrigen.SelectedItem;
            Estado destino = (Estado)cbDestino.SelectedItem;
            string entrada = (string)cbEntrada.SelectedItem;

            // Verificar que la entrada no esté repetida
            foreach (var t in AFND.Transiciones)
            {
                if (t.Origen == origen && t.Destino == destino && t.Entrada == entrada)
                {
                    return;
                }
            }

            var transicion = new Transicion
            {
                Origen  = origen,
                Destino = destino,
                Entrada = entrada
            };

            AFND.Transiciones.Add(transicion);
            lbTransiciones.Items.Add(transicion);
        }
Esempio n. 5
0
 public GameObject ambiente; //para pruebas
 // Start is called before the first frame update
 void Start()
 {
     this.speed       = 5;
     this.sensitivity = 100;
     this.caliber     = 500;
     this.cuadrante   = null;
     transicion       = new Transicion();
     this.available   = true;
 }
Esempio n. 6
0
        public override void MakeStatesAndTransition()
        {
            this.nombresEstados = new State[2];
            nombresEstados[0]   = new State("S0", false);
            nombresEstados[1]   = new State("S1", true);

            this.transiciones = new Transicion[1];
            transiciones[0]   = new Transicion('(', "S0", "S1");
        }
        public override void MakeStatesAndTransition()
        {
            this.nombresEstados = new State[3];
            nombresEstados[0]   = new State("S0", false);
            nombresEstados[1]   = new State("S1", false);
            nombresEstados[2]   = new State("S2", true);

            this.transiciones = new Transicion[5];
            transiciones[0]   = new Transicion('/', "S0", "S1");
            transiciones[1]   = new Transicion('/', "S1", "S2");
            transiciones[2]   = new Transicion('#', "S2", "S2");
            transiciones[3]   = new Transicion('$', "S2", "S2");
            transiciones[4]   = new Transicion(' ', "S2", "S2");
        }
        public override void MakeStatesAndTransition()
        {
            this.nombresEstados = new State[5];
            nombresEstados[0]   = new State("S0", false);
            nombresEstados[1]   = new State("S1", false);
            nombresEstados[2]   = new State("S2", false);
            nombresEstados[3]   = new State("S3", false);
            nombresEstados[4]   = new State("S4", true);

            this.transiciones = new Transicion[4];
            transiciones[0]   = new Transicion('S', "S0", "S1");
            transiciones[1]   = new Transicion('I', "S1", "S2");
            transiciones[2]   = new Transicion('N', "S2", "S3");
            transiciones[3]   = new Transicion('O', "S3", "S4");
        }
Esempio n. 9
0
        public override void MakeStatesAndTransition()
        {
            this.nombresEstados = new State[6];
            nombresEstados[0]   = new State("S0", false);
            nombresEstados[1]   = new State("S1", false);
            nombresEstados[2]   = new State("S2", false);
            nombresEstados[3]   = new State("S3", false);
            nombresEstados[4]   = new State("S4", false);
            nombresEstados[5]   = new State("S5", true);

            this.transiciones = new Transicion[5];
            transiciones[0]   = new Transicion('H', "S0", "S1");
            transiciones[1]   = new Transicion('A', "S1", "S2");
            transiciones[2]   = new Transicion('C', "S2", "S3");
            transiciones[3]   = new Transicion('E', "S3", "S4");
            transiciones[4]   = new Transicion('R', "S4", "S5");
        }
Esempio n. 10
0
    IEnumerator TransicionDeEncuentro(string escena)
    {
        Transicion transicion = camara.GetComponent <Transicion>();

        if (transicion == null)
        {
            camara.gameObject.AddComponent <Transicion>();
        }
        while (transicion.corte < 1)
        {
            yield return(new WaitForEndOfFrame());

            transicion.corte += Time.deltaTime * 2; //La transición ocurre en medio segundo
        }

        SceneManager.LoadScene(escena);
    }
        public override void MakeStatesAndTransition()
        {
            this.nombresEstados = new State[7];
            nombresEstados[0]   = new State("S0", false);
            nombresEstados[1]   = new State("S1", false);
            nombresEstados[2]   = new State("S2", false);
            nombresEstados[3]   = new State("S3", false);
            nombresEstados[4]   = new State("S4", false);
            nombresEstados[5]   = new State("S5", false);
            nombresEstados[6]   = new State("S6", true);

            this.transiciones = new Transicion[6];
            transiciones[0]   = new Transicion('E', "S0", "S1");
            transiciones[1]   = new Transicion('n', "S1", "S2");
            transiciones[2]   = new Transicion('t', "S2", "S3");
            transiciones[3]   = new Transicion('e', "S3", "S4");
            transiciones[4]   = new Transicion('r', "S4", "S5");
            transiciones[5]   = new Transicion('o', "S5", "S6");
        }
Esempio n. 12
0
        public void armarAFD()
        {
            Dictionary <String, Nodo> listaEstados = new Dictionary <String, Nodo>();

            //Enumerar Nodos y marcar aceptacion
            foreach (EstadoD estado in this.estadosD)
            {
                estado.nodo     = new Nodo("S" + estado.num.ToString());
                estado.nodo.num = estado.num;
                listaEstados.Add(estado.nodo.num.ToString(), estado.nodo);
                if (estado.aceptacion)
                {
                    estado.nodo.aceptacion = true;
                }
            }

            //Enlazar
            foreach (EstadoD estado in this.estadosD)
            {
                foreach (Move movimiento in estado.movimientos.Values)
                {
                    if (movimiento.particion != null)
                    {
                        Transicion tra = new Transicion(movimiento.simbolo, estado.nodo, movimiento.particion.nodo);
                        estado.nodo.transiciones.Add(tra);
                    }
                }
            }

            //Automata afd = new Automata(this.estadosD.First.Value.nodo, this.estadosD.Last.Value.nodo);
            Automata afd = new Automata(this.estadosD[0].nodo, this.estadosD[this.estadosD.Count - 1].nodo);

            afd.listaEstados  = listaEstados;
            afd.listaSimbolos = afn.listaSimbolos;

            //Graficar
            Graficador g = new Graficador();

            //Regla_0_Str
            g.AFD_graficar(ruta_relativa, listaEstados);
        }
Esempio n. 13
0
        public override void MakeStatesAndTransition()
        {
            this.nombresEstados = new State[8];
            nombresEstados[0]   = new State("S0", false);
            nombresEstados[1]   = new State("S1", false);
            nombresEstados[2]   = new State("S2", false);
            nombresEstados[3]   = new State("S3", false);
            nombresEstados[4]   = new State("S4", false);
            nombresEstados[5]   = new State("S5", false);
            nombresEstados[6]   = new State("S6", false);
            nombresEstados[7]   = new State("S7", true);

            this.transiciones = new Transicion[7];
            transiciones[0]   = new Transicion('D', "S0", "S1");
            transiciones[1]   = new Transicion('e', "S1", "S2");
            transiciones[2]   = new Transicion('c', "S2", "S3");
            transiciones[3]   = new Transicion('i', "S3", "S4");
            transiciones[4]   = new Transicion('m', "S4", "S5");
            transiciones[5]   = new Transicion('a', "S5", "S6");
            transiciones[6]   = new Transicion('l', "S6", "S7");
        }
        public void generar_afd()
        {
            List <int> e0 = new List <int>();

            e0.Add(0);
            List <int> ir_e0 = ir(e0, "Epsilon");

            if (ir_e0.Count == 0)
            {
                ir_e0.Add(0);
            }
            estados_afd.Add(new Estado(string.Join(",", ir_e0.ToArray())));

            Estado tmp = estados_afd.ElementAt(0);

            tmp.visitado = true;
            while (tmp != null)
            {
                for (int i = 0; i < terminales.Count; i++)
                {
                    List <int> ir_terminal = ir(ir_e0, terminales.ElementAt(i).getLexema());
                    String     stir        = string.Join(",", ir_terminal.ToArray());

                    Estado nuevo = existe_estado(stir);
                    if (ir_terminal.Count > 0)
                    {
                        Transicion tr = null;
                        if (!tmp.existe_transicion(terminales.ElementAt(i), stir))
                        {
                            tr = new Transicion(stir, terminales.ElementAt(i));
                            tmp.transiciones.Add(tr);
                        }
                        if (nuevo == null)
                        {
                            nuevo        = new Estado();
                            nuevo.sigs   = ir_terminal;
                            nuevo.puente = stir;
                            if (tr != null)
                            {
                                tr.e_final = nuevo;
                            }
                            estados_afd.Add(nuevo);
                        }
                        else
                        {
                            tr.e_final = nuevo;
                        }
                    }
                }
                tmp = buscar_no_visitado(estados_afd);
                if (tmp != null)
                {
                    ir_e0 = ir(tmp.sigs, "Epsilon");

                    if (ir_e0.Count == 0)
                    {
                        ir_e0 = tmp.sigs;
                    }
                    if (ir_e0.Contains(index_afn - 1))
                    {
                        tmp.aceptacion = true;
                    }
                }
            }
        }
Esempio n. 15
0
        private static void GenerarEstadosCompuestos(ref Automata AFD, List <Transicion> TransicionesAFND)
        {
            var tCompuestas = TransicionesAFND.GroupBy(t => new { t.Origen, t.Entrada },
                                                       (key, group) => new
            {
                key.Origen,
                key.Entrada,
                Destinos = group.Select(x => x.Destino)
            });     //.Where(x => x.Destinos.Count() > 1);

            foreach (var tc in tCompuestas)
            {
                if (tc.Destinos.Count() > 1)
                {
                    var  strNombre = string.Empty;
                    bool isFinal   = false;
                    var  destinos  = new List <Estado>();
                    foreach (var d in tc.Destinos.OrderBy(x => x.Nombre))
                    {
                        if (destinos.Contains(d))
                        {
                            continue;
                        }
                        destinos.Add(d);
                        strNombre += d.Nombre;
                        if (d.Aceptacion)
                        {
                            isFinal = true;
                        }
                    }
                    Estado estado = AFD.Estados.Find(x => x.Nombre == strNombre);
                    if (estado == null)
                    {
                        estado = new EstadoCompuesto(isFinal)
                        {
                            Nombre  = strNombre,
                            Estados = tc.Destinos.ToList()
                        };
                        AFD.Estados.Add(estado);
                        var nt = new Transicion
                        {
                            Origen  = tc.Origen,
                            Entrada = tc.Entrada,
                            Destino = estado,
                        };
                        if (AFD.Transiciones.Find(x =>
                                                  x.Origen == nt.Origen &&
                                                  x.Destino == nt.Destino &&
                                                  x.Entrada == nt.Entrada
                                                  ) == null)
                        {
                            AFD.Transiciones.Add(nt);
                        }

                        foreach (var e in ((EstadoCompuesto)estado).Estados)
                        {
                            var transiciones = new List <Transicion>();
                            foreach (var t in TransicionesAFND.Where(x => x.Origen == e))
                            {
                                var nti = new Transicion
                                {
                                    Origen  = estado,
                                    Entrada = t.Entrada,
                                    Destino = t.Destino
                                };
                                if (transiciones.Find(x =>
                                                      x.Origen == nti.Origen &&
                                                      x.Destino == nti.Destino &&
                                                      x.Entrada == nti.Entrada
                                                      ) == null)
                                {
                                    transiciones.Add(nti);
                                }
                            }
                            TransicionesAFND.AddRange(transiciones);
                        }


                        GenerarEstadosCompuestos(ref AFD, TransicionesAFND);
                    }
                    else
                    {
                        if (estado.GetType() == typeof(EstadoCompuesto))
                        {
                            var nt = new Transicion
                            {
                                Origen  = tc.Origen,
                                Entrada = tc.Entrada,
                                Destino = estado
                            };
                            if (AFD.Transiciones.Find(x =>
                                                      x.Origen == nt.Origen &&
                                                      x.Destino == nt.Destino &&
                                                      x.Entrada == nt.Entrada
                                                      ) == null)
                            {
                                AFD.Transiciones.Add(nt);
                            }
                        }
                    }
                }
                else
                {
                    if (tc.Destinos.Count() == 1)
                    {
                        var destino = tc.Destinos.First();
                        if (AFD.Estados.Find(x => x == destino) == null)
                        {
                            AFD.Estados.Add(destino);
                        }
                        var nt = new Transicion {
                            Origen  = tc.Origen,
                            Destino = destino,
                            Entrada = tc.Entrada
                        };
                        if (AFD.Transiciones.Find(x =>
                                                  x.Origen == nt.Origen &&
                                                  x.Destino == nt.Destino &&
                                                  x.Entrada == nt.Entrada
                                                  ) == null)
                        {
                            AFD.Transiciones.Add(nt);
                        }
                    }
                }
            }
        }
Esempio n. 16
0
 public bool IsEqual(Transicion otra)
 {
     return(Origen == otra.Origen && Entrada == otra.Entrada && Destino == otra.Destino);
 }
        private void GenerarNuevoEstado(List <Transicion> listAFNDA, string[] estFin)
        {
            //Eliminar estados repetidos
            string[] B           = estFin.Distinct().ToArray();
            string   estadoNuevo = string.Join(",", B);

            //Verifico si el estado existe
            bool flagExist = false;

            foreach (Transicion itmen in ListAFDA)
            {
                string estadoAct = string.Join(",", itmen.EstIncio);
                if (estadoAct == estadoNuevo)
                {
                    //Si existe retorno la lista intacta
                    flagExist = true;
                }
            }
            if (flagExist)
            {
                return;
            }
            //Se comienzan a generar los nuevos estados si es que estos existen
            if (estFin.Length > 0)
            {
                //Se crea la nueva trasicion del nuevo caso
                Transicion transicion = new Transicion();
                transicion.EstIncio = estFin;
                //Se leen letra por letra del nuevo estado

                //Guardo las transiciones por letra del nuevo estado
                List <Transicion> transNew = new List <Transicion>();
                foreach (string estado in estFin)
                {
                    //Obtengo la transicion del estado
                    Transicion transEstado = listAFNDA.Find(x => x.EstIncio.Contains(estado));
                    if (transEstado.flagTerminal)
                    {
                        transicion.flagTerminal = true;
                    }
                    transNew.Add(transEstado);
                }
                //Guardo los nuevos casos
                List <Caso> newCasos = new List <Caso>();
                for (int i = 0; i < Convert.ToInt32(txtNumCase.Text); i++)
                {
                    Caso caso = new Caso();
                    caso.CasoN = i;
                    string stfinal = "";
                    for (int c = 0; c < transNew.Count; c++)
                    {
                        string estaFin = string.Join(",", transNew[c].casos[i].EstFin);
                        if (string.IsNullOrEmpty(stfinal) && !string.IsNullOrEmpty(estaFin))
                        {
                            stfinal += estaFin;
                        }
                        else if (!string.IsNullOrEmpty(estaFin))
                        {
                            stfinal += "," + estaFin;
                        }
                    }
                    string[] stFin = stfinal.Split(',').Distinct().ToArray();
                    caso.EstFin = stFin;
                    //Verifico si el estado existe
                    flagExist   = false;
                    estadoNuevo = stfinal;
                    foreach (Transicion itmen in ListAFDA)
                    {
                        string estadoAct = string.Join(",", itmen.EstIncio);
                        if (estadoAct == estadoNuevo)
                        {
                            //Si existe retorno la lista intacta
                            flagExist = true;
                        }
                    }
                    if (flagExist)
                    {
                        caso.newEst = false;
                    }
                    else
                    {
                        caso.newEst = true;
                    }
                    newCasos.Add(caso);
                }
                transicion.casos = newCasos;
                ListAFDA.Add(transicion);
                NumRow++;
                GenerarAFDALoop(listAFNDA);
            }
            return;
        }
        /// <summary>
        /// Inico para genarar de AFNDA a AFDA
        /// </summary>
        /// <returns></returns>
        private void GenerarAFDA()
        {
            try
            {
                DT       = new DataTable("AFDA");
                NumRow   = 0;
                ListAFDA = new List <Transicion>();
                //Columnas
                DT.Columns.Add("Estados");
                for (int i = 0; i < Convert.ToInt32(txtNumCase.Text); i++)
                {
                    DT.Columns.Add("Caso: " + i);
                }
                //Mapear estados del AFNDA
                int FlagStart = -1;
                List <Entidades.Transicion> transicions = new List <Entidades.Transicion>();
                foreach (DataRowView row in GridAFNDA.Items)
                {
                    //Creamos un objetos de estado
                    Entidades.Transicion transicion = new Transicion();
                    //se guarda el caso inicial
                    string[] EstInit;
                    EstInit = row[0].ToString().Replace("->", "").Replace("*", "").Split(',');
                    bool isTeminal = IsTerminal(row[0].ToString());
                    bool isInicial = IsInicial(row[0].ToString());
                    transicion.EstIncio  = EstInit;
                    transicion.flagStart = isInicial;
                    if (transicion.flagStart && FlagStart == -1)
                    {
                        FlagStart = transicions.Count();
                    }

                    transicion.flagTerminal = isTeminal;
                    List <Caso> casos = new List <Caso>();

                    for (int i = 0; i < Convert.ToInt32(txtNumCase.Text); i++)
                    {
                        //Creamos nuevo caso
                        Caso caso = new Caso();

                        string[] EstFin;
                        EstFin = row[i + 1].ToString().Split(',');
                        //Si se encuentra con mas de un estado final entonces es el incial.
                        if (EstFin.Length > 1)
                        {
                            //transicion.flagStart = true;
                            caso.newEst = true;
                        }
                        //Si tiene estado final entonces no es un estado terminal
                        if (!String.IsNullOrEmpty(EstFin[0]))
                        {
                            isTeminal = false;
                        }
                        //Guardamos el caso.
                        caso.CasoN  = i;
                        caso.EstFin = EstFin;
                        casos.Add(caso);
                    }
                    //transicion.flagTerminal = isTeminal;
                    transicion.casos = casos;
                    transicions.Add(transicion);
                }
                //Se guarda el estado incial y se setean las variables de estado terminal
                if (FlagStart == -1)
                {
                    MessageBox.Show("Error: No existe estado inical valido!", "Error");
                    DT.Clear();
                    return;
                }
                else
                {
                    ListAFDA.Add(transicions[FlagStart]);
                    GenerarAFDALoop(transicions);
                }
            }
            catch (Exception Error)
            {
                MessageBox.Show("Error: " + Error.Message + "\n" + Error.StackTrace, "Error");
            }
        }