Herramientas de usuario

Herramientas del sitio


public:vj1231:arbolesdedecision:start

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
public:vj1231:arbolesdedecision:start [2026/10/06 10:44] – [Componentes del árbol] mperezpublic: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 {{ :public:vj1231:arbolesdedecision:decisiontreeexample.v3.py.tar.gz | script de python}} Puedes ver y ejecutar el ejemplo en este {{ :public:vj1231:arbolesdedecision:decisiontreeexample.v3.py.tar.gz | script de python}}
  
 +====== Á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>
 +{
 +  "type": "decision",
 +  "condition": "en_mision_alerta",
 +  "true_branch": {
 +    "type": "decision",
 +    "condition": "muy_cerca_guardia",
 +    "true_branch": {
 +      "type": "action",
 +      "action": "irse_al_guardia"
 +    },
 +    "false_branch": {
 +      "type": "action",
 +      "action": "completar_informe"
 +    }
 +  },
 +  "false_branch": {
 +    "type": "decision",
 +    "condition": "ve_al_jugador",
 +    "true_branch": {
 +      "type": "decision",
 +      "condition": "muy_cerca_jugador",
 +      "true_branch": {
 +        "type": "action",
 +        "action": "iniciar_mision_alerta"
 +      },
 +      "false_branch": {
 +        "type": "action",
 +        "action": "seguir_jugador"
 +      }
 +    },
 +    "false_branch": {
 +      "type": "action",
 +      "action": "patrullar_bc"
 +    }
 +  }
 +}
 +</code>
 +
 +
 +y el código en python para leer el ''json'' y crear el árbol sería:
 +
 +<code python>
 +def construir_arbol(nodo_json):
 +    """
 +    Lee un diccionario JSON y devuelve una instancia de NodoDecision o Hoja.
 +    """
 +    tipo = nodo_json.get("type")
 +    
 +    if tipo == "action":
 +        # Caso base: Es una hoja. Buscamos la función en el registro.
 +        nombre_accion = nodo_json["action"]
 +        funcion_accion = REGISTRO_ACCIONES[nombre_accion]
 +        return Hoja(funcion_accion)
 +        
 +    elif tipo == "decision":
 +        # Caso recursivo: Es un nodo de decisión.
 +        nombre_condicion = nodo_json["condition"]
 +        funcion_condicion = REGISTRO_CONDICIONES[nombre_condicion]
 +        
 +        nodo = NodoDecision(funcion_condicion)
 +        
 +        # Construimos las ramas recursivamente
 +        nodo.true_case = construir_arbol(nodo_json["true_branch"])
 +        nodo.false_case = construir_arbol(nodo_json["false_branch"])
 +        
 +        return nodo
 +    else:
 +        raise ValueError(f"Tipo de nodo desconocido: {tipo}")
 +</code>
 +
 +y se construiría con 
 +<code python>
 +    def crear_arbol(self, datos_json):
 +        arbol = construir_arbol(datos_json)
 +        return arbol
 +</code>
public/vj1231/arbolesdedecision/start.1791283497.txt.gz · Última modificación: por mperez