jueves, 29 de junio de 2017

Como escribir un juego(¿cutre?) de Spectrum. (III) Diseñando el juego.

Otras entregas de esta serie:
Como escribir un juego(¿cutre?) de Spectrum. (I) Introducción.
Como escribir un juego(¿cutre?) de Spectrum. (II) Eligiendo nuestro framework.
Como escribir un juego(¿cutre?) de Spectrum. (IV) Implementación y resultados.
 
Bueno, por fin llega la chicha. Una parte importante, como elegir el framework, ha quedado atrás, y hay que recordar que el Spectrum solo tenía 48 kilobytes de RAM, por lo que tampoco se puede plantear una cosa muy complicada.

La idea para el juego nace de un dibujo tonto que hice hace algún tiempo:

La prueba definitiva de que me falta un tornillo
La idea es sencilla. El dibujo es el primer paso de la dinámica del juego: La producción de gas. El gas se eleva por la atmósfera donde puede ser detonado usando un láser. La detonación puede destruir naves alienígenas que vienen a invadir el planeta Tierra.

El cálculo de la trayectoria del gas puede hacerse de distintas formas. La idea es que sigan una trayectoria parabólica:



Se me olvidaba mencionar que prefiero trabajar en papel antes de empezar a escribir código. En todo caso lo que aparece en la página es un esquema de las coordenadas de pantalla y la trayectoria de las parábolas. Tenemos dos puntos de la misma: El punto de origen y el mas alejado, que trasladado a las coordenadas de pantalla serían (1,1) y (26,18). Como la forma canónica de una parábola es y=ax²+bx+c, nos hace falta una tercera ecuación para calcular los coeficientes a,b y c. Sabemos que en su punto mas bajo la primera derivada vale cero, de forma que y'=2ax+b=0 para x=26. Resolviendo obtenemos:




El resto es obtener las ecuaciones de movimiento con respecto al tiempo. Para una velocidad horizontal de 1, obtenemos una aceleración vertical de (aproximadamente) 0,0544, cuya mitad es 0,0272 (sy=1/2 * at²).  En el código se observa así:

    'incrementar movimiento
    LET t(j)=t(j)+1
    LET x=26 - vx(j)*t(j)
    LET y=18-0.0272*t(j)*t(j)


Donde Vx es un valor entre cero y uno. Las naves alienígenas se mueven en el eje transversal a la pantalla, es decir, que se irán acercando. El efecto se consigue incrementando el tamaño de las mismas.

El decorado de la pantalla lo dibujaremos fuera de la trayectoria del gas, el láser lo dibujamos con plot-draw, usando las teclas del 1 al 7 para apuntar a las distintas areas. Las explosiones las haré usando gráficos de bloques. Para leer el teclado emplearemos la orden IN,  de forma similiar a lo que se hacía para leer el joystick Kempston (Podríamos usar INKEY$, pero esto debería funcionar mejor). Los dibujos los haremos usando UDG's (User defined graphics) creados usando Melbourne Draw.



El resultado es bastante jugable:


Queda añadir una pantalla de presentación, sonido, instrucciones y el menú. En la próxima entrega habré pulido un poco (tampoco mucho) el código y completado el programa.

lunes, 26 de junio de 2017

Como escribir un juego(¿cutre?) de Spectrum. (II) Eligiendo nuestro framework.

Otras entregas de esta serie:
Como escribir un juego(¿cutre?) de Spectrum. (I) Introducción.
Como escribir un juego(¿cutre?) de Spectrum. (III) Diseñando el juego.
Como escribir un juego(¿cutre?) de Spectrum. (IV) Implementación y resultados.
 
Llevo años usando distintos frameworks, y a día de hoy sigo sin saber que significa la palabra. Es decir, si que se lo que significa, en teoría, pero dado lo que me he ido encontrando por ahí, creo que el significado del palabro en cuestión es algo ambiguo. Al final se trata de un conjunto de herramientas (Que pueden tener algo que ver entre si O NO) y que se supone que ayudan a realizar determinada tarea.

En este caso partiré de lo esencial e iré añadiendo programas a medida que los vaya necesitando. Como mi sistema operativo es Linux Mint, casi todo lo que voy a instalar saldrá del gestor de paquetes.

1. El emulador.

A menos que tengamos un Spectrum en casa y queramos conectarlo este es el elemento indispensable. Seguro que hay quien puede, y además será capaz de exportar el código, pero lleva mucho tiempo y esfuerzo. En cambio el emulador funciona estupendamente en nuestro escritorio y tiene sus ventajas.

Yo voy a usar Fuse. Hasta donde he podido comprobar funciona bastante bien y se puede instalar directamente desde el gestor de aplicaciones. Para los que usen sistemas operativos mas cutres (MacOS, Windows) creo que hay versiones para esos sistemas operativos.

1a. La chuleta.

El programa se puede escribir directamente en el BASIC del Spectrum. Hay que decir que tanto el editor de lineas como el teclado funcionan de una forma bastante peculiar, por lo que será necesario saber lo que se hace y una chuleta como esta:




No obstante hoy en día tenemos opciones menos puñeteras y mucho mas recomendables.

2. Editor de texto.

En linux hay muchos y muy buenos. Yo voy a usar Geany. Un editor ligero, con múltiples pestañas, que subraya la sintaxis, autocompleta texto y  permite lanzar otras aplicaciones (compiladores y otras herramientas). Al igual que el emulador está en el gestor de aplicaciones, y al igual que el emulador está disponible en otras plataformas.

2a. Herramientas variadas.


Si se  trabaja desde un editor de texto será necesario emplear una aplicación como zmakebas para cargar el programa en el emulador. Este puede encontrarse en el gestor de paquetes Synaptic.

Lo contrario (Pasar el programa a texto) será necesario si se escribe la aplicación directamente en el emulador y se quiere exportar los listados.  Junto al emulador hay varias utilidades (fuse-utils) entre las cuales encontraremos listbasic.

3. Un compilador. 

Esta es la opción que voy a usar. Aunque hay varios disponibles, me he decidido por el ZX Basic Compiler.  Está escrito en Python, por lo que debería funcionar en casi cualquier plataforma. Para Linux basta con descargar y descomprimir en una carpeta. Luego lo llamamos desde el editor de texto añadiendo algo como lo siguiente en los comandos de construcción:

/home/username/opt/zxbasic/zxb.py %f -o salida.tzx -T -B -a

También podemos hacer que sea el propio Geany el que llame al emulador y ya está, tenemos lo que todo desarrollador en JAVA ha aprendido a configurar:  Un entorno de desarrollo en una máquina de última generación para crear código para una plataforma obsoleta que se ejecuta en un emulador.

Hay varias razones para emplear este compilador. La sintaxis se parece mucho al basic del spectrum (Aunque hay que dejar claro que el código no tiene por que ser completamente compatible), lo que nos permite hacer cosas específicas para esta máquina (gráficos de bloques, atributos de color, UDGs) de una forma mas sencilla que con otros compiladores. También hay una gran cantidad de manuales, tutoriales y otra documentación específica para hacer lo que queremos (un juego).

4. Programa de dibujo.

Casi todas las distribuciones de Linux incluyen magníficas herramientas como GIMP para el retoque fotográfico o ImageMagick para trabajar por lotes. Por desgracia estos programas no se diseñaron para trabajar con el extraño modo gráfico del ordenador de Sinclair. Sin embargo los programas para Spectrum si que están diseñados para hacerlo.




En este caso hay varias opciones, como “The artist”, “Art studio”, etc... Yo he elegido el Melbourne Draw, que es el que usaba de niño :-). Las instrucciones apenas ocupan un folio y la curva de aprendizaje es muy rápida. Además creo recordar que era estupendo para crear UDGs, que eran unos sprites monocromos de 8x8 que se usaban mucho.

5. Hola mundo

Una vez instaladas todas las herramientas vamos a probar a ver que tal funciona todo. Empezaré por escribir un pequeño programa en BASIC directamente en el emulador:



Tras pasarlo por listbasic obtenemos una salida en texto que podemos compilar:

   10 LET x=13: LET y=7
   20 FOR y=17 TO 1 STEP -1: GO SUB 1000: NEXT y
  999 GO TO 9999
 1000 REM ******* up ********
 1015 PRINT AT y,x;" \::\: "
 1020 PRINT AT y+1,x;"\ .\.:\.."
 1025 PRINT AT y+2,x;"\: \::\: \: "
 1030 PRINT AT y+3,x;"\' \: \: \' "
 1040 PRINT AT y+4,x;"\ .\: \''"
 1045 BEEP 0.02,1
 1046 PAUSE 3
 1050 PRINT AT y-1,x;" \::\: "
 1060 PRINT AT y,x;"\ .\.:\.."
 1065 PRINT AT y+1,x;"\: \::\: \: "
 1070 PRINT AT y+2,x;"\' \: \: \' "
 1075 PRINT AT y+3,x;"\ '\' \:. "
 1080 PRINT AT y+4,x;"   "
 1085 BEEP 0.02,1
 1086 PAUSE 3
 1090 RETURN
 9999 REM caca


Hay que recordar que el código no siempre es compatible, pero en este caso lo es. Se han añadido un par de pausas para tener una velocidad parecida (Lineas 1046 y 1086) y compila perfectamente.

6. Conclusión.

A partir de este momento tenemos varias herramientas que funcionan perfectamente y que podemos usar para producir nuestro juego.



En el próximo capítulo me centraré en el diseño del juego que ya llevo bastante avanzado.

Tengo la intención de usar UDGs, gráficos de bloques (Como los del programa "¡Hola Mundo!"), PLOT y LINE, algún que otro POKE y otras técnicas que se usaban en los juegos en BASIC, por lo que el resultado puede resultar algo sorprendente.


jueves, 22 de junio de 2017

Como escribir un juego(¿cutre?) de Spectrum. (I) Introducción.

Otras entregas de esta serie:

Como escribir un juego(¿cutre?) de Spectrum. (II) Eligiendo nuestro framework.
Como escribir un juego(¿cutre?) de Spectrum. (III) Diseñando el juego.
Como escribir un juego(¿cutre?) de Spectrum. (IV) Implementación y resultados.


Hace una semana mas o menos cerró la página de World of spectrum, y como yo me inicié en la informática con el pequeño ordenador de Sinclair, pues me ha entrado un punto de nostalgia.

Aquella página tenía miles de programas, instrucciones, publicaciones, etc...  perfectamente organizadas. Durante años fue la web de referencia de los aficionados. No se sabe si la página volverá a estar online. La página vuelve a estar online, aunque por desgracia no tiene mucho movimiento últimamente. Lo que me pide el cuerpo es poner un mirror o una página alternativa, pero siendo realista debo reconocer que no tengo el tiempo para semejante proeza. En su lugar, y como homenaje, voy a hacer lo que hacía de niño: Escribir software para el Spectrum. En concreto lo que mas se escribió en su época, un videojuego.

Este ejercicio de futilidad se dividirá en varias partes. Primero elegiremos las herramientas con las que trabajar. Luego diseñaremos el juego y finalmente escribiremos el código. En función del resultado decidiremos que hacemos con el. Si es jugable y divertido ya veremos, pero lo mas probable es que acabe en el CGC de este año 😜








Ya escribí un “juego” para este concurso en el pasado, pero no era un auténtico juego. La dificultad era nula, por lo que únicamente resultaba divertido probarlo un par de veces para ver la sucesión de tonterías. Esta vez será distinto y escribiré un auténtico juego.

En esta serie de entradas explicaré paso a paso el proceso que he seguido para crear el videojuego. El tema da para mucho así que iré publicando a medida que vaya avanzando. El sistema operativo en el que trabajaré será Linux y las herramientas... bueno, esas merecen su propio capítulo.

domingo, 4 de junio de 2017

Que si tía, que la Homeopatía funciona y hay un complot para negarlo

Pues nada, que me han mandado un enlace a este artículo. La verdad es que a estas alturas no sorprende a nadie que la llamada "prensa seria" publique animaladas de este calibre, en el que una persona que no tiene ni puta idea de lo que habla recurre a todo tipo de falacias para defender la homeopatía.

El artículo comienza atribuyendo a Norman Borlaugh los problemas de intolerancia al gluten. Su explicación comienza así:

"EN LOS AÑOS CINCUENTA y sesenta del pasado siglo, el ingeniero agrónomo estadounidense Norman Borlaug inició lo que luego se denominaría la Revolución Verde creando semillas transgénicas de arroz, maíz, trigo y centeno que multiplicaban el resultado de la cosecha."

Claro que esto chirría, porque la tecnología para producir transgénicos no aparece hasta los años 80. La llamada "Revolución Verde" empleaba las tecnologías que ya existían a mediados del siglo XX (Selección de especies, irrigación, uso de maquinaria agrícola, fertilizantes nitrogenados, pesticidas, etc...)  Este es el principio del primer párrafo del artículo, figúrense como es el resto.

Sería muy largo analizar cada afirmación que se vierte. Ya hemos visto que la caga desde el principio. Y no para de hacer afirmaciones como esta:

"Estoy segura de que no hay estudios sobre el gluten transgénico porque no le interesan a nadie"

mmmm, veamos. Comprobar esto es tan sencillo como abrir Google Scholar y buscar gluten transgénico. A mi me salen 13100 resultados, mirando en las primeras diez páginas encuentro cinco específicos sobre el tema. Es decir, mentira podrida.

Asusta lo fácilmente que descarta gran parte de los estudios científicos. Según la autora gran parte de los mismos son publicidad encubierta de industrias como la farmacéutica. La realidad es mucho mas compleja y la gran mayoría de los estudios no tienen tanta influencia como pretende la autora.

Y no señora, no me choca la obsesión científica en denunciar la homeopatía. Hay muchas y buenas razones. No es un complot de las farmacéuticas, si solo contase el beneficio serían ellas las que nos venderían los productos homeopáticos, ahorrándose una millonada en investigación y en el proceso de fabricación.

"...pero alucina ver tanta furia contra una práctica barata y desde luego inocua, mientras que los muertos por efectos secundarios de las medicinas alopáticas son un goteo constante: en España triplican a las víctimas de tráfico. Cierto, la disolución de los supuestos principios homeopáticos es tan alta que parecería que los granos son simple azúcar. Pero aunque sólo fuera por el efecto placebo, servirían sin riesgo para mejorar la salud."

Los problemas que veo con estas afirmaciones son las siguientes:

- Que una práctica sea barata no tiene nada que ver con su validez.

- Si es inocua es que no cura, y puede hacer que se abandone el tratamiento (Que tiene inconvenientes, pero suele resultar mejor.).

- El término "alopático" solo lo usan los defensores de la homeopatía. No significa nada, tan solo que no es homeopático.

- Claro que los medicamentos son peligrosos. Sobre todo si se utilizan mal.

- La disolución de los supuestos principios homeopáticos es mucho mayor de la mencionada. Por lo general no queda NI UNA SOLA MOLÉCULA de principio activo.

- El efecto placebo no mejora la salud. Si que mejora los síntomas. Y si que tiene riesgos, como ya he mencionado la gente abandona los tratamientos. Porque los homeópatas, como no, afirman que la homeopatía funciona.

Es decir, que la densidad de afirmaciones contenidas es alta y muchas de ellas son una chorrada.Y que las farmacéuticas ganen mucho dinero porque buscan maximizar el beneficio a menudo recurriendo a técnicas cuestionables es otra cosa distinta.  Lo mejor es que el artículo está publicado en un periódico de los importantes (El País), aunque por su contenido y calidad uno esperaría encontrarlo en un boletín de conspiranoicos.