logo

Etiquetas:

Autor Tema:  (Leído 2636 veces)

Chuso

  • Veterano
  • *****
  • Mensajes: 879
  • Ubicación: Alcorcón - Madrid
  • A jugar que son dos dias
  • Distinciones Antigüedad (más de 8 años en el foro)
    • Ver Perfil
    • The Big Bang Blog
    • Distinciones
Empecemos diciendo que esto es mitad aporte, mitad solicitud de ayuda porque el proyecto lo llevo a medias.
Mis capacidades en programación dejan bastante que desear y seguro que en esta comunidad hay muchas personas que saben cómo hacer lo que queda por hacer y lo que ya está hecho hacerlo mejor.
Vamos al grano:
-Las partidas de Codenames necesitan 25 palabras distribuidas aleatoriamente para 8 espías rojos, 8 azules, 8 civiles y 1 asesino.
(En las reglas son 9 para equipo inicial y solo 7 civiles; esto se cambia con facilidad)
Esta parte la he programado utilizando Wolfram Language porque ya tiene integradas un montón de funciones para jugar con palabras.
Así que, dándome de alta en Wolfram Programming Lab, creé un pequeño script para generar "escenarios" automáticamente.
m=Capitalize[RandomWord[25,Language->"Spanish"]];
TextGrid[{m[[1;;5]],m[[6;;10]],m[[11;;15]],m[[16;;20]];m[[21;;25]]},BaseStyle->{Black,Bold,30},Frame->All]
a={0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3};
a=RandomSample[a,25];
ArrayPlot[{a[[1;;5]],a[[6;;10]],a[[11;;15]],a[[16;;20]];a[[21;;25]]},Mesh->True,ColorRules->{0->Red,1->Blue,2->Gray,3->Black}]

Este script genera la siguiente salida:

Y, en principio, ya estamos listos para jugar.
Pero digo en principio porque las palabras que pueden salir puede que no las conozca ni su padre (ocurre con frecuencia) y es que la función RandomWord saca cualquier palabra del diccionario de español que tiene integrado Wolfram Language.
Una solución sería hacer una lista, por ejemplo, de las 2000 palabras más usadas en español (listadas por ejemplo en http://corpus.rae.es/lfrecuencias.html) y tirar de ellas.

Bien, hasta aquí lo que está hecho. Ahora lo que tengo hecho a medias.
A priori no me pareció muy difícil generar una IA que hiciera de jefe de cada grupo de espías, dándonos las claves que nos lleven a identificar las palabras de nuestros espías y así hacer el juego on-line.
Esto resulta relaivamente fácil si el idioma fuera el inglés porque Wolfram Language tiene implementadas muchas funciones sobre palabras inglesas.
(Para empezar, cuando genera palabras al azar, puedes limitarlas a que sean solo nombres y de tipo común o bien conocidas)
La manera de proceder sería la siguiente:
Haciendo uso de la función WordData y metiendo cada una de las 25 palabras generadas inicialmente se pueden crear listas de palabras equivalentes ("synonism"), palabras más generales ("NarrowerTerms") o más específicas ("BroaderTerms") de cada una de ellas.
Esas palabras son las que puede usar la IA para darnos las pistas automáticamente.
Sorry but you are not allowed to view spoiler contents.

Además se pueden ver qué palabras relacionadas se repiten para cada una de las 25 palabras generadas y así dar el número de espías que puedes destapar con esa palabra clave (además puedes evitar usar palabras que puedan llevar a destapar un espía del equipo contrario)
Y poco más... salvo que todo esto solo parece poder usarse en el entorno de Wolfram Language y no soy muy partidario de los entornos cerrados.

Ahora bien, para hacerlo en español deberíamos poder contar con un diccionario que genere terminos relacionados con cada palabra y hacer lo mismo que  para el inglés. Aquí las posibilidades se disparan más allá de mi tiempo actual. Preguntando en Twitter (gracias a @ruescasd)he llegado a:
Tesauro
Ontología
Taxonomía
No sé muy bien las diferencias pero cada uno de esos diccionarios proporciona palabras relacionadas con una dada.
Así que, habría que buscar una versión online accesible e importar el diccionario a Wolfram Language.

Por último queda la historia de producir de todo esto una página web para poder jugar e ir interactuando con las respuestas de los jugadores.

Bueno, pues aquí lo dejo. Espero que sea de utilidad y que si alguien puede aportar cómo resolver todo o parte de lo que queda, se lo agradeceré porque así aprenderé un montón.
« Última modificación: 03 de Enero de 2016, 12:36:52 por Chuso »
Imagination is more important than Knowledge. A. Einstein

Wkr

  • Administrador
  • Veterano
  • *
  • Mensajes: 32674
  • Ubicación: Zaragoza
  • La vida es muy corta para lidiar con gente idiota
  • Distinciones Líder de una secta decimonónica Reseñas (oro) Entre los 10 más publicadores Entre los 10 con mayor tiempo conectado Colaborador habitual y creador de topics Disfruto creando mis juegos de mesa Antigüedad (más de 8 años en el foro) Fan de las pirámides de icehouse Encargado del juego del mes Encargado de las Convivencias Lúdicas de labsk
    • Ver Perfil
    • Diario de WKR
    • Distinciones
« Última modificación: 03 de Enero de 2016, 11:48:18 por Wkr »

Chuso

  • Veterano
  • *****
  • Mensajes: 879
  • Ubicación: Alcorcón - Madrid
  • A jugar que son dos dias
  • Distinciones Antigüedad (más de 8 años en el foro)
    • Ver Perfil
    • The Big Bang Blog
    • Distinciones
Gracias Wkr!
Pero no creo que sea tanto meter palabras polisémicas (los enlaces dan palabras también homófonas) como palabras que tengan múltiples palabras que se relacionen con él. Ejemplo: ratón->animal, mamífero, campo, queso...
Y en cuanto al lenguaje de programación, ¿hay alguno de tan al to nivel como Wolfram Language que sea libre y se implemente en web facilmente?
Imagination is more important than Knowledge. A. Einstein