Herramientas de usuario

Herramientas del sitio


manejo_de_eventos

Diferencias

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

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
manejo_de_eventos [2016/07/07 21:09]
al-khwarizmi
manejo_de_eventos [2016/07/08 13:49] (actual)
al-khwarizmi
Línea 216: Línea 216:
 https://​docs.oracle.com/​javase/​6/​docs/​api/​java/​util/​regex/​Pattern.html|clase Pattern]] antes mencionada) como en numerosos libros y tutoriales online. https://​docs.oracle.com/​javase/​6/​docs/​api/​java/​util/​regex/​Pattern.html|clase Pattern]] antes mencionada) como en numerosos libros y tutoriales online.
  
-Con estos mimbres y lo visto en secciones anteriores de la documentación,​ se pueden construir personajes con conversaciones muy ricas y complejas. Por supuesto, lo que se puede hacer va mucho más allá de las secuencias de ''​if''​ como hemos visto en el caso de Manolo, ya que podemos aprovechar los estados y relaciones de AGE para hacer que la conversación de un personaje cambie según el contexto del diálogo. A modo de ejemplo, el siguiente código de conversación pertenece a una mujer que se encuentra el héroe de la aventura "​Fuego":​+Con estos mimbres y lo visto en secciones anteriores de la documentación,​ se pueden construir personajes con conversaciones muy ricas y complejas. Por supuesto, lo que se puede hacer va mucho más allá de las secuencias de ''​if''​ como hemos visto en el caso de Manolo, ya que podemos aprovechar los estados y relaciones de AGE para hacer que la conversación de un personaje cambie según el contexto del diálogo. A modo de ejemplo, el siguiente código de conversación pertenece a una mujer que se encuentra el héroe de la aventura "​Fuego" ​(se ha editado un poco para modernizar el código, ya que esa aventura se hizo en una versión antigua de AGE y de Java menos potente que la actual, donde conseguir algunas cosas era más engorroso):
  
 +<code java>
 (...) (...)
  
-else if ( lText.indexOf("​hola"​) ​>= 0 || lText.indexOf("​buenas"​) ​>= 0 || lText.indexOf("​saludo"​) ​>= 0 || lText.indexOf("​buenos d"​) ​>= 0 )+else if ( lText.contains("​hola"​) || lText.contains("​buenas"​) ​ 
 + || lText.contains("​saludo"​) || lText.contains("​buenos d") )
  {  {
 + //nos están saludando, saludamos de vuelta
  self.say("​Hola..."​);​  self.say("​Hola..."​);​
- String nombre = self.getRelationshipPropertyValueAsString ​, "​nombre"​ );+ //miramos si conocemos el nombre del interlocutor 
 + String nombre = get self , "​nombre"​, m );
  if ( nombre == null || nombre.equals("​unknown"​) )  if ( nombre == null || nombre.equals("​unknown"​) )
  {  {
 + //si no conocemos el nombre, se lo preguntamos. Esperamos que nos lo diga.
  self.say("​¿Cómo te llamas?"​);​  self.say("​¿Cómo te llamas?"​);​
- self.setRelationshipProperty ​, "​esperandonombre"​ , true );+ set self , "​esperandonombre" ​, m , true );
  }  }
  }  }
Línea 236: Línea 241:
 { {
  //si estamos esperando nombre, asumiremos que lo que nos dice lo es.  //si estamos esperando nombre, asumiremos que lo que nos dice lo es.
- if ( self.getRelationshipPropertyValueAsBoolean ​, "​esperandonombre"​ ) )+ if ( get self , "​esperandonombre" ​, m ) )
  {  {
- if ( StringMethods.numToks ​lText , ' ' ​3 )+ if ( !lText.matches("​(\\w*\\W*){1,3}"​) ​)
  {  {
 + //si nos dice algo con más de tres palabras, probablemente no nos esté diciendo su nombre de verdad. Se ha ido por las ramas.
  self.say("​Uy,​ ese nombre es muy largo. Dudo que pueda recordarlo. ¿No te puedo llamar por algún nombre más corto?"​);​   self.say("​Uy,​ ese nombre es muy largo. Dudo que pueda recordarlo. ¿No te puedo llamar por algún nombre más corto?"​);​
  }  }
Línea 246: Línea 252:
  //hacer que el nombre empiece por mayúscula  //hacer que el nombre empiece por mayúscula
  if ( !Character.isUpperCase(lText.charAt(0)) )  if ( !Character.isUpperCase(lText.charAt(0)) )
- lText = Character.toUpperCase(lText.charAt(0)) + lText.substring(1);​ + lText = Character.toUpperCase(lText.charAt(0)) + lText.substring(1);​ 
- self.setRelationshipProperty ( m , "​nombre"​ , (String)lText ); + //​actualizar las relaciones, reflejando que conocemos el nombre del personaje (y cuál es) 
- self.setRelationshipProperty ( m , "​esperandonombre"​ , false ); + set ( self , "​nombre" ​, m , (String)lText ); 
- System.out.println("​Name-relationship is " + self.getRelationshipPropertyValueAsString ( m , "​nombre"​ ) );+ set ( self , "​esperandonombre"​ , m , false );
  self.say("​Encantado,​ " + self.getRelationshipPropertyValueAsString ( m , "​nombre"​ ) + ". Yo soy María."​);​   self.say("​Encantado,​ " + self.getRelationshipPropertyValueAsString ( m , "​nombre"​ ) + ". Yo soy María."​);​
  }  }
Línea 258: Línea 264:
 (...) (...)
 </​code>​ </​code>​
 +
 +En este ejemplo, cuando alguien saluda a María, ésta le pregunta su nombre. Cuando el interlocutor se lo dice, María se queda con el dato (almacenado en una relación con el interlocutor,​ llamada "​nombre"​) y lo usará a lo largo de la conversación:​
 +
 +''//>​ decir "​hola"//​\\
 +Dices "​hola"​.\\
 +La mujer dice "​Hola..."​.\\
 +La mujer dice "​¿Cómo te llamas?"​.\\
 +//> decir "​juan"//​\\
 +La mujer dice "​Encantado,​ Juan. Yo soy María."''​
 +
 +De este modo, a partir de propiedades y relaciones, podemos hacer que las reacciones de los personajes a lo que les decimos varíen de acuerdo a lo que se ha dicho antes en la conversación,​ y por supuesto también a otros factores como identidad del interlocutor,​ humor actual del personaje, situación en el mundo, eventos que hayan sucedido, y un largo etcétera. El único límite es la imaginación y el esfuerzo dedicado a añadir detalle a la simulación.
manejo_de_eventos.1467918559.txt.gz · Última modificación: 2016/07/07 21:09 por al-khwarizmi