Google

**Tetris**, no tengo que explicarlo —pero hay que llenar de palabras este párrafo—, es un clásico lleno de clones y variantes; tantos que es difícil recordar [el original](http://vadim.oversigma.com/Tetris.htm). En esta ocasión les traigo una más de sus versiones entre las existentes para la línea de comandos: [**Micro Tetris**](http://freshmeat.net/projects/micro-tetris). (La imagen que sigue no es de Micro Tetris, pero me encantó como una suerte de Tetris Arborescente.)

### Instalación

[Descarga](ftp://ftp.vmlinux.org/pub/People/jocke/micro-tetris/) los 8 K de la recién publicada versión 1.2.0.

wget ftp://ftp.vmlinux.org/pub/People/jocke/micro-tetris/tetris-1.2.0.tar.bz2

Descomprime.

tar jxvf tetris-1.2.0.tar.bz2

Ingresa al directorio y compila e instala —claro, previamente es necesario que tengas instalado make, GCC y los archivos de cabecera esenciales de lenguaje C.

cd tetris-1.2.0
make && sudo make install

La historia detrás de Micro Tetris pueden leerla en el archivo README. Resulta que las 424 líneas de **tetris.c** están basadas en las 19 del [ganador](http://homepages.cwi.nl/~tromp/tetris.html) del [concurso de código C ofuscado](http://www.ioccc.org/) al mejor juego. De hecho, me permito presentárselas. Pueden copiarlas en un archivo .c y luego compilarlas. Les aseguro que funciona perfectamente.

long h[4];t(){h[3]-=h[3]/3000;setitimer(0,h,0);}c,d,l,v[]={(int)t,0,2},w,s,I,K
=0,i=276,j,k,q[276],Q[276],*n=q,*m,x=17,f[]={7,-13,-12,1,8,-11,-12,-1,9,-1,1,
12,3,-13,-12,-1,12,-1,11,1,15,-1,13,1,18,-1,1,2,0,-12,-1,11,1,-12,1,13,10,-12,
1,12,11,-12,-1,1,2,-12,-1,12,13,-12,12,13,14,-11,-1,1,4,-13,-12,12,16,-11,-12,
12,17,-13,1,-1,5,-12,12,11,6,-12,12,24};u(){for(i=11;++i<264;)if((k=q[i])-Q[i]
){Q[i]=k;if(i-++I||i%12<1)printf("

También en Hipertextual:

La actualidad tecnológica y científica en 2 minutos

Recibe todas las mañanas en tu email nuestra newsletter. Una guía para entender en dos minutos las claves de lo realmente importante en relación con la tecnología, la ciencia y la cultura digital.

Procesando...
¡Listo! Ya estás suscrito

Participa en la conversación

16 Comentarios

Participa en la conversación, deja tu comentario

  1. I do not even know the way I finished up here, however I believed this publish used to be good. I do not recognize who you might be however definitely you are going to a famous blogger should you aren’t already ;) Cheers!

  2. El programa compila tal cual. Digamos que guardan el código en un archivo minitetris.c. Yo compilaría con GCC así:

    gcc -o mt minitetris.c

    Olviden los mensajes. Sólo son warnings. Noten que ahora tienen un ejecutable en el directorio de compilación.

    Ahora ejecuto

    ./mt

    Y listo. Cuando salgan del juego verán que bash no regresa. No pasa nada grave. Sólo cierren la terminal y listo.

    Disculpen la demora de mi respuesta, estuve desconectado del mundo por 24 hrs. y no estuve enterado de la positiva respuesta que tuvo este artículo. ¡Gracias! Estoy entusiasmado por escribir más sobre código ofuscado.

  3. repito los errores (con doble salto de linea)

    t.c:1: warning: data definition has no type or storage class

    t.c:1: warning: cast from pointer to integer of different size

    t.c:1: error: initializer element is not constant

    t.c:1: error: (near initialization for ‘v[0]’)

    t.c: In function ‘u’:

    t.c:6: warning: incompatible implicit declaration of built-in function ‘printf’

    t.c: In function ‘main’:

    t.c:16: warning: incompatible implicit declaration of built-in function ‘printf’

    t.c:18: warning: incompatible implicit declaration of built-in function ‘fprintf’

    t.c:19: warning: passing argument 1 of ‘fprintf’ makes pointer from integer
    without a cast

    t.c:19: note: expected ‘void *’ but argument is of type ‘int’

    t.c:19: warning: format ‘%s’ expects type ‘char *’, but argument 5 has type ‘int’

  4. El tetris que se descarga sí que va, pero el fichero de 19 líneas no compila:

    t.c:1: warning: data definition has no type or storage class
    t.c:1: warning: cast from pointer to integer of different size
    t.c:1: error: initializer element is not constant
    t.c:1: error: (near initialization for ‘v[0]’)
    t.c: In function ‘u’:
    t.c:6: warning: incompatible implicit declaration of built-in function ‘printf’
    t.c: In function ‘main’:
    t.c:16: warning: incompatible implicit declaration of built-in function ‘printf’
    t.c:18: warning: incompatible implicit declaration of built-in function ‘fprintf’
    t.c:19: warning: passing argument 1 of ‘fprintf’ makes pointer from integer without a cast
    t.c:19: note: expected ‘void *’ but argument is of type ‘int’
    t.c:19: warning: format ‘%s’ expects type ‘char *’, but argument 5 has type ‘int’

    Los warning dan igual, pero los error va a ser que no.

    1. Pues sí compila como dice Xampa, pero yo ni le he puesto los includes, simplemente gcc -o tetris tetris.c
      Y si existe un fichero con nombre HI que inicialmente esté vacío va almacenando las puntuaciones manteniéndolas ordenadas de mayor a menor puntuación.

  5. Llevo un rato con las «19 líneas dichosas» pero no soy capaz ajajja De primeras le faltan los #include, pero luego sigue dando errores y no me deja. ¿Tú lo has conseguido compilar? Es que ya me corroe la curiosidad :)

    Muy interesante el articulo.

    1. Si compila con ==> gcc -o tetris tetris.c

      le puse estas librerías

      include <stdio.h>

      include <stdlib.h>

      include <string.h>

      y da 3 warnings :

      tetris.c:22: warning: assignment makes integer from pointer without a cast
      tetris.c:23: warning: passing argument 1 of ‘fprintf’ makes pointer from integer without a cast
      tetris.c:23: warning: passing argument 1 of ‘pclose’ makes pointer from integer without a cast

      lo estoy haciendo con mac no se con que ustedes y luego al ejecutar ./tetris funciona como dice el artículo