@ agnasg

agnasg


Compilando…

06-02-2007 11:33 AM

Lo siento… estoy compilando…

Probably the best quote on game theory I’ve ever heard came directly from Kevan’s website: “The world needs more games that you can explain in three minutes and play for hours, with a single deck of any old cards.”
(Probablemente el mejor comentario sobre teoría de juegos que yo he oído viene directamente del site de Kevan: El mundo necesita más juegos que se pueden explicar en tres minutos y se juegan durante horas con cualquier mazo de cartas tradicionales)… tomado de un comentario sobre Kevan, el autor de Urban Dead.

Enlaces que no están compilando…

  • Al parecer no soy el único que fustiga su lista de cosas por hacer con nuevas ocurrencias. Niko, el programador del Motor Gráfico Irrlicht (mi recomendación para cualquier juego 3D) acaba de meditar sobre la posibilidad de programar su propia Máquina Virtual de Java! Como si su editor de sonidos, el motor gráfico y otro par de proyectos no fuesen suficientes. ¿Cómo está mi lista? Échenle un vistazo:
    • Finalizar el interpretador de aventuras conversacionales, y el juego que estoy desarrollando al mismo tiempo (el código fuente de esta aventura, en el lenguaje tipo C++ que desarrollé ya tiene 2300 líneas de código!)
    • Terminar un juego de espionaje, hacking y estrategia desarrollado utilizando DirectX. Le falta un mes de trabajo desde hace 3 años!
    • Terminar Memorybreaker, un juego tipo Memoria programado utilizando la librería SDL.
    • Escribir un cuento cuyo argumento ya
      está listo.
    • Tengo dos post en espera, uno sobre cómo instalar el compilador gcc para desarrollo de juegos, y otro titulado “Somos animales en un zoológico”. Sin palabras.
    • Trabajar. Porque se supone que tengo un trabajo ¿O no? ¿O sí? ¿No? ¿Sí? Bueno, aqui va la última palabra de El coronel no tiene quien le escriba.
  • Una paraiso visual llamado Michelandia. Gracias Mich por hacerme ver que tenía mucho tiempo que no visitaba tu site! Mich y yo siempre hemos querido trabajar juntos sobre el proverbial mejor juego 2D de todos los tiempos… algún día ¿verdad?

Post #200: hablemos de Haskell

30-01-2007 2:03 PM

Esta es la entrada número 200 en este sitio. En realidad son muchas más pero por múltiples razones todavía no he terminado de migrar toda la data de mi página anterior que estaba escrita 100% en html. Este nuevo sitio está desarrollado con WordPress y php. Una de las razones de esta lentitud es que, como se debe notar si se lee detenidamente estas páginas, yo me la paso desarrollando juegos que normalmente termino no publicando. Eso consume bastante tiempo. Creánme. Por ejemplo, en este momento estoy desarrollando un intérprete para aventuras conversacionales, y estoy desarrollando un juego usando ese interprete, como dije abajo, espero publicarlos en dos meses. Pues bien, este interprete utiliza un lenguaje que es una mezcla de C, C++ y algunas notaciones de otros lenguajes para desarrollar aventuras conversacionales tales como Inform y Hugo. Pero ha llegado el momento en que debo agregar alguna notación para programar funciones (por si al implementador de una aventura conversacional se le ocurre que necesita una función o procedimiento). Incialmente pensaba utilizar la notación, sintaxis y gramática de C, pero se me ha ocurrido que quizás deba investigar en profundidad otras posibilidades. Claro que descarté Lisp, Prolog y Schema en el primer nanosegundo, pero estos lenguajes me hicieron pensar en los lenguajes funcionales. Estos lenguajes se centran en qué se va a hacer, qué se va a calcular, no cómo hacerlo. Los que usan hojas de cálculos tienen experiencia usando un lenguaje funcional. Ahi, se especifica el valor de una celda a través de su expresión para calcularla.

Le dí un vistazo a Erlang (1), pero me pareció horrible (yo soy fanático de la elegancia). Y entonces recordé Haskell (1, 2), un lenguaje que he mantenido en observación desde hace algún tiempo y que últimamente, por cierto, ha estado de moda. Yo podría extenderme explicando las bondades de este lenguaje y su potencia, pero prefiero resumir presentando un par de ejemplos tomados de los tutoriales.

Comencemos con la definición de la longitud de un string, una función que tipicamente se llama length en la mayoría de los lenguajes (excepto en C, que en la librería standard se llama strlen ())

length :: [a] -> Integer
length [] = 0
length (x:xs) = 1 + length xs

Ups! qué demonios es eso se preguntará un programador de lenguajes imperativos (es decir de lenguajes como C, Java, etc). Es simple si entendemos la notación. La primera línea indica que la longitud de un string es un integer. ¿Lógico verdad? Bien, la segunda línea es mucho más sencilla: la longitud de un string vacio es cero. Wow!, genial, obvio, evidente, simplemente elegante. Pues aún hay más simplicidad. la tercera línea dice que la longitud de un string cuyo primer elemento es ‘x’ y el resto es ‘xs’ es 1 más la longitud de xs. ¿Genial, verdad? Sip. Simple, elegante, fácil de entender y fácil de implementar. Lisp, Prolog y otros lenguajes similares resultan igualmente simples al comienzo pero se complican rápidamente. Haskell se mantiene simple todo el tiempo. Veamos otro ejemplo. Implementemos la función quicksort (para los que no se acuerdan, es la función más eficiente para ordenar una arreglo de números).

qsort[] = []
qsort[] (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter >= x) xs)

Hmm. ¿Qué es esto? Elemental mi querido lector. El resultado de ordenar una lista vacia ‘[]’ es una lista vacía ‘[]’. Y el resultado de or
denar una lista cuyo primer elemento es ‘x’ y el resto de los elemnentos es ‘xs’ es simplemente la concatenación ‘++’ de el qsort de todos los elementos menores a x en xs (filter (=x) xs) con [x] en el medio.

En alguna parte dice que debemos (los programadores) aprender al menos un nuevo lenguaje todos los años, así que si al final no utilizo Haskell para mi interprete, al menos la experiencia de aprender a usarlo habrá sido buena.

Un enlace solitario en este post (el #200) que ha sido particularmente largo

Gerencia de proyectos simplificada a un byte

27-01-2007 11:52 AM

He estado prestándole bastante atención a mi sistema de seguimiento de actividades. El desarrollo de un juego puede involucrar un proceso muy extenso, al menos en el caso del interprete de una aventura conversacional (mi proyecto actual) ha acumulado algo así como 158 dias de trabajo, aproximadamente dos hora cada día en promedio (algunos dias le he dedicado 8 horas), totalizando alrededor de 632 horas de trabajo. Esto se dice fácil pero involucra un esfuerzo considerable. En el curso de este proyecto se me han presentado al menos 185 actividades, entre nuevas características, bugs, correciones, etc. Yo manejo solo dos status: pendiente y hecho. Esto puede ser algo más sofisticado, pero mi interés es justamente la simplicidad. Ya bastante trabjo tengo con el proyecto en sí para agregarle el overhead de administrar un pesado sistema de manejo de control de proyecto (en Google los programadores no utilizan sistemas de gerencia de proyecto en lo absoluto, lo cual es realmente increible y curioso). Como un ejemplo, a continuación presento cómo luce mi bitácora de actividades en estos días. La primera columna indica la fecha, la segunda el status (P=pendiente, D=listo. Esta es una de las tantas mezclas de español con inglés que yo hago permanentemente)

27-01-07 Implementación y construcción de la escena del templo (cont´d)
22-01-07 ·(P) Colocar observar y mirar como sinónimos de ver
21-01-07 ·(P) Recordar que se debe crear una clave para distinquir las variables del juego de las definiciones que devuelven su texto si hacemos “que es kkk”
18-01-07 · (P) Implementación del juego Cloak of Darkness, http://www.firthworks.com/roger/cloak/
  ·(D) Reorganizar parser y crear una clase ns_archi
voC, para manejo de archivos.
17-01-07 · (P) Implementar ‘disparador’.ejecutado devuelve 1 si el disparador fue ejecutado. Esto es interminable. Que alguien me liquide. Actualización plano de Bltre, edición general. Secuencia del templo ceremonial. ·-·
16-01-07 Ejecución del código NS_OP_MOVER starting.
15-01-07 · (P) (¿?) Revisar khpx30a y ver si se puede sacar otra interfase para el juego. Progreso lento.
10-01-07 incluir “archivo” listo.
09-01-07 incluir “archivo” cont’d.
08-01-07 incluir “archivo” cont’d.

La lista continua y ocupa en el archivo unos 36k de texto (la bitácora del motor gráfico que estuve implementando hasta 2005, ocupa 152K). Como una técnica de desarrollo, yo estoy haciendo la implementación del interprete al mismo tiempo que desarrollo la aventura conversacional. De esa forma descubro cuáles características son más útiles a medida que avanzo en la implementación. Espero terminar ambos proyectos dentro de dos meses aproximadamente.

Un enlace solitario para que esta entrada en el blog no se quede sin enlaces

FICOMP

16-01-2007 5:59 PM

Es curioso que desde hace una semana está activo el site de FICOMP y no lo había mencionado. FICOMP es un MiniComp de Aventuras Conversacionales que estoy organizando. El tema será de ciencia ficción, terror o suspenso. Su primera edición será en Julio de 2007.

Esta competición tiene como objetivo fundamental promover la generación de nuevas aventuras, y particularmente con el tema de ciencia ficción, terror y suspenso. Puede ser de cualquier extensión, y los autores pueden inscribir tantas aventuras como quieran. Contacte a los organizadores aqui.

Enlaces en competición