**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("
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!
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.
genial, vamos a probarlo…..
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’
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.
Holap:
No compila… :(
Alan, puedes revisar el código, porfa?
Estoy ansioso por conocer el resultado… xD
Saludooos :P
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.
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.
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