private void Start() { if (!transicion) { transicion = GameObject.FindGameObjectWithTag("Transicion").GetComponent <Transicion>(); } }
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"); }
/// <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); }
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; }
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"); }
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"); }
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"); }
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); }
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; } } } }
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); } } } } }
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"); } }