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. En esta ocasión les traigo una más de sus versiones entre las existentes para la línea de comandos: Micro Tetris. (La imagen que sigue no es de Micro Tetris, pero me encantó como una suerte de Tetris Arborescente.)
Instalación
Descarga 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 del concurso de código C ofuscado 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(" 33[%d;%dH",(I=i)/12,i%122+28);printf(
" 33[%dm "+(K-k?0:5),k);K=k;}Q[263]=c=getchar();}G(b){for(i=4;i--;)if(q[i?b+
n[i]:b])return 0;return 1;}g(b){for(i=4;i--;q[i?x+n[i]:x]=b);}main(C,V,a)char
V,a;{h[3]=1000000/(l=C>1?atoi(V[1]):2);for(a=C>2?V[2]:"jkl pq";i;i--)*n++=i<
25||i%12<2?7:0;srand(getpid());system("stty cbreak -echo stop u");sigvec(14,v,
0);t();puts(" 33[H 33[J");for(n=f+rand()%7*4;;g(7),u(),g(0)){if(c<0){if(G(x+
12))x+=12;else{g(7);++w;for(j=0;j<252;j=12(j/12+1))for(;q[++j];)if(j%12==10){
for(;j%12;q[j--]=0);u();for(;--j;q[j+12]=q[j]);u();}n=f+rand()%74;G(x=17)||(c
=a[5]);}}if(c==a)G(--x)||++x;if(c==a[1])n=f+4*(m=n),G(x)||(n=m);if(c==a[2])G
(++x)||--x;if(c==a[3])for(;G(x+12);++w)x+=12;if(c==a[4]||c==a[5]){s=sigblock(
8192);printf(" 33[H 33[J 33[0m%dn",w);if(c==a[5])break;for(j=264;j--;Q[j]=
0);while(getchar()-a[4]);puts(" 33H 33[J 33[7m");sigsetmask(s);}}d=popen(
"stty -cbreak echo stop 23;sort -mnr -o HI - HI;cat HI","w");fprintf(d,
"%4d from level %1d by %sn",w,l,getlogin());pclose(d);}
Uso
Simplemente ejecuta esto en tu línea de comandos:
tetris
Seis teclas serán tu mando de control a lo largo de varios niveles de dificultad.
Comentarios
Minimalista. Eficiente. Genial.
Imagen: [Fotero