public:vj1231:arbolesdedecision:start
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| public:vj1231:arbolesdedecision:start [2026/10/06 10:44] – [Componentes del árbol] mperez | public:vj1231:arbolesdedecision:start [2026/10/06 11:07] (actual) – [Árboles dirigidos por datos (data-driven)] mperez | ||
|---|---|---|---|
| Línea 87: | Línea 87: | ||
| - | ====== Ejemplo | + | ===== Ejemplo ===== |
| Línea 139: | Línea 139: | ||
| Puedes ver y ejecutar el ejemplo en este {{ : | Puedes ver y ejecutar el ejemplo en este {{ : | ||
| + | ====== Árboles dirigidos por datos (data-driven) ====== | ||
| + | Es un caso muy similar al enfoque orientado a objetos, pero en este caso el árbol se define en un archivo de datos externo (como un JSON, XML o un formato binario personalizado). El juego carga este archivo en tiempo de ejecución (o en tiempo de carga) y un parser lo convierte en la estructura de Objetos mencionada en el enfoque anterior. | ||
| + | |||
| + | Por ejemplo, el NPC tímido se representaria de esta forma | ||
| + | |||
| + | <code json> | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | }, | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | y el código en python para leer el '' | ||
| + | |||
| + | <code python> | ||
| + | def construir_arbol(nodo_json): | ||
| + | """ | ||
| + | Lee un diccionario JSON y devuelve una instancia de NodoDecision o Hoja. | ||
| + | """ | ||
| + | tipo = nodo_json.get(" | ||
| + | | ||
| + | if tipo == " | ||
| + | # Caso base: Es una hoja. Buscamos la función en el registro. | ||
| + | nombre_accion = nodo_json[" | ||
| + | funcion_accion = REGISTRO_ACCIONES[nombre_accion] | ||
| + | return Hoja(funcion_accion) | ||
| + | | ||
| + | elif tipo == " | ||
| + | # Caso recursivo: Es un nodo de decisión. | ||
| + | nombre_condicion = nodo_json[" | ||
| + | funcion_condicion = REGISTRO_CONDICIONES[nombre_condicion] | ||
| + | | ||
| + | nodo = NodoDecision(funcion_condicion) | ||
| + | | ||
| + | # Construimos las ramas recursivamente | ||
| + | nodo.true_case = construir_arbol(nodo_json[" | ||
| + | nodo.false_case = construir_arbol(nodo_json[" | ||
| + | | ||
| + | return nodo | ||
| + | else: | ||
| + | raise ValueError(f" | ||
| + | </ | ||
| + | |||
| + | y se construiría con | ||
| + | <code python> | ||
| + | def crear_arbol(self, | ||
| + | arbol = construir_arbol(datos_json) | ||
| + | return arbol | ||
| + | </ | ||
public/vj1231/arbolesdedecision/start.1791283497.txt.gz · Última modificación: por mperez
