Hoje vamos mudar a direcção nos artigos Linux e trazer até vós algo diferente, um desafio ! Para isso, antes de lerem todo o artigo, tentem responder à seguinte questão:
Qual será o resultado das seguintes 19 linha de código seguintes, escritas na linguagem de programação C?
Alguém conseguiu chegar à solução? Pois bem, as 19 linha de código em C fazem parte do jogo Micro Tetris. Estas “simples” 19 linhas de código, pertencem ao vencedor do concurso de código C que foi contemplado com o melhor desenvolvido jogo, em termos de programação. Vamos testar?
Para começar vamos colocar o seguinte código por exemplo num ficheiro com o nome tetris.c 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(“\033[%d;%dH”,(I=i)/12,i%12*2+28);printf( “\033[%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(“\033[H\033[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()%7*4;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(“\033[H\033[J\033[0m%d\n”,w);if(c==a[5])break;for(j=264;j–;Q[j]= 0);while(getchar()-a[4]);puts(“\033[H\033[J\033[7m”);sigsetmask(s);}}d=popen( “stty -cbreak echo stop \023;sort -mnr -o HI – HI;cat HI”,”w”);fprintf(d, “%4d from level %1d by %s\n”,w,l,getlogin());pclose(d);}
Em seguida, abrimos a linha de comandos, e no mesmo local onde temos guardado o ficheiro tetris.c, mandamos complicar o código fonte com o seguinte comando.
gcc tetris.c -o tetris
Para executar o jogo, basta inserir o seguinte comando
./tetris
O jogo coloca a disposição do utilizador 6 teclas que permitem manipular as peças e realizar algumas acções. 19 linhas de código? Fantástico !