Archivo de la categoría Programación

Turbomania



Pasé divertidísimas tardes jugando al simplón Bandera de 1985 escrito por L. Casaus y publicado por MicroHobby, así que cuando hoy he descubierto el Turbomania de 2005 escrito por el prolífico Jonathan Cauldwell, por un momento he vuelto atrás.

Turbomania es un juego sencillo, al igual que el Bandera que conocí, pero con detalles gráficos y de jugabilidad más trabajados. Es fácil de aprender, y muy adictivo. Además, es compatible con Spectrums de 16K, lo que le da todavía más mérito.

Jonathan ha actualizado su tutorial sobre la programación de videojuegos para Spectrum, Writing Spectrum Games, que también podéis descargar (368 Kb.…

Continuar leyendo...

Campanyacompensacio.com



Parece que los responsables de Ferrocarrils Catalans de la Generalitat de Catalunya (FGC), han decidido calmar los ánimos de los sufridos usuario, ofreciendo una compensación equivalente a 1/3 de los billetes que se consuman entre el 1 de diciembre, y 1 mes después a la solución de la incidencia, en el tramo afectado.

Como novedad, han implementado un sistema electrónico online, bajo el sugerente nombre de Campanya de Compensació, que permite hacer el intercambio a la antigua usanza: Se rellena el formulario, y luego se entregan presencialmente los billetes usados.

Para más inri, han sido de los pocos en atreverse hoy día, a poner una web en público, funcionando bajo Microsoft Access, y eso que el número de afectados es superior a los 20.000… ¡Sólo espero que sea la minoria los que use el sistema electrónico, y no haya problemas de concurrencia!…

Continuar leyendo...

Generador de números aleatorios optimizado en AS3



A raiz de un antiguo código C, que implementaba de forma simple un generador de números aleatorios, donde lo que primaba era el rendimiento, he decidido portarlo a ActionScript 3, para ver como ser comportaba al compararlo con el Math.random() incorporado.

He creado una función llamada FastRandom, que recibe dos enteros, que representan el intervalo mínimo y máximo sobre el que queremos sacar el número. Por eficiencia, y porque de hecho es lo que normalmente necesitamos, la función trabaja con números enteros. De hecho son enteros sin signo, aunque como ya vimos, parece que a la máquina virtual de Flash le gustan más con signo, por lo que para él, son con signo.…

Continuar leyendo...

HTML Applications (HTA)



Hypertext Applications (HTA), también llamado HTML Applications, es una plataforma construida sobre Internet Explorer para el desarrollo de aplicaciones de escritorio.

Al estar basado en Internet Explorer, con HTA podemos desarrollar programas, con tecnologías ya conocidas. A saber: HTML/XHTML, CSS, Javascript, VBScript, en pocas palabras, hacer lo mismo que hacíamos para internet, pero ejecutado desde nuestro ordenador local.

HTML Applications, no es que sea demasiado potente, pero su nula curva de aprendizaje, nos permite desarrollar pequeños aplicativos, que se crean en un tiempo récord, y son bastante resultones.…

Continuar leyendo...

100 FPS en un PC (16 bits)



Me he decidido a portar el código de 500 FPS en un PC, a 16 bits. El código inicial ha requerido un par de ajustes uso de int86 en vez de int386, y el menos evidente el cast a long en el printf que calcula los FPS, para evitar pérdida de rango.

Luego ha habido que transformar el build.bat, para pasar los parámetros necesarios al compilador de 16 bits… Al final ha quedado así:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <conio.h>
#ifdef __WATCOMC__
#include <i86.h>
#else
#include <dos.h>
#endif

static unsigned char gacPerin[]={...};

int main (void)
{
register unsigned int iX;
clock_t clkStart, clkEnd;
union REGS udtRegs;

udtRegs.w.ax=0x13;
int86(0x10, &udtRegs, &udtRegs);

for (iX=0; iX<256; iX++)
{
outp(0x3C8, iX);
outp(0x3C9, (gacPerin[(iX*3)+64000])>>2);
outp(0x3C9, (gacPerin[(iX*3)+64001])>>2);
outp(0x3C9, (gacPerin[(iX*3)+64002])>>2);
}

iX=0;
clkStart=clock();
while (!kbhit())
{
memcpy((unsigned char *) MK_FP(0xA000, 0),
gacPerin, sizeof(gacPerin)-768);
iX++;
}
clkEnd=clock();
getch();

udtRegs.w.ax=0x3;
int86(0x10, &udtRegs, &udtRegs);

printf("Frames: %d; FPS: %d\n",
iX, ((long) iX*CLOCKS_PER_SEC)/(clkEnd-clkStart));

return(0);
}

Bajo DOSBox 0.72, he alcanzado 105 FPS, que comparado con los 518 FPS que obtenía la versión de 32 bits, lo hace más de 5 veces más lento.…

Continuar leyendo...

500 FPS en un PC



En 13,5 FPS en un Spectrum, vimos lo que podía hacer un ordenador de 8 bits, con una imagen que se volcaba continuamente a pantalla. Un modesto Spectrum, obtuvo la marca de 13,5 FPS, que podían haber sido bastantes más, evitando la impresión de los conteos en cada cuadro, y escribiendo el código en ensamblador. Diríamos que aquel programa utilizaba tecnología de los años 80.

Ahora volvemos con lo mismo, esta vez con tecnología de los 90. Un programa muy parecido en C, que vuelca a la VGA en modo 13h (320x200x256) una imagen.

Para facilitar la programación, se ha obtado por un código compilado con Open Watcom C++ 1.7a, en modo protegido de 32 bits para DOS, usando el magnífico extensor DOS32/A.…

Continuar leyendo...

Space Invaders en Javascript



Kris Cieslak, ha desarrollado una meritoria conversión del clásico Space Invaders.

A diferencia de otros ports de juegos similares, que se han creado en Flash, Director o Java, éste Space Invaders, está escrito en Javascript, y lo que es mejor, funciona sin problemas en Internet Explorer, Firefox y Opera.

Lo tenéis disponible para jugar online aquí.



Continuar leyendo...

El archivo que se descomprime a si mismo



Maximum Compression, ha inagurado un nuevo apartado en su web con hechos curiosos. El que más me ha llamado la atención es un archivo GZ que al descomprimirse, vuelve a dar el mismo fichero. Proceso que se puede repetir hasta el infinito o hasta que nos cansemos (lo que antes ocurra).

La pequeña joya, creada por Caspian Maclean la podéis descargar aquí (210 bytes en formato GZ).…

Continuar leyendo...

AS3 Fire



Incitado por Polimalo, y después de la última incursión en la demoscene usando Flash (MX 2004/7 en aquel momento), he decidido darle un voto de confianza a Flash CS3/9, y probar las posibilidades del objeto BitmapData para manipular píxeles.

La idea ha sido portar el clásico algoritmo de generación de fuego a ActionScript 3, y ver que ocurría. La primera versión del programa, la tuve lista en 45 minutos, dando 4 frames/segundo.

Invertí tres horas más optimizando código (más detalles en el changelog del propio fuente), y haciendo pruebas de diferentes implementaciones, hasta llegar a conseguir un rendimiento de 30 FPS, limitado basicamente por la eficiencia del método setPixel().…

Continuar leyendo...

HelpPC



Me ha hecho tremenda ilusión encontrar de casualidad la versión online de HelpPC 2.10 (255 Kb en formato ZIP), que escribiera en 1991 David Jurgens.

Si te interesa, puedes obtener el conversor, y las páginas ya convertidas en Nostalgic HTML Conversion of the HelpPC Shareware Reference.

HelpPC era una guía de referencia, de la época de las variadas Norton Guides, la Ralf Brown Interrupt List, la PC Game Programmer's Encyclopedia PCGPE) o los tutoriales SWAG. HelpPC no superaba en ningún aspecto a las anteriores, pero tenía un poco de todo, y era tremendamente compacto, lo que lo hacía muy práctico.…

Continuar leyendo...