El huevo de Forth; los alienígenas en su punto; y un dado que no se mueva
He estado actualizando la página Contenidos seleccionados de Forth Dimensions, que además para más comodidad he independizado del artículo original (Mi colección de Forth Dimensions); ya queda menos para terminar la tabla.
Es muy interesante reojear los contenidos que a lo largo de los años seleccioné y marqué en Forth Dimensions. Artículos interesantísimos y muestras de código de los que siempre se aprende mucho me invitan una y otra vez, en cada página, a prestarles atención una vez más, a avivar la imaginación para programar y la inagotable admiración por este lenguaje de programación.
Desde que aprendí Forth con la ZX Spectrum hace muchos años, nunca he dejado de sorprenderme de cómo una idea tan sencilla puede ser tan potente y flexible al mismo tiempo. Forth es como el huevo de Colón de los lenguajes de programación: Cuando conoces cómo funciona internamente te preguntas «¿Por qué a nadie se le ocurrió esto antes?». A los humanos nos cuesta mucho aventurarnos fuera de los caminos conocidos y hacer el esfuerzo de ver las cosas desde otra perspectiva.
Durante años habíamos estado escribiendo (y seguimos haciéndolo sin parar) complejos compiladores para complejos lenguajes de programación con complejas sintaxis, escritos a su vez en complejos lenguajes compilados con complejos compiladores...; y había una manera totalmente diferente de hacerlo, muchísimo más sencilla y paradójicamente más flexible y más potente. Sí, a nadie se le ocurrió antes que a Charles H. Moore, el tipo al que le puedes echar la culpa de todo esto
, como él se suele describir en relación a su criatura.
Cambiemos de lenguaje. Lo que contaba ayer sobre aumentar la velocidad del emulador de ZX Spectrum para ejecutar mi programa en Beta BASIC puede servir para una aventura conversacional u otro tipo de programas, pero no para un juego de acción, por sencillo que sea. Las primeras pruebas del proyecto Alien-B son muy interesantes: aun con gráficos de un 8x8 pixeles, el movimiento pixel a pixel en Beta BASIC es demasiado lento incluso poniendo el emulador a la máxima velocidad posible. Son las cosas del «directo», es decir, de la interpretación.
Es una pena, porque la posibilidad que ofrece el lenguaje de imprimir cadenas en cualquier coordenada gráfica es muy cómoda:
DEF PROC printAlien
PLOT alienX,alienY;CHR$ alienGraphic
END PROC
Siempre es posible acelerar un poquito el programa con muchos pequeños trucos, como duplicar código para evitar llamadas a procedimientos, evitar las variables locales y los parámetros pasados por referencia, usar «números mágicos» en lugar de constantes, usar nombres cortos en las variables numéricas... Todo eso convertiría el programa en menos legible y más difícil de modificar, pero ni siquiera bastaría para convertir la pereza alienígena en un febril deseo de invadir la tierra de una vez por todas.
Una solución brillantísima sería hacer los gráficos un poco más pequeños. Digamos de 1x1 para empezar... Además eso simplificaría mucho el diseño y el uso del color: Puntitos blancos representarían las estrellas como hasta ahora, puntitos rojos representarían los alienígenas y un puntito azul representaría la mirilla del rayo láser...
Una solución aguerrida sería seguir como si tal cosa, por el gusto de ver el resultado. Ver las navecitas invasoras arrastrándose penosamente por la pantalla puede ser relajante. Y aunque hubiera que esperar pacientemente muchos años (hasta la aparición de las primeras computadoras cuánticas), algún día sería posible jugar a Alien-B a la velocidad de la luz.
Una solución original sería reconvertir el juego en otra cosa... ¿Un juego de mesa o de rol de temática alienígena? Habría que tirar el dado para decidir cuántos puntitos desciende la nave invasora... No está mal la idea... Claro que nada de hacer un bonito gráfico de un dado, y mucho menos que se mueva ni suene ni nada de eso; sería demasiado lento. Mucho más sensato es que salga sólo el numerito en la pantalla y ya está...
Los ciclos de procesador son muy valiosos. Por soluciones no quedará.