Mostrando entradas con la etiqueta informática. Mostrar todas las entradas
Mostrando entradas con la etiqueta informática. Mostrar todas las entradas

lunes, 3 de julio de 2017

Como escribir un juego(¿cutre?) de Spectrum. (IV) Implementación y resultados.

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. (III) Diseñando el juego.

Bueno, una vez añadida una pantalla de presentación (sin usar LOAD SCREEN$)bastante genérica y unas explicaciones, doy el proyecto por concluido. El resultado puede verse en este video:



Hay mucho margen para la mejora:

- Solo hay un nivel de juego y un único nivel de dificultad.
- El movimiento, usando PRINT AT es un poco brusco.
- Solo hay fondo fuera de las trayectorias.
- Las explosiones son pequeñas pausas y hacerlas con gráficos de bloques no ha sido lo mas acertado.
- Las teclas para controlar el disparo no son lo mas manejable.
- Apenas tiene efectos sonoros
- Y un largo etcétera.


Algunos de estos problemas tienen fácil solución. Otros requieren un trabajo bastante serio. De todas formas en algún momento hay que parar, y yo lo he hecho aquí. Porque el resultado es sorprendentemente adictivo. No puedo mandarlo al Crap Game Contest porque no es lo bastante malo, de hecho es hasta bueno. No está ni de lejos a la altura de los Mojon Twins, pero es original, jugable y bastante mejor que muchos de los juegos a los que jugué en su día.

El resultado y el código fuente está disponible para descarga en Sourceforge. No necesita demasiadas explicaciones. Si que es recomendable que el que quiera crear un juego como este se lea la documentación que puede encontrar en la wiki del ZX Basic. Yo no lo he hecho por varios motivos:

1) El haber diseñado el juego antes hace que trasladar el mismo a código sea algo bastante directo. Ciertamente es necesario conocer el sistema y el lenguaje en el que se va a trabajar, pero...

2) El ZX Basic se parece mucho al Sinclair Basic. Cierto que hay notables diferencias (No necesita números de linea, hay que declarar variables, se puede meter ensamblador, permite funciones, subrutinas, etc...), pero la sintaxis es muy similar y...

3) Conozco el equipo al dedillo: Las dimensiones de pantalla, el sistema de color y sobre todo su Basic.

Una vez dicho esto si que es recomendable leer la documentación que acompaña al compilador, y hasta repasar el manual de Spectrum. Hay toda clase de herramientas, librerías y otras cosas que nos facilitan mucho la labor a la hora de conseguir resultados "profesionales".

Al final quedo contento con el trabajo realizado en los pocos ratos libres que he podido encontrar.

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.

sábado, 28 de marzo de 2015

Cuatro formas (por lo menos) de saltarse el bloqueo a The Piratebay en España.


Leo por ahí que un juez ha decidido que hay que bloquear thepiratebay a petición de los esbirros de las discográficas. Podrían decirse muchas cosas, todas ellas malas, sobre los responsables de dicho bloqueo.

España se une así al selecto grupo de paises donde The Pirate Bay ha sido bloqueado: Reino Unido, Irlanda, Dinamarca, Italia, Finlandia, Bélgica y Portugal.

Pero como no quiero extenderme demasiado sobre este tema, que a pesar de que se nos diga que es un tema criminal, tiene mas que ver con la codicia de unos y la estulticia de otros, mejor vamos a la chicha del asunto: Como saltarse este bloqueo.

Como funciona el bloqueo.

Por lo que he podido comprobar, se trata de un bloqueo DNS. Este es el protocolo que convierte las direcciones canónicas (google.es o thepiratebay.se) en direcciones IP (Un conjunto de cifras que son las que en realidad usa el ordenador).

Voy a explicar de una forma sencilla lo que han hecho las telefónicas. Cuando escribimos una dirección en la barra del navegador, este envía esa dirección a un servidor DNS (Normalmente el de nuestro proveedor) que nos devuelve la dirección IP, que es la que nuestro equipo usa para conectarse a la web de ThePirateBay. Lo que ocurre es que ahora el servidor DNS nos dice que no conoce dicha dirección, por lo que no podemos conectarnos. El resultado:
Y ahora que conocemos el problema, vamos con la solución. Que son varias porque Internet es así.


  1. Cambiar las DNS.

    Los servidores DNS de nuestro proveedor de telefonía no son únicos. Hay mas y podemos decirle a nuestro ordenador que utilice otros, por ejemplo los de openDNS:

        208.67.222.222
        208.67.220.220

    Esto lo podemos hacer desde las opciones para conectarnos a Internet de 
    nuestro ordenador. 


  2. El archivo hosts.

    Casi todos los sistemas operativos (Y esto incluye Windows, Linux, etc...) tienen un archivo que se consulta ANTES de buscar el dato en un servidor DNS. Si  conocemos alguna de las direcciones IP que se usan para acceder a The pirate bay, asunto solucionado. Añadimos la siguiente linea al principio del archivo  HOSTS:

    173.245.60.146  thepiratebay.se

    Para saber donde guarda tu sistema operativo el archivo hosts basta con consultar la siguiente tabla:

    Windows 95 / 98 / Me C:\Windows\hosts
    Windows NT / 2000 C:\WINNT\System32\drivers\etc\hosts
    Windows XP / 2003 / Vista / 7 / 8 C:\Windows\System32\drivers\etc\hosts
    Mac OS / iPhone OS /private/etc/hosts
    Unix / Linux / BSD /etc/hosts
    Novell NetWare SYS:etc\hosts
    OS/2 / eComStation "bootdrive":\mptn\etc\
    BeOS /boot/beos/etc/hosts
    Symbian OS 6.1-9.0 C:\system\data\hosts
    Symbian OS 9.1+ C:\private\10000882\hosts
    Android /system/etc/hosts
    Fuente: Wikipedia

    El bloqueo por DNS puede evitarse de mas formas, pero estos dos son los mas sencillos que se me ocurren. Si el problema es un servidor DNS "contaminado", se evita recurrir al mismo y a otra cosa.

     

  3. Mirrors, proxies y VPNs.

    Los métodos anteriores requieren un mínimo de conocimiento de lo que se está  haciendo, y permisos de administrador del sistema. No obstante hay métodos  mas sencillos todavía.

    The Pirate Bay ha sido bloqueada ya en varios paises, por lo que la gente ha  buscado formas fáciles de saltarse estos bloqueos. Los mirrors y los proxies  dedicados son una forma de hacerlo. Hay muchos y cambian con frecuencia.  Una lista de ellos puede encontrarse aquí.

    Un proxy genérico también nos puede servir, tanto uno de pago como uno  gratuito. Lo que me recuerda que si accedemos a Internet usando una red  privada virtual (VPN) que use otros servidores DNS, también nos saltaremos el bloqueo.

  4. Para nota.

    4.1 Configurar nuestro servidor DHCP

    Si no nos apetece reconfigurar las DNS o el archivo Hosts de cada equipo, hay una forma mas lógica: Cambiar las DNS del servidor DHCP. El protocolo DHCP es el que le dice a los equipos con configuración automática que servidores DNS debe utilizar.

    En las redes domésticas el router suele ejercer de servidor DHCP. Cada router es distinto, por lo que no voy a explicar en detalle como configurarlo. Ya se han mecionado otras formas mas sencillas.

    4.2 Instalar nuestro propio servidor DNS 

    Esto tendría la ventaja adicional de que las peticiones DNS se realizarían a nivel local, reduciendo el ancho de banda que usamos y aumentando la velocidad de las consultas. Incluso podemos instalar el servidor DNS en el mismo equipo que usamos para acceder a Internet.

¡Y ya tenemos TPB funcionando de nuevo!

Estos son los métodos que se me ocurren a botepronto. Todos se han probado y funcionan. Exceptuando los del apartado 4, todos ellos son mas sencillos que instalarse un cliente de torrent, que es de lo que va todo.  Y se me han ocurrido mas formas por el camino, pero no me ha dado tiempo a probarlas.

Queda demostrada una vez mas la inutilidad de intentar poner puertas al campo. Tener leyes que ordenan lo imposible debería dar que pensar a mas de uno. Si queremos un sistema infalible, tranquilos que no es tan fácil. Ni siquiera en Arabia Saudí o China se consigue censurar todo.

Actualizado tres horas despues...
Ciertamente se me han olvidado algunas formas mas... Pirate Browser y Tor... Si es que hay tantas :-)