CAAD
http://foro.caad.es/

HOWTO: Efectos ambientales aleatorios
http://foro.caad.es/viewtopic.php?f=15&t=5244
Página 1 de 2

Autor:  Johan Paz [ 23 May 2012 23:59 ]
Asunto:  HOWTO: Efectos ambientales aleatorios

Iniciemos el tema de los HOWTOs con 'efectos ambientales aleatorios' o más detalladamente como ha explicado Comely:

Citar:
En general, eventos aleatorios que no tienen por qué ver con el desarrollo de la obra pero favorecen la inmersión y añaden complejidad al mundo. Extraído de "Modus Vivendi":

La Plaza
Un curioso personaje llega del foro caminando y, sacando una tabla de cera y un estilo de un morral en completo silencio, toma luego algunas notas, mirando aquí y allá. Luego, guarda los utensilios en el morral y se aleja rumbo al foro sin decir palabra.


Detallemos primero los detalles de lo que debería contener el ejemplo...

Autor:  joruiru [ 24 May 2012 08:33 ]
Asunto:  Re: HOWTO: Efectos ambientales aleatorios

Pues para que sean ejemplos útiles para el copy&paste, mi propuesta es que sea una función "global", que reciba al menos el parámetro con la probabilidad de que suceda un evento, así se podría usar en varias partes del código que requiriesen un % diferente...
Por ejemplo, si está lloviendo, en localidades del exterior hay un 85% de que haya un relámpago y un trueno... en localidades bajo techo, hay un 15% de que una ráfaga de viento abra violentamente una ventana...

En pseudo código:

Código:
función eventoaleatorio(probabilidad)
  Si random(100) < probabilidad entonces
    escoge_mensaje_aleatorio;
    imprime_mensaje_aleatorio;
fin


Si alguien considera que se detalle algo más, que lo diga...

Autor:  Comely [ 24 May 2012 10:03 ]
Asunto:  Re: HOWTO: Efectos ambientales aleatorios

A mí me parece bien, los ejemplos tienen que ser lo más parecidos posible, pero cada lenguaje tiene sus particularidades. Por ejemplo, TADS3 trae de serie 7 diferentes tipos de listas de eventos que no son reproducibles ni hace falta reproducir, ya que se escapa fuera del ámbito del ejemplo.

Lo que me lleva a: ¿qué es lo que se supone que tenemos que mostrar, el código a pelo o hay que mostrar posibilidades y variantes? creo que lo primero es a lo que se refería Johan, ejemplos simples para diferentes tareas.

Ahí va el código en TADS3, extraído y mal traducido del "Learning TADS", sin usar parámetros para hacerlo más sencillo.

Código:
Claro: Room 'Claro del Bosque'
    atmosphereList: ShuffledEventList
    {
        [
            'Una ardilla huye disparada hacia la copa de un roble y desaparece fuera de tu vista.  ',
            'En tu camino te cruzas con un zorro. Te mira, gira sobre sí mismo y se pierde entre la espesura. ',
            'Se oye el murmullo de pequeños animales en la maleza. ',
            'A cierta distancia a tu derecha, un grupo de pájaros alzan el vuelo. '
        ]
        eventPercent = 75 // Posibilidad de que suceda uno de los efectos.
        eventReduceAfter = 4 // Número de veces que se disparan los efectos hasta que se reduce la posibilidad de otro suceso.
        eventReduceTo = 25 // Reducción de la probabilidad de que sucedan.
    }

Autor:  Al-Khwarizmi [ 24 May 2012 11:26 ]
Asunto:  Re: HOWTO: Efectos ambientales aleatorios

Os pongo dos versiones en AGE. La primera es si se quiere que el evento vaya dirigido a una habitación (y se muestre a todos los jugadores y criaturas que están en ella):

Código:
/*
r: habitación donde tendrá lugar el evento
probability: probabilidad entre 0 y 1 de que suceda un evento
texts: textos aleatorios para elegir uno que se mostrará en caso de que suceda el evento
*/
void randomEvent ( Room r , double probability , String[] texts )
{
    if ( world.getRandom().nextDouble() < probability ) //echar a suertes si hay evento
    {
        int eventIndex = Math.abs( world.getRandom().nextInt() % texts.length ); //elegir qué mensaje se muestra
        r.reportActionAuto ( null , null , texts[eventIndex] , false ); //mostrar el mensaje
    }
}


La segunda es si se quiere que el evento vaya dirigido directamente al jugador, esté en la habitación donde esté:

Código:
/*
m: criatura que recibirá el evento
probability: probabilidad entre 0 y 1 de que suceda un evento
texts: textos aleatorios para elegir uno que se mostrará en caso de que suceda el evento
*/
void randomEvent ( Mobile m , double probability , String[] texts )
{
    if ( world.getRandom().nextDouble() < probability ) //echar a suertes si hay evento
    {
        int eventIndex = Math.abs( world.getRandom().nextInt() % texts.length ); //elegir qué mensaje se muestra
        m.writeStory ( texts[eventIndex] ); //mostrar el mensaje 
    }
}


Así, por ejemplo, para usar la primera forma, podríamos llamarla así:
Código:
String[] mensajes = {"Un trueno hace resonar todo el vestíbulo.","Desde un rincón oscuro del vestíbulo, oyes el chirrido de una rata."};
randomEvent ( room("Vestíbulo") , 0.5 , mensajes );

Que mostraría uno de los dos mensajes en el vestíbulo con probabilidad 0.5 (50%).

Autor:  Johan Paz [ 24 May 2012 12:25 ]
Asunto:  Re: HOWTO: Efectos ambientales aleatorios

A ver... dos cosas:

  • ya nos hemos lanzado a poner el código, lo que a mí me gustaría es que le diésemos una forma un poco más digerible en y publicable en forma de artículo del SPAC, conteniendo al menos:
    • Una breve explicación de lo que vas a mostrar en el código, para qué sirve y un posible ejemplo de 'script' de una aventura imaginaria.
    • El código en sí.
    • Una breve explicación del código.
    • Posibles variantes, librerías, etc... que estuviesen relacionadas con el tema.
  • en cuanto a 'qué', deberíamos usar descripciones funcionales no seudocódigo, porque efectivamente puede cambiar muchísimo de un lenguaje a otro y no creo que en todos los casos sean comparables.
  • no tenía intención de que esto sirviese para comparar lenguajes, ya que para eso ya tenemos muchas otras cosas, sino que sirviese como material de consulta.

Autor:  Al-Khwarizmi [ 24 May 2012 15:08 ]
Asunto:  Re: HOWTO: Efectos ambientales aleatorios

He puesto el código porque me llevó cinco minutos en un descansillo del trabajo, y explicar cosas detalladamente lleva más tiempo... a ver si en otro momento tengo tiempo para escribir un poco más. Si no, también se puede apuntar alguien más a hacer la explicación.

Autor:  Comely [ 24 May 2012 15:30 ]
Asunto:  Re: HOWTO: Efectos ambientales aleatorios

Yo también he puesto el código porque no costaba nada y para ver si era a lo que nos estábamos refiriendo, no porque fuera la aportación definitiva. Una explicación más detallada llevaría algo más de tiempo y espacio, pero se puede hacer.

Autor:  Johan Paz [ 24 May 2012 21:36 ]
Asunto:  Re: HOWTO: Efectos ambientales aleatorios

Bueno, pongo el código más simple posible de I7, para eventos simples que ocurren aleatoriamente en una localización y este fin de semana escribiré el artículo más detallado:

Código:
Lugar is a room. "La noche. La espesura. La soledad."

Every turn when a random chance of 1 in 3 succeeds and location is Lugar:
   say "[one of]Un grillo suena en la distancia.[or]Un olor a madreselva llega hasta tu nariz.[or]Una lejana y triste música parece provenir de la espesura.[at random]".

Autor:  Incanus [ 25 May 2012 04:17 ]
Asunto:  Re: HOWTO: Efectos ambientales aleatorios

Si alguien quiere ver mis códigos fuentes, vienen en las descargas de todos mis juegos.

Específicamente, ejemplos con efectos ambientales: "El Protector", "Goteras", "Afuera", "Ofrenda a la Pincoya" y "Modus Vivendi".

Por descontado que podéis incluirlos en el HOWTO: no debiera costar casi nada adaptarlos de InformATE! a INFSP/Inform 6

Saludos,

Autor:  Johan Paz [ 25 May 2012 13:08 ]
Asunto:  Re: HOWTO: Efectos ambientales aleatorios

Pregunta a los administradores: ¿qué veis mejor que cada uno se curre un artículo en el SPAC por separado o me encargo de reunirlos en uno sólo -eso sí, potencialmente muy muy muy muy largo?

Autor:  dddddd [ 25 May 2012 13:55 ]
Asunto:  Re: HOWTO: Efectos ambientales aleatorios

Johan Paz escribió:
¿qué veis mejor que cada uno se curre un artículo en el SPAC por separado o me encargo de reunirlos en uno sólo -eso sí, potencialmente muy muy muy muy largo?

Lo llevo al hilo genérico, porque es un tema que afecta a todos los artículos, no a éste en concreto, y a todos los autores.
viewtopic.php?f=10&t=5235&p=64439#p64439

Gracias y perdón por la intromisión. Espero que se entienda mi motivación.

Autor:  Johan Paz [ 28 May 2012 10:38 ]
Asunto:  Re: HOWTO: Efectos ambientales aleatorios

Publiqué (creo) anoche el artículo de la versión I7, os animo a hacer algo parecido con los otros lenguajes.

Autor:  joruiru [ 28 May 2012 12:48 ]
Asunto:  Re: HOWTO: Efectos ambientales aleatorios

Está bien... El mío irá sin introducción, ya que la tuya vale para todos los demás.... :mrgreen:

Autor:  Johan Paz [ 29 May 2012 09:22 ]
Asunto:  Re: HOWTO: Efectos ambientales aleatorios

Me han dicho que al perderse los tabuladores al copiarse y pegarse del artículo al IDE de I7 no funciona bien. No sé si hay alguna forma de mantener los tabuladores. Si no se puede, ¿se puede adjuntar a los artículos contenidos? Si no se puede pondré URLs a algún dropbox o similar.

Autor:  joruiru [ 29 May 2012 09:40 ]
Asunto:  Re: HOWTO: Efectos ambientales aleatorios

Se me ocurren dos cosas...

1) Que se hayan perdido al copiar en el editor del spac y se hayan transformado en blancos -> Solución: Editar el artículo y volver a poner los tabuladores...

2) Que sí se introdujesen los tabuladores, pero al renderizar la página en el html ya no existen, con lo que la solución anterior no sería válida -> Solución: Editar el artículo, ir a la vista html (es un check debajo del editor que pone algo así como desactivar rich-text), y poner a mano el código html del tabulador donde toque (#09; con el & delante)

Por otro lado, sí que se pueden adjuntar ficheros al artículo.

Página 1 de 2 Todos los horarios son UTC + 1 hora
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/